Simplify Bitmap a bit
Remove an overly generic function with a simpler specialized one.
Test: builds
Change-Id: I2049968770bfbbf0ef29701467a82e1c2a9e9479
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index df463e2..c0a2443 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -131,15 +131,8 @@
return sk_sp<Bitmap>(new Bitmap(addr, size, info, rowBytes));
}
-void FreePixelRef(void* addr, void* context) {
- auto pixelRef = (SkPixelRef*)context;
- pixelRef->unref();
-}
-
sk_sp<Bitmap> Bitmap::createFrom(const SkImageInfo& info, SkPixelRef& pixelRef) {
- pixelRef.ref();
- return sk_sp<Bitmap>(new Bitmap((void*)pixelRef.pixels(), (void*)&pixelRef, FreePixelRef, info,
- pixelRef.rowBytes()));
+ return sk_sp<Bitmap>(new Bitmap(pixelRef, info));
}
@@ -232,14 +225,12 @@
mPixelStorage.heap.size = size;
}
-Bitmap::Bitmap(void* address, void* context, FreeFunc freeFunc, const SkImageInfo& info,
- size_t rowBytes)
- : SkPixelRef(info.width(), info.height(), address, rowBytes)
+Bitmap::Bitmap(SkPixelRef& pixelRef, const SkImageInfo& info)
+ : SkPixelRef(info.width(), info.height(), pixelRef.pixels(), pixelRef.rowBytes())
, mInfo(validateAlpha(info))
- , mPixelStorageType(PixelStorageType::External) {
- mPixelStorage.external.address = address;
- mPixelStorage.external.context = context;
- mPixelStorage.external.freeFunc = freeFunc;
+ , mPixelStorageType(PixelStorageType::WrappedPixelRef) {
+ pixelRef.ref();
+ mPixelStorage.wrapped.pixelRef = &pixelRef;
}
Bitmap::Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes)
@@ -268,9 +259,8 @@
Bitmap::~Bitmap() {
switch (mPixelStorageType) {
- case PixelStorageType::External:
- mPixelStorage.external.freeFunc(mPixelStorage.external.address,
- mPixelStorage.external.context);
+ case PixelStorageType::WrappedPixelRef:
+ mPixelStorage.wrapped.pixelRef->unref();
break;
case PixelStorageType::Ashmem:
#ifndef _WIN32 // ashmem not implemented on Windows
@@ -302,19 +292,6 @@
mHasHardwareMipMap = hasMipMap;
}
-void* Bitmap::getStorage() const {
- switch (mPixelStorageType) {
- case PixelStorageType::External:
- return mPixelStorage.external.address;
- case PixelStorageType::Ashmem:
- return mPixelStorage.ashmem.address;
- case PixelStorageType::Heap:
- return mPixelStorage.heap.address;
- case PixelStorageType::Hardware:
- return nullptr;
- }
-}
-
int Bitmap::getAshmemFd() const {
switch (mPixelStorageType) {
case PixelStorageType::Ashmem:
diff --git a/libs/hwui/hwui/Bitmap.h b/libs/hwui/hwui/Bitmap.h
index 37e60a0..6ece7ef 100644
--- a/libs/hwui/hwui/Bitmap.h
+++ b/libs/hwui/hwui/Bitmap.h
@@ -32,7 +32,7 @@
namespace android {
enum class PixelStorageType {
- External,
+ WrappedPixelRef,
Heap,
Ashmem,
Hardware,
@@ -163,8 +163,7 @@
static sk_sp<Bitmap> allocateAshmemBitmap(size_t size, const SkImageInfo& i, size_t rowBytes);
Bitmap(void* address, size_t allocSize, const SkImageInfo& info, size_t rowBytes);
- Bitmap(void* address, void* context, FreeFunc freeFunc, const SkImageInfo& info,
- size_t rowBytes);
+ Bitmap(SkPixelRef& pixelRef, const SkImageInfo& info);
Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes);
#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
Bitmap(AHardwareBuffer* buffer, const SkImageInfo& info, size_t rowBytes,
@@ -178,7 +177,6 @@
#endif
virtual ~Bitmap();
- void* getStorage() const;
SkImageInfo mInfo;
@@ -191,10 +189,8 @@
union {
struct {
- void* address;
- void* context;
- FreeFunc freeFunc;
- } external;
+ SkPixelRef* pixelRef;
+ } wrapped;
struct {
void* address;
int fd;