aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-21 21:18:25 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-21 21:18:25 +0000
commit7359eae7c6fce8cb88ae28ca7048283b77535db4 (patch)
tree3168d1ffa7c9ea3a1b66e7561a9598f32ebd2be8
parente03c652478aba1f632d5bf7c966617621be84155 (diff)
fix to free a plot when purging gr font cache
Review URL: http://codereview.appspot.com/4645054/ git-svn-id: http://skia.googlecode.com/svn/trunk@1667 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--gpu/src/GrTextStrike.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/gpu/src/GrTextStrike.cpp b/gpu/src/GrTextStrike.cpp
index 7aae7571a3..455f88a7bb 100644
--- a/gpu/src/GrTextStrike.cpp
+++ b/gpu/src/GrTextStrike.cpp
@@ -68,15 +68,19 @@ void GrFontCache::freeAll() {
void GrFontCache::purgeExceptFor(GrTextStrike* preserveStrike) {
GrTextStrike* strike = fTail;
- if (strike == preserveStrike) {
- strike = strike->fPrev;
- }
- if (strike) {
- int index = fCache.slowFindIndex(strike);
+ while (strike) {
+ if (strike == preserveStrike) {
+ strike = strike->fPrev;
+ continue;
+ }
+ GrTextStrike* strikeToPurge = strike;
+ // keep going if we won't free up any atlases with this strike.
+ strike = (NULL == strikeToPurge->fAtlas) ? strikeToPurge->fPrev : NULL;
+ int index = fCache.slowFindIndex(strikeToPurge);
GrAssert(index >= 0);
- fCache.removeAt(index, strike->fFontScalerKey->getHash());
- this->detachStrikeFromList(strike);
- delete strike;
+ fCache.removeAt(index, strikeToPurge->fFontScalerKey->getHash());
+ this->detachStrikeFromList(strikeToPurge);
+ delete strikeToPurge;
}
}