Merge "Second attempt at avoiding infinite loop in PathCache::trim() Bug #10347089" into klp-dev
This commit is contained in:
@@ -214,7 +214,22 @@ void PathCache::operator()(PathDescription& entry, PathTexture*& texture) {
|
|||||||
void PathCache::removeTexture(PathTexture* texture) {
|
void PathCache::removeTexture(PathTexture* texture) {
|
||||||
if (texture) {
|
if (texture) {
|
||||||
const uint32_t size = texture->width * texture->height;
|
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",
|
PATH_LOGD("PathCache::delete name, size, mSize = %d, %d, %d",
|
||||||
texture->id, size, mSize);
|
texture->id, size, mSize);
|
||||||
|
|||||||
@@ -88,8 +88,6 @@ public class PathsCacheActivity extends Activity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
super.onDraw(canvas);
|
super.onDraw(canvas);
|
||||||
|
|
||||||
Log.d("OpenGLRenderer", "Start frame");
|
|
||||||
|
|
||||||
canvas.drawARGB(255, 255, 255, 255);
|
canvas.drawARGB(255, 255, 255, 255);
|
||||||
|
|
||||||
@@ -104,6 +102,13 @@ public class PathsCacheActivity extends Activity {
|
|||||||
canvas.drawPath(mPath, mMediumPaint);
|
canvas.drawPath(mPath, mMediumPaint);
|
||||||
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();
|
canvas.restore();
|
||||||
|
|
||||||
for (int i = 0; i < mRandom.nextInt(20); i++) {
|
for (int i = 0; i < mRandom.nextInt(20); i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user