diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2011-09-07 18:12:11 -0700 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2011-09-07 18:25:58 -0700 |
commit | 163268b3a8d4dd7e650e6c540f832bf60f6bf4c9 (patch) | |
tree | 8c95644bd28d89eba78b8f96ff9da30303d1eed9 /core/jni | |
parent | e3238c98054688dd9a5b3ae4a776c023d70fb311 (diff) | |
download | frameworks_base-163268b3a8d4dd7e650e6c540f832bf60f6bf4c9.zip frameworks_base-163268b3a8d4dd7e650e6c540f832bf60f6bf4c9.tar.gz frameworks_base-163268b3a8d4dd7e650e6c540f832bf60f6bf4c9.tar.bz2 |
Fix bug #5274332 TextLayoutCache is having multiple instances
- also fix the missing LOG_TAG define
Change-Id: I25e96d1ba372e84768604f18702e0724fdecefb0
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android/graphics/Canvas.cpp | 6 | ||||
-rw-r--r-- | core/jni/android/graphics/TextLayout.cpp | 2 | ||||
-rw-r--r-- | core/jni/android/graphics/TextLayout.h | 5 | ||||
-rw-r--r-- | core/jni/android/graphics/TextLayoutCache.cpp | 36 | ||||
-rw-r--r-- | core/jni/android/graphics/TextLayoutCache.h | 5 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 4 |
6 files changed, 26 insertions, 32 deletions
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index b01dcd8..9313d0a 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -760,7 +760,8 @@ public: jint count = end - start; sp<TextLayoutCacheValue> value; #if USE_TEXT_LAYOUT_CACHE - value = gTextLayoutCache.getValue(paint, textArray, start, count, end, flags); + value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count, + end, flags); if (value == NULL) { LOGE("Cannot get TextLayoutCache value"); return ; @@ -780,7 +781,8 @@ public: sp<TextLayoutCacheValue> value; #if USE_TEXT_LAYOUT_CACHE - value = gTextLayoutCache.getValue(paint, textArray, start, count, contextCount, flags); + value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count, + contextCount, flags); if (value == NULL) { LOGE("Cannot get TextLayoutCache value"); return ; diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp index 7e89a37..fa9a7b7 100644 --- a/core/jni/android/graphics/TextLayout.cpp +++ b/core/jni/android/graphics/TextLayout.cpp @@ -257,7 +257,7 @@ void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint sta sp<TextLayoutCacheValue> value; #if USE_TEXT_LAYOUT_CACHE // Return advances from the cache. Compute them if needed - value = gTextLayoutCache.getValue( + value = TextLayoutCache::getInstance().getValue( paint, chars, start, count, contextCount, dirFlags); #else value = new TextLayoutCacheValue(); diff --git a/core/jni/android/graphics/TextLayout.h b/core/jni/android/graphics/TextLayout.h index 9bb1b92..0a29d78 100644 --- a/core/jni/android/graphics/TextLayout.h +++ b/core/jni/android/graphics/TextLayout.h @@ -41,11 +41,6 @@ namespace android { */ #define USE_TEXT_LAYOUT_CACHE 1 - -#if USE_TEXT_LAYOUT_CACHE - static TextLayoutCache gTextLayoutCache; -#endif - enum { kBidi_LTR = 0, kBidi_RTL = 1, diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp index f04c5eb..7f79277 100644 --- a/core/jni/android/graphics/TextLayoutCache.cpp +++ b/core/jni/android/graphics/TextLayoutCache.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#define LOG_TAG "TextLayoutCache" + #include "TextLayoutCache.h" #include "TextLayout.h" @@ -23,6 +25,12 @@ extern "C" { namespace android { +//-------------------------------------------------------------------------------------------------- +#if USE_TEXT_LAYOUT_CACHE + ANDROID_SINGLETON_STATIC_INSTANCE(TextLayoutCache); +#endif +//-------------------------------------------------------------------------------------------------- + TextLayoutCache::TextLayoutCache() : mCache(GenerationCache<TextLayoutCacheKey, sp<TextLayoutCacheValue> >::kUnlimitedCapacity), mSize(0), mMaxSize(MB(DEFAULT_TEXT_LAYOUT_CACHE_SIZE_IN_MB)), @@ -30,13 +38,6 @@ TextLayoutCache::TextLayoutCache() : init(); } -TextLayoutCache::TextLayoutCache(uint32_t max): - mCache(GenerationCache<TextLayoutCacheKey, sp<TextLayoutCacheValue> >::kUnlimitedCapacity), - mSize(0), mMaxSize(max), - mCacheHitCount(0), mNanosecondsSaved(0) { - init(); -} - TextLayoutCache::~TextLayoutCache() { mCache.clear(); } @@ -46,25 +47,21 @@ void TextLayoutCache::init() { mDebugLevel = readRtlDebugLevel(); mDebugEnabled = mDebugLevel & kRtlDebugCaches; - LOGD("Using TextLayoutCache debug level: %d - Debug Enabled: %d", mDebugLevel, mDebugEnabled); + LOGD("Using debug level: %d - Debug Enabled: %d", mDebugLevel, mDebugEnabled); mCacheStartTime = systemTime(SYSTEM_TIME_MONOTONIC); - if (mDebugEnabled) { - LOGD("TextLayoutCache start time: %lld", mCacheStartTime); - } - mInitialized = true; if (mDebugEnabled) { + LOGD("Start time: %lld", mCacheStartTime); #if RTL_USE_HARFBUZZ - LOGD("TextLayoutCache is using HARFBUZZ"); + LOGD("Using HARFBUZZ"); #else - LOGD("TextLayoutCache is using ICU"); + LOGD("Using ICU"); #endif + LOGD("Initialization is done"); } - if (mDebugEnabled) { - LOGD("TextLayoutCache initialization is done"); - } + mInitialized = true; } /* @@ -147,8 +144,7 @@ sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint, // Cleanup to make some room if needed if (mSize + size > mMaxSize) { if (mDebugEnabled) { - LOGD("TextLayoutCache: need to clean some entries " - "for making some room for a new entry"); + LOGD("Need to clean some entries for making some room for a new entry"); } while (mSize + size > mMaxSize) { // This will call the callback @@ -213,7 +209,7 @@ void TextLayoutCache::dumpCacheStats() { float remainingPercent = 100 * ((mMaxSize - mSize) / ((float)mMaxSize)); float timeRunningInSec = (systemTime(SYSTEM_TIME_MONOTONIC) - mCacheStartTime) / 1000000000; LOGD("------------------------------------------------"); - LOGD("TextLayoutCache stats"); + LOGD("Cache stats"); LOGD("------------------------------------------------"); LOGD("pid : %d", getpid()); LOGD("running : %.0f seconds", timeRunningInSec); diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h index 10dee87..0d8d71f 100644 --- a/core/jni/android/graphics/TextLayoutCache.h +++ b/core/jni/android/graphics/TextLayoutCache.h @@ -25,6 +25,7 @@ #include <utils/GenerationCache.h> #include <utils/Compare.h> #include <utils/RefBase.h> +#include <utils/Singleton.h> #include <SkPaint.h> #include <SkTemplates.h> @@ -187,11 +188,11 @@ private: /** * Cache of text layout information. */ -class TextLayoutCache : public OnEntryRemoved<TextLayoutCacheKey, sp<TextLayoutCacheValue> > +class TextLayoutCache : public OnEntryRemoved<TextLayoutCacheKey, sp<TextLayoutCacheValue> >, + public Singleton<TextLayoutCache> { public: TextLayoutCache(); - TextLayoutCache(uint32_t maxByteSize); virtual ~TextLayoutCache(); diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index bcf8e71..395e417 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -477,7 +477,7 @@ static void renderText(OpenGLRenderer* renderer, const jchar* text, int count, #if RTL_USE_HARFBUZZ sp<TextLayoutCacheValue> value; #if USE_TEXT_LAYOUT_CACHE - value = gTextLayoutCache.getValue(paint, text, 0, count, count, flags); + value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, flags); if (value == NULL) { LOGE("Cannot get TextLayoutCache value"); return ; @@ -507,7 +507,7 @@ static void renderTextRun(OpenGLRenderer* renderer, const jchar* text, #if RTL_USE_HARFBUZZ sp<TextLayoutCacheValue> value; #if USE_TEXT_LAYOUT_CACHE - value = gTextLayoutCache.getValue(paint, text, start, count, contextCount, flags); + value = TextLayoutCache::getInstance().getValue(paint, text, start, count, contextCount, flags); if (value == NULL) { LOGE("Cannot get TextLayoutCache value"); return ; |