display: Clean up gralloc
* Remove pmem and ashmem implementations
* Remove usage of RefBase
* Reduce log verbosity
Change-Id: If8ef543d236e5305bd5430f4f9c62c51b3a13787
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 5d0cf2b..2ba0d6a 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -28,30 +28,16 @@
*/
#include <cutils/log.h>
-#include <utils/RefBase.h>
#include <fcntl.h>
#include "gralloc_priv.h"
#include "alloc_controller.h"
#include "memalloc.h"
#include "ionalloc.h"
-#include "pmemalloc.h"
-#include "ashmemalloc.h"
#include "gr.h"
#include "comptype.h"
using namespace gralloc;
using namespace qdutils;
-using android::sp;
-
-const int GRALLOC_HEAP_MASK = GRALLOC_USAGE_PRIVATE_ADSP_HEAP |
- GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP |
- GRALLOC_USAGE_PRIVATE_SMI_HEAP |
- GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP |
- GRALLOC_USAGE_PRIVATE_IOMMU_HEAP |
- GRALLOC_USAGE_PRIVATE_MM_HEAP |
- GRALLOC_USAGE_PRIVATE_WRITEBACK_HEAP |
- GRALLOC_USAGE_PRIVATE_CAMERA_HEAP;
-
//Common functions
static bool canFallback(int usage, bool triedSystem)
@@ -88,18 +74,11 @@
return false;
}
-sp<IAllocController> IAllocController::sController = NULL;
-sp<IAllocController> IAllocController::getInstance(bool useMasterHeap)
+IAllocController* IAllocController::sController = NULL;
+IAllocController* IAllocController::getInstance(void)
{
if(sController == NULL) {
-#ifdef USE_ION
sController = new IonController();
-#else
- if(useMasterHeap)
- sController = new PmemAshmemController();
- else
- sController = new PmemKernelController();
-#endif
}
return sController;
}
@@ -111,8 +90,7 @@
mIonAlloc = new IonAlloc();
}
-int IonController::allocate(alloc_data& data, int usage,
- int compositionType)
+int IonController::allocate(alloc_data& data, int usage)
{
int ionFlags = 0;
int ret;
@@ -135,20 +113,12 @@
if(usage & GRALLOC_USAGE_PRIVATE_MM_HEAP)
ionFlags |= ION_HEAP(ION_CP_MM_HEAP_ID);
- if(usage & GRALLOC_USAGE_PRIVATE_WRITEBACK_HEAP)
- ionFlags |= ION_HEAP(ION_CP_WB_HEAP_ID);
-
if(usage & GRALLOC_USAGE_PRIVATE_CAMERA_HEAP)
ionFlags |= ION_HEAP(ION_CAMERA_HEAP_ID);
if(usage & GRALLOC_USAGE_PRIVATE_CP_BUFFER)
ionFlags |= ION_SECURE;
- if(usage & GRALLOC_USAGE_PRIVATE_DO_NOT_MAP)
- data.allocType |= private_handle_t::PRIV_FLAGS_NOT_MAPPED;
- else
- data.allocType &= ~(private_handle_t::PRIV_FLAGS_NOT_MAPPED);
-
// if no flags are set, default to
// SF + IOMMU heaps, so that bypass can work
// we can fall back to system heap if
@@ -180,9 +150,9 @@
return ret;
}
-sp<IMemAlloc> IonController::getAllocator(int flags)
+IMemAlloc* IonController::getAllocator(int flags)
{
- sp<IMemAlloc> memalloc;
+ IMemAlloc* memalloc;
if (flags & private_handle_t::PRIV_FLAGS_USES_ION) {
memalloc = mIonAlloc;
} else {
@@ -192,151 +162,6 @@
return memalloc;
}
-//-------------- PmemKernelController-----------------------//
-//XXX: Remove - we're not using pmem anymore
-#if 0
-PmemKernelController::PmemKernelController()
-{
- mPmemAdspAlloc = new PmemKernelAlloc(DEVICE_PMEM_ADSP);
- // XXX: Right now, there is no need to maintain an instance
- // of the SMI allocator as we need it only in a few cases
-}
-
-PmemKernelController::~PmemKernelController()
-{
-}
-
-int PmemKernelController::allocate(alloc_data& data, int usage,
- int compositionType)
-{
- int ret = 0;
- bool adspFallback = false;
- if (!(usage & GRALLOC_USAGE_PRIVATE_SMI_HEAP))
- adspFallback = true;
-
- // Try SMI first
- if ((usage & GRALLOC_USAGE_PRIVATE_SMI_HEAP) ||
- (usage & GRALLOC_USAGE_EXTERNAL_DISP) ||
- (usage & GRALLOC_USAGE_PROTECTED))
- {
- int tempFd = open(DEVICE_PMEM_SMIPOOL, O_RDWR, 0);
- if(tempFd > 0) {
- close(tempFd);
- sp<IMemAlloc> memalloc;
- memalloc = new PmemKernelAlloc(DEVICE_PMEM_SMIPOOL);
- ret = memalloc->alloc_buffer(data);
- if(ret >= 0)
- return ret;
- else {
- if(adspFallback)
- ALOGW("Allocation from SMI failed, trying ADSP");
- }
- }
- }
-
- if ((usage & GRALLOC_USAGE_PRIVATE_ADSP_HEAP) || adspFallback) {
- ret = mPmemAdspAlloc->alloc_buffer(data);
- }
- return ret;
-}
-
-sp<IMemAlloc> PmemKernelController::getAllocator(int flags)
-{
- sp<IMemAlloc> memalloc;
- if (flags & private_handle_t::PRIV_FLAGS_USES_PMEM_ADSP)
- memalloc = mPmemAdspAlloc;
- else {
- ALOGE("%s: Invalid flags passed: 0x%x", __FUNCTION__, flags);
- memalloc = NULL;
- }
-
- return memalloc;
-}
-
-//-------------- PmemAshmmemController-----------------------//
-
-PmemAshmemController::PmemAshmemController()
-{
- mPmemUserspaceAlloc = new PmemUserspaceAlloc();
- mAshmemAlloc = new AshmemAlloc();
- mPmemKernelCtrl = new PmemKernelController();
-}
-
-PmemAshmemController::~PmemAshmemController()
-{
-}
-
-int PmemAshmemController::allocate(alloc_data& data, int usage,
- int compositionType)
-{
- int ret = 0;
- data.allocType = 0;
-
- // Make buffers cacheable by default
- data.uncached = false;
-
- // Override if we explicitly need uncached buffers
- if (usage & GRALLOC_USAGE_PRIVATE_UNCACHED)
- data.uncached = true;
-
- // If ADSP or SMI is requested use the kernel controller
- if(usage & (GRALLOC_USAGE_PRIVATE_ADSP_HEAP|
- GRALLOC_USAGE_PRIVATE_SMI_HEAP)) {
- ret = mPmemKernelCtrl->allocate(data, usage, compositionType);
- if(ret < 0)
- ALOGE("%s: Failed to allocate ADSP/SMI memory", __func__);
- else
- data.allocType = private_handle_t::PRIV_FLAGS_USES_PMEM_ADSP;
- return ret;
- }
-
- if(usage & GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP) {
- ret = mAshmemAlloc->alloc_buffer(data);
- if(ret >= 0) {
- data.allocType = private_handle_t::PRIV_FLAGS_USES_ASHMEM;
- data.allocType |= private_handle_t::PRIV_FLAGS_NONCONTIGUOUS_MEM;
- }
- return ret;
- }
-
- // if no memory specific flags are set,
- // default to EBI heap, so that bypass
- // can work. We can fall back to system
- // heap if we run out.
- ret = mPmemUserspaceAlloc->alloc_buffer(data);
-
- // Fallback
- if(ret >= 0 ) {
- data.allocType = private_handle_t::PRIV_FLAGS_USES_PMEM;
- } else if(ret < 0 && canFallback(usage, false)) {
- ALOGW("Falling back to ashmem");
- ret = mAshmemAlloc->alloc_buffer(data);
- if(ret >= 0) {
- data.allocType = private_handle_t::PRIV_FLAGS_USES_ASHMEM;
- data.allocType |= private_handle_t::PRIV_FLAGS_NONCONTIGUOUS_MEM;
- }
- }
-
- return ret;
-}
-
-sp<IMemAlloc> PmemAshmemController::getAllocator(int flags)
-{
- sp<IMemAlloc> memalloc;
- if (flags & private_handle_t::PRIV_FLAGS_USES_PMEM)
- memalloc = mPmemUserspaceAlloc;
- else if (flags & private_handle_t::PRIV_FLAGS_USES_PMEM_ADSP)
- memalloc = mPmemKernelCtrl->getAllocator(flags);
- else if (flags & private_handle_t::PRIV_FLAGS_USES_ASHMEM)
- memalloc = mAshmemAlloc;
- else {
- ALOGE("%s: Invalid flags passed: 0x%x", __FUNCTION__, flags);
- memalloc = NULL;
- }
-
- return memalloc;
-}
-#endif
size_t getBufferSizeAndDimensions(int width, int height, int format,
int& alignedw, int &alignedh)
{
@@ -417,8 +242,8 @@
{
alloc_data data;
int alignedw, alignedh;
- android::sp<gralloc::IAllocController> sAlloc =
- gralloc::IAllocController::getInstance(false);
+ gralloc::IAllocController* sAlloc =
+ gralloc::IAllocController::getInstance();
data.base = 0;
data.fd = -1;
data.offset = 0;
@@ -427,14 +252,15 @@
data.uncached = useUncached(usage);
int allocFlags = usage;
- int err = sAlloc->allocate(data, allocFlags, 0);
+ int err = sAlloc->allocate(data, allocFlags);
if (0 != err) {
ALOGE("%s: allocate failed", __FUNCTION__);
return -ENOMEM;
}
private_handle_t* hnd = new private_handle_t(data.fd, data.size,
- data.allocType, 0, format, alignedw, alignedh);
+ data.allocType, 0, format,
+ alignedw, alignedh);
hnd->base = (int) data.base;
hnd->offset = data.offset;
hnd->gpuaddr = 0;
@@ -444,10 +270,10 @@
void free_buffer(private_handle_t *hnd)
{
- android::sp<gralloc::IAllocController> sAlloc =
- gralloc::IAllocController::getInstance(false);
+ gralloc::IAllocController* sAlloc =
+ gralloc::IAllocController::getInstance();
if (hnd && hnd->fd > 0) {
- sp<IMemAlloc> memalloc = sAlloc->getAllocator(hnd->flags);
+ IMemAlloc* memalloc = sAlloc->getAllocator(hnd->flags);
memalloc->free_buffer((void*)hnd->base, hnd->size, hnd->offset, hnd->fd);
}
if(hnd)