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