summaryrefslogtreecommitdiffstats
path: root/libgralloc/alloc_controller.cpp
diff options
context:
space:
mode:
authorNaseer Ahmed <naseer@codeaurora.org>2014-12-19 16:25:09 -0500
committerNaseer Ahmed <naseer@codeaurora.org>2015-03-19 13:39:21 -0400
commit8d0d72ad40e4296b4275a613823c261bc630d66d (patch)
treeba8f4cb729bd6e4949ca19a30d782aaa93834436 /libgralloc/alloc_controller.cpp
parenta0feb9650480a39a35f6dfa3c8a47766710bc5f0 (diff)
downloadandroid_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.cpp65
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;