Move ion allocations to use the same client.

We don't need to create a new ion client for every ion allocation.

bug 30898724

Change-Id: I6a82348e837c1d390618483460767581d2324b4c
diff --git a/QCamera2/HAL3/QCamera3Mem.cpp b/QCamera2/HAL3/QCamera3Mem.cpp
index a2daf0d..100d7a2 100644
--- a/QCamera2/HAL3/QCamera3Mem.cpp
+++ b/QCamera2/HAL3/QCamera3Mem.cpp
@@ -68,11 +68,11 @@
     mBufferCount = 0;
     for (int i = 0; i < MM_CAMERA_MAX_NUM_FRAMES; i++) {
         mMemInfo[i].fd = -1;
-        mMemInfo[i].main_ion_fd = -1;
         mMemInfo[i].handle = 0;
         mMemInfo[i].size = 0;
         mCurrentFrameNumbers[i] = -1;
     }
+    main_ion_fd = open("/dev/ion", O_RDONLY);
 }
 
 /*===========================================================================
@@ -86,6 +86,7 @@
  *==========================================================================*/
 QCamera3Memory::~QCamera3Memory()
 {
+    close(main_ion_fd);
 }
 
 /*===========================================================================
@@ -133,8 +134,8 @@
     LOGD("addr = %p, fd = %d, handle = %lx length = %d, ION Fd = %d",
           cache_inv_data.vaddr, cache_inv_data.fd,
          (unsigned long)cache_inv_data.handle, cache_inv_data.length,
-         mMemInfo[index].main_ion_fd);
-    ret = ioctl(mMemInfo[index].main_ion_fd, ION_IOC_CUSTOM, &custom_data);
+         main_ion_fd);
+    ret = ioctl(main_ion_fd, ION_IOC_CUSTOM, &custom_data);
     if (ret < 0)
         LOGE("Cache Invalidate failed: %s\n", strerror(errno));
 
@@ -306,9 +307,7 @@
     struct ion_handle_data handle_data;
     struct ion_allocation_data allocData;
     struct ion_fd_data ion_info_fd;
-    int main_ion_fd = -1;
 
-    main_ion_fd = open("/dev/ion", O_RDONLY);
     if (main_ion_fd < 0) {
         LOGE("Ion dev open failed: %s\n", strerror(errno));
         goto ION_OPEN_FAILED;
@@ -336,7 +335,6 @@
         goto ION_MAP_FAILED;
     }
 
-    memInfo.main_ion_fd = main_ion_fd;
     memInfo.fd = ion_info_fd.fd;
     memInfo.handle = ion_info_fd.handle;
     memInfo.size = allocData.len;
@@ -347,7 +345,6 @@
     handle_data.handle = ion_info_fd.handle;
     ioctl(main_ion_fd, ION_IOC_FREE, &handle_data);
 ION_ALLOC_FAILED:
-    close(main_ion_fd);
 ION_OPEN_FAILED:
     return NO_MEMORY;
 }
@@ -371,12 +368,10 @@
         memInfo.fd = -1;
     }
 
-    if (memInfo.main_ion_fd >= 0) {
+    if (main_ion_fd >= 0) {
         memset(&handle_data, 0, sizeof(handle_data));
         handle_data.handle = memInfo.handle;
-        ioctl(memInfo.main_ion_fd, ION_IOC_FREE, &handle_data);
-        close(memInfo.main_ion_fd);
-        memInfo.main_ion_fd = -1;
+        ioctl(main_ion_fd, ION_IOC_FREE, &handle_data);
     }
     memInfo.handle = 0;
     memInfo.size = 0;
@@ -813,17 +808,15 @@
 
     setMetaData(mPrivateHandle[idx], UPDATE_COLOR_SPACE, &colorSpace);
 
-    mMemInfo[idx].main_ion_fd = open("/dev/ion", O_RDONLY);
-    if (mMemInfo[idx].main_ion_fd < 0) {
+    if (main_ion_fd < 0) {
         LOGE("failed: could not open ion device");
         ret = NO_MEMORY;
         goto end;
     } else {
         ion_info_fd.fd = mPrivateHandle[idx]->fd;
-        if (ioctl(mMemInfo[idx].main_ion_fd,
+        if (ioctl(main_ion_fd,
                   ION_IOC_IMPORT, &ion_info_fd) < 0) {
             LOGE("ION import failed\n");
-            close(mMemInfo[idx].main_ion_fd);
             ret = NO_MEMORY;
             goto end;
         }
@@ -876,12 +869,10 @@
     struct ion_handle_data ion_handle;
     memset(&ion_handle, 0, sizeof(ion_handle));
     ion_handle.handle = mMemInfo[idx].handle;
-    if (ioctl(mMemInfo[idx].main_ion_fd, ION_IOC_FREE, &ion_handle) < 0) {
+    if (ioctl(main_ion_fd, ION_IOC_FREE, &ion_handle) < 0) {
         LOGE("ion free failed");
     }
-    close(mMemInfo[idx].main_ion_fd);
     memset(&mMemInfo[idx], 0, sizeof(struct QCamera3MemInfo));
-    mMemInfo[idx].main_ion_fd = -1;
     mBufferHandle[idx] = NULL;
     mPrivateHandle[idx] = NULL;
     mCurrentFrameNumbers[idx] = -1;
diff --git a/QCamera2/HAL3/QCamera3Mem.h b/QCamera2/HAL3/QCamera3Mem.h
index 4704a41..4495577 100644
--- a/QCamera2/HAL3/QCamera3Mem.h
+++ b/QCamera2/HAL3/QCamera3Mem.h
@@ -83,7 +83,6 @@
 protected:
     struct QCamera3MemInfo {
         int fd;
-        int main_ion_fd;
         ion_user_handle_t handle;
         size_t size;
     };
@@ -96,6 +95,7 @@
     void *mPtr[MM_CAMERA_MAX_NUM_FRAMES];
     int32_t mCurrentFrameNumbers[MM_CAMERA_MAX_NUM_FRAMES];
     Mutex mLock;
+    int main_ion_fd = -1;
 };
 
 // Internal heap memory is used for memories used internally