diff options
author | Naseer Ahmed <naseer@codeaurora.org> | 2014-12-19 16:25:09 -0500 |
---|---|---|
committer | Naseer Ahmed <naseer@codeaurora.org> | 2015-03-19 13:39:21 -0400 |
commit | 8d0d72ad40e4296b4275a613823c261bc630d66d (patch) | |
tree | ba8f4cb729bd6e4949ca19a30d782aaa93834436 /libgralloc/alloc_controller.cpp | |
parent | a0feb9650480a39a35f6dfa3c8a47766710bc5f0 (diff) | |
download | android_hardware_qcom_display-8d0d72ad40e4296b4275a613823c261bc630d66d.tar.gz android_hardware_qcom_display-8d0d72ad40e4296b4275a613823c261bc630d66d.tar.bz2 android_hardware_qcom_display-8d0d72ad40e4296b4275a613823c261bc630d66d.zip |
gralloc: Deprecate old stuff.
1. Reclaim some old gralloc flags.
2. System heap allocation happens by default.
3. Remove some unused private flags.
4. Add heapid member to alloc_data to better line up with ion
header
5. Remove check for MDSS_TARGET
Change-Id: I37be0a2fcd5fd4a14bb9ca235fcae41f6f3ec19e
Diffstat (limited to 'libgralloc/alloc_controller.cpp')
-rw-r--r-- | libgralloc/alloc_controller.cpp | 65 |
1 files changed, 16 insertions, 49 deletions
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp index 508564a5a..1d0a40a63 100644 --- a/libgralloc/alloc_controller.cpp +++ b/libgralloc/alloc_controller.cpp @@ -58,27 +58,6 @@ static void getUBwcWidthAndHeight(int, int, int, int&, int&); static unsigned int getUBwcSize(int, int, int, const int, const int); //Common functions -static bool canFallback(int usage, bool triedSystem) -{ - // Fallback to system heap when alloc fails unless - // 1. Composition type is MDP - // 2. Alloc from system heap was already tried - // 3. The heap type is requsted explicitly - // 4. The heap type is protected - // 5. The buffer is meant for external display only - - if(QCCompositionType::getInstance().getCompositionType() & - COMPOSITION_TYPE_MDP) - return false; - if(triedSystem) - return false; - if(usage & (GRALLOC_HEAP_MASK | GRALLOC_USAGE_PROTECTED)) - return false; - if(usage & (GRALLOC_HEAP_MASK | GRALLOC_USAGE_PRIVATE_EXTERNAL_ONLY)) - return false; - //Return true by default - return true; -} /* The default policy is to return cached buffers unless the client explicity * sets the PRIVATE_UNCACHED flag or indicates that the buffer will be rarely @@ -344,20 +323,15 @@ void IonController::allocateIonMem() int IonController::allocate(alloc_data& data, int usage) { int ionFlags = 0; + int ionHeapId = 0; int ret; data.uncached = useUncached(usage); data.allocType = 0; - if(usage & GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP) - ionFlags |= ION_HEAP(ION_SYSTEM_HEAP_ID); - - if(usage & GRALLOC_USAGE_PRIVATE_IOMMU_HEAP) - ionFlags |= ION_HEAP(ION_IOMMU_HEAP_ID); - if(usage & GRALLOC_USAGE_PROTECTED) { if (usage & GRALLOC_USAGE_PRIVATE_MM_HEAP) { - ionFlags |= ION_HEAP(ION_CP_MM_HEAP_ID); + ionHeapId |= ION_HEAP(ION_CP_MM_HEAP_ID); ionFlags |= ION_SECURE; #ifdef ION_FLAG_ALLOW_NON_CONTIG if (!(usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY)) { @@ -366,8 +340,8 @@ int IonController::allocate(alloc_data& data, int usage) #endif } else { // for targets/OEMs which do not need HW level protection - // do not set ion secure flag & MM heap. Fallback to IOMMU heap. - ionFlags |= ION_HEAP(ION_IOMMU_HEAP_ID); + // do not set ion secure flag & MM heap. Fallback to system heap. + ionHeapId |= ION_HEAP(ION_SYSTEM_HEAP_ID); data.allocType |= private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER; } } else if(usage & GRALLOC_USAGE_PRIVATE_MM_HEAP) { @@ -375,40 +349,33 @@ int IonController::allocate(alloc_data& data, int usage) //If it is used for non secure cases, fallback to IOMMU heap ALOGW("GRALLOC_USAGE_PRIVATE_MM_HEAP \ cannot be used as an insecure heap!\ - trying to use IOMMU instead !!"); - ionFlags |= ION_HEAP(ION_IOMMU_HEAP_ID); + trying to use system heap instead !!"); + ionHeapId |= ION_HEAP(ION_SYSTEM_HEAP_ID); } if(usage & GRALLOC_USAGE_PRIVATE_CAMERA_HEAP) - ionFlags |= ION_HEAP(ION_CAMERA_HEAP_ID); + ionHeapId |= ION_HEAP(ION_CAMERA_HEAP_ID); if(usage & GRALLOC_USAGE_PRIVATE_ADSP_HEAP) - ionFlags |= ION_HEAP(ION_ADSP_HEAP_ID); + ionHeapId |= ION_HEAP(ION_ADSP_HEAP_ID); if(ionFlags & ION_SECURE) data.allocType |= private_handle_t::PRIV_FLAGS_SECURE_BUFFER; - // if no flags are set, default to - // SF + IOMMU heaps, so that bypass can work - // we can fall back to system heap if - // we run out. - if(!ionFlags) - ionFlags = ION_HEAP(ION_SF_HEAP_ID) | ION_HEAP(ION_IOMMU_HEAP_ID); + // if no ion heap flags are set, default to system heap + if(!ionHeapId) + ionHeapId = ION_HEAP(ION_SYSTEM_HEAP_ID); + //At this point we should have the right heap set, there is no fallback data.flags = ionFlags; + data.heapId = ionHeapId; ret = mIonAlloc->alloc_buffer(data); - // Fallback - if(ret < 0 && canFallback(usage, - (ionFlags & ION_SYSTEM_HEAP_ID))) - { - ALOGW("Falling back to system heap"); - data.flags = ION_HEAP(ION_SYSTEM_HEAP_ID); - ret = mIonAlloc->alloc_buffer(data); - } - if(ret >= 0 ) { data.allocType |= private_handle_t::PRIV_FLAGS_USES_ION; + } else { + ALOGE("%s: Failed to allocate buffer - heap: 0x%x flags: 0x%x", + __FUNCTION__, ionHeapId, ionFlags); } return ret; |