Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0a79555 authored by John Reck's avatar John Reck
Browse files

Simplify Bitmap a bit

Remove an overly generic function with a simpler specialized one.

Test: builds
Change-Id: I2049968770bfbbf0ef29701467a82e1c2a9e9479
parent 9b8fe03c
Loading
Loading
Loading
Loading
+8 −31
Original line number Original line Diff line number Diff line
@@ -131,15 +131,8 @@ sk_sp<Bitmap> Bitmap::allocateHeapBitmap(size_t size, const SkImageInfo& info, s
    return sk_sp<Bitmap>(new Bitmap(addr, size, info, rowBytes));
    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) {
sk_sp<Bitmap> Bitmap::createFrom(const SkImageInfo& info, SkPixelRef& pixelRef) {
    pixelRef.ref();
    return sk_sp<Bitmap>(new Bitmap(pixelRef, info));
    return sk_sp<Bitmap>(new Bitmap((void*)pixelRef.pixels(), (void*)&pixelRef, FreePixelRef, info,
                                    pixelRef.rowBytes()));
}
}




@@ -232,14 +225,12 @@ Bitmap::Bitmap(void* address, size_t size, const SkImageInfo& info, size_t rowBy
    mPixelStorage.heap.size = size;
    mPixelStorage.heap.size = size;
}
}


Bitmap::Bitmap(void* address, void* context, FreeFunc freeFunc, const SkImageInfo& info,
Bitmap::Bitmap(SkPixelRef& pixelRef, const SkImageInfo& info)
               size_t rowBytes)
        : SkPixelRef(info.width(), info.height(), pixelRef.pixels(), pixelRef.rowBytes())
        : SkPixelRef(info.width(), info.height(), address, rowBytes)
        , mInfo(validateAlpha(info))
        , mInfo(validateAlpha(info))
        , mPixelStorageType(PixelStorageType::External) {
        , mPixelStorageType(PixelStorageType::WrappedPixelRef) {
    mPixelStorage.external.address = address;
    pixelRef.ref();
    mPixelStorage.external.context = context;
    mPixelStorage.wrapped.pixelRef = &pixelRef;
    mPixelStorage.external.freeFunc = freeFunc;
}
}


Bitmap::Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes)
Bitmap::Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes)
@@ -268,9 +259,8 @@ Bitmap::Bitmap(AHardwareBuffer* buffer, const SkImageInfo& info, size_t rowBytes


Bitmap::~Bitmap() {
Bitmap::~Bitmap() {
    switch (mPixelStorageType) {
    switch (mPixelStorageType) {
        case PixelStorageType::External:
        case PixelStorageType::WrappedPixelRef:
            mPixelStorage.external.freeFunc(mPixelStorage.external.address,
            mPixelStorage.wrapped.pixelRef->unref();
                                            mPixelStorage.external.context);
            break;
            break;
        case PixelStorageType::Ashmem:
        case PixelStorageType::Ashmem:
#ifndef _WIN32 // ashmem not implemented on Windows
#ifndef _WIN32 // ashmem not implemented on Windows
@@ -302,19 +292,6 @@ void Bitmap::setHasHardwareMipMap(bool hasMipMap) {
    mHasHardwareMipMap = hasMipMap;
    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 {
int Bitmap::getAshmemFd() const {
    switch (mPixelStorageType) {
    switch (mPixelStorageType) {
        case PixelStorageType::Ashmem:
        case PixelStorageType::Ashmem:
+4 −8
Original line number Original line Diff line number Diff line
@@ -32,7 +32,7 @@ class SkWStream;
namespace android {
namespace android {


enum class PixelStorageType {
enum class PixelStorageType {
    External,
    WrappedPixelRef,
    Heap,
    Heap,
    Ashmem,
    Ashmem,
    Hardware,
    Hardware,
@@ -163,8 +163,7 @@ private:
    static sk_sp<Bitmap> allocateAshmemBitmap(size_t size, const SkImageInfo& i, size_t rowBytes);
    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, size_t allocSize, const SkImageInfo& info, size_t rowBytes);
    Bitmap(void* address, void* context, FreeFunc freeFunc, const SkImageInfo& info,
    Bitmap(SkPixelRef& pixelRef, const SkImageInfo& info);
           size_t rowBytes);
    Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes);
    Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info, size_t rowBytes);
#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
    Bitmap(AHardwareBuffer* buffer, const SkImageInfo& info, size_t rowBytes,
    Bitmap(AHardwareBuffer* buffer, const SkImageInfo& info, size_t rowBytes,
@@ -178,7 +177,6 @@ private:
#endif
#endif


    virtual ~Bitmap();
    virtual ~Bitmap();
    void* getStorage() const;


    SkImageInfo mInfo;
    SkImageInfo mInfo;


@@ -191,10 +189,8 @@ private:


    union {
    union {
        struct {
        struct {
            void* address;
            SkPixelRef* pixelRef;
            void* context;
        } wrapped;
            FreeFunc freeFunc;
        } external;
        struct {
        struct {
            void* address;
            void* address;
            int fd;
            int fd;