diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-05-17 13:14:52 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-05-17 13:14:52 +0000 |
commit | ff0da4ff483ba7b4468b862949ffb3de505cba14 (patch) | |
tree | b02ce2447d3a112e7c66c52be6d80e2ece7f70ef /src/images | |
parent | fa66294c7705831808ce7772d4328fc626d45034 (diff) |
Mutexes in pixelrefs were done very sloppily initially. The code (a) assumes all
pixelref subclasses want a mutex to guard their lock/unlock virtuals, and (b)
most subclasses use the same mutex for *all* of their instances, even when there
is no explicit need to guard modifying one instances with another.
When we try drawing bitmaps from multiple threads, we are seeing a lot of slow-
down from these mutexes. This CL has two changes to try to speed things up.
1. Add setPreLocked(), for pixelrefs who never need the onLockPixels
virtual to be called. This speeds up those subclasses in multithreaded environs
as it avoids the mutex lock all together (e.g. SkMallocPixelRef).
2. Add setMutex() to allow a subclass to change the mutex choice. ashmem wants
this, since its unflattening constructor cannot pass down the null, it needs
to cleanup afterwards.
Review URL: https://codereview.appspot.com/6199075
git-svn-id: http://skia.googlecode.com/svn/trunk@3985 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/images')
-rw-r--r-- | src/images/SkImageRefPool.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/images/SkImageRefPool.cpp b/src/images/SkImageRefPool.cpp index bfa933e997..c24dba0da8 100644 --- a/src/images/SkImageRefPool.cpp +++ b/src/images/SkImageRefPool.cpp @@ -59,7 +59,7 @@ void SkImageRefPool::setRAMUsed(size_t limit) { while (NULL != ref && fRAMUsed > limit) { // only purge it if its pixels are unlocked - if (0 == ref->getLockCount() && ref->fBitmap.getPixels()) { + if (!ref->isLocked() && ref->fBitmap.getPixels()) { size_t size = ref->ramUsed(); SkASSERT(size <= fRAMUsed); fRAMUsed -= size; @@ -181,10 +181,10 @@ void SkImageRefPool::dump() const { SkImageRef* ref = fHead; while (ref != NULL) { - SkDebugf(" [%3d %3d %d] ram=%d data=%d locks=%d %s\n", ref->fBitmap.width(), + SkDebugf(" [%3d %3d %d] ram=%d data=%d locked=%d %s\n", ref->fBitmap.width(), ref->fBitmap.height(), ref->fBitmap.config(), ref->ramUsed(), (int)ref->fStream->getLength(), - ref->getLockCount(), ref->getURI()); + ref->isLocked(), ref->getURI()); ref = ref->fNext; } |