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

Commit 5d923200 authored by Romain Guy's avatar Romain Guy
Browse files

Second attempt at avoiding infinite loop in PathCache::trim()

Bug #10347089

Change-Id: I70f5a3933e848632473acc6636c88be5dc6ac430
parent 0a8c51b1
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -214,7 +214,22 @@ void PathCache::operator()(PathDescription& entry, PathTexture*& texture) {
void PathCache::removeTexture(PathTexture* texture) {
    if (texture) {
        const uint32_t size = texture->width * texture->height;

        // If there is a pending task we must wait for it to return
        // before attempting our cleanup
        const sp<Task<SkBitmap*> >& task = texture->task();
        if (task != NULL) {
            SkBitmap* bitmap = task->getResult();
            texture->clearTask();
        } else {
            // If there is a pending task, the path was not added
            // to the cache and the size wasn't increased
            if (size > mSize) {
                ALOGE("Removing path texture of size %d will leave "
                        "the cache in an inconsistent state", size);
            }
            mSize -= size;
        }

        PATH_LOGD("PathCache::delete name, size, mSize = %d, %d, %d",
                texture->id, size, mSize);
+7 −2
Original line number Diff line number Diff line
@@ -89,8 +89,6 @@ public class PathsCacheActivity extends Activity {
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            Log.d("OpenGLRenderer", "Start frame");

            canvas.drawARGB(255, 255, 255, 255);

            canvas.save();
@@ -104,6 +102,13 @@ public class PathsCacheActivity extends Activity {
            canvas.drawPath(mPath, mMediumPaint);
            canvas.drawPath(mPath, mMediumPaint);

            mPath.reset();
            buildPath(mPath);

            canvas.translate(30.0f, 30.0f);
            canvas.drawPath(mPath, mMediumPaint);
            canvas.drawPath(mPath, mMediumPaint);

            canvas.restore();

            for (int i = 0; i < mRandom.nextInt(20); i++) {