Merge "Second attempt at avoiding infinite loop in PathCache::trim() Bug #10347089" into klp-dev

This commit is contained in:
Romain Guy
2013-08-22 01:43:24 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 3 deletions

View File

@@ -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;
mSize -= size;
// 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);

View File

@@ -88,8 +88,6 @@ public class PathsCacheActivity extends Activity {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d("OpenGLRenderer", "Start frame");
canvas.drawARGB(255, 255, 255, 255);
@@ -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++) {