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

Commit 24e38ab3 authored by John Reck's avatar John Reck Committed by Gerrit Code Review
Browse files

Merge "Fix native memory leak caused by small HWUI path cache creation"

parents 834e5ce1 4b505376
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ static void drawPath(const SkPath *path, const SkPaint* paint, SkBitmap& bitmap,

PathCache::PathCache():
        mCache(LruCache<PathDescription, PathTexture*>::kUnlimitedCapacity),
        mSize(0), mMaxSize(MB(DEFAULT_PATH_CACHE_SIZE)) {
        mSize(0), mMaxSize(MB(DEFAULT_PATH_CACHE_SIZE)), mTexNum(0) {
    char property[PROPERTY_VALUE_MAX];
    if (property_get(PROPERTY_PATH_CACHE_SIZE, property, nullptr) > 0) {
        INIT_LOGD("  Setting %s cache size to %sMB", name, property);
@@ -202,6 +202,7 @@ void PathCache::removeTexture(PathTexture* texture) {
                        "the cache in an inconsistent state", size);
            }
            mSize -= size;
            mTexNum--;
        }

        PATH_LOGD("PathCache::delete name, size, mSize = %d, %d, %d",
@@ -228,7 +229,7 @@ void PathCache::purgeCache(uint32_t width, uint32_t height) {
}

void PathCache::trim() {
    while (mSize > mMaxSize) {
    while (mSize > mMaxSize || mTexNum > DEFAULT_PATH_TEXTURE_CAP) {
        mCache.removeOldest();
    }
}
@@ -299,6 +300,7 @@ void PathCache::generateTexture(SkBitmap& bitmap, Texture* texture) {

    texture->setFilter(GL_LINEAR);
    texture->setWrap(GL_CLAMP_TO_EDGE);
    mTexNum++;
}

///////////////////////////////////////////////////////////////////////////////
+6 −0
Original line number Diff line number Diff line
@@ -306,6 +306,12 @@ private:

    bool mDebugEnabled;

    /**
     * Driver allocated 4k/8k/16k memory for small path cache,
     * limit the number of PathTexture in case occupy too much memory in hardware.
     */
    uint32_t mTexNum;

    sp<PathProcessor> mProcessor;

    Vector<uint32_t> mGarbage;
+3 −0
Original line number Diff line number Diff line
@@ -249,6 +249,9 @@ enum DebugLevel {
#define DEFAULT_TEXT_BLACK_GAMMA_THRESHOLD 64
#define DEFAULT_TEXT_WHITE_GAMMA_THRESHOLD 192

// cap to 256 to limite paths in the path cache
#define DEFAULT_PATH_TEXTURE_CAP 256

///////////////////////////////////////////////////////////////////////////////
// Misc
///////////////////////////////////////////////////////////////////////////////