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

Commit add94f20 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Free resources only from the GL context thread. Bug #3179882"

parents 3ca2ee0f fe48f659
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ public:
    static void finalizer(JNIEnv* env, jobject clazz, SkPath* obj) {
#ifdef USE_OPENGL_RENDERER
        if (android::uirenderer::Caches::hasInstance()) {
            android::uirenderer::Caches::getInstance().pathCache.remove(obj);
            android::uirenderer::Caches::getInstance().pathCache.removeDeferred(obj);
        }
#endif
        delete obj;
+10 −0
Original line number Diff line number Diff line
@@ -94,6 +94,16 @@ void Caches::dumpMemoryUsage() {
    LOGD("\n");
}

///////////////////////////////////////////////////////////////////////////////
// Memory management
///////////////////////////////////////////////////////////////////////////////

void Caches::clearGarbage() {
    textureCache.clearGarbage();
    gradientCache.clearGarbage();
    pathCache.clearGarbage();
}

///////////////////////////////////////////////////////////////////////////////
// VBO
///////////////////////////////////////////////////////////////////////////////
+6 −0
Original line number Diff line number Diff line
@@ -100,6 +100,12 @@ public:
        return mDebugLevel;
    }

    /**
     * Call this on each frame to ensure that garbage is deleted from
     * GPU memory.
     */
    void clearGarbage();

    /**
     * Binds the VBO used to render simple textured quads.
     */
+2 −2
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ DisplayList::~DisplayList() {

    if (mPathHeap) {
        for (int i = 0; i < mPathHeap->count(); i++) {
            caches.pathCache.remove(&(*mPathHeap)[i]);
            caches.pathCache.removeDeferred(&(*mPathHeap)[i]);
        }
        mPathHeap->safeUnref();
    }
+14 −11
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ GradientCache::GradientCache(uint32_t maxByteSize):
}

GradientCache::~GradientCache() {
    Mutex::Autolock _l(mLock);
    mCache.clear();
}

@@ -63,17 +62,14 @@ GradientCache::~GradientCache() {
///////////////////////////////////////////////////////////////////////////////

uint32_t GradientCache::getSize() {
    Mutex::Autolock _l(mLock);
    return mSize;
}

uint32_t GradientCache::getMaxSize() {
    Mutex::Autolock _l(mLock);
    return mMaxSize;
}

void GradientCache::setMaxSize(uint32_t maxSize) {
    Mutex::Autolock _l(mLock);
    mMaxSize = maxSize;
    while (mSize > mMaxSize) {
        mCache.removeOldest();
@@ -102,17 +98,28 @@ void GradientCache::operator()(SkShader*& shader, Texture*& texture) {
///////////////////////////////////////////////////////////////////////////////

Texture* GradientCache::get(SkShader* shader) {
    Mutex::Autolock _l(mLock);
    return mCache.get(shader);
}

void GradientCache::remove(SkShader* shader) {
    Mutex::Autolock _l(mLock);
    mCache.remove(shader);
}

void GradientCache::clear() {
void GradientCache::removeDeferred(SkShader* shader) {
    Mutex::Autolock _l(mLock);
    mGarbage.push(shader);
}

void GradientCache::clearGarbage() {
    Mutex::Autolock _l(mLock);
    size_t count = mGarbage.size();
    for (size_t i = 0; i < count; i++) {
        mCache.remove(mGarbage.itemAt(i));
    }
    mGarbage.clear();
}

void GradientCache::clear() {
    mCache.clear();
}

@@ -138,21 +145,17 @@ Texture* GradientCache::addLinearGradient(SkShader* shader, uint32_t* colors,

    canvas.drawRectCoords(0.0f, 0.0f, bitmap.width(), 1.0f, p);

    mLock.lock();
    // Asume the cache is always big enough
    const uint32_t size = bitmap.rowBytes() * bitmap.height();
    while (mSize + size > mMaxSize) {
        mCache.removeOldest();
    }
    mLock.unlock();

    Texture* texture = new Texture;
    generateTexture(&bitmap, texture);

    mLock.lock();
    mSize += size;
    mCache.put(shader, texture);
    mLock.unlock();

    return texture;
}
Loading