diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index b01dcd8306eb6..9313d0afce2b8 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 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 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 7e89a37ae8496..fa9a7b740fc11 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 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 9bb1b921675a1..0a29d7876a9df 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 f04c5eb5f24e6..7f79277d3fabf 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 >::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 >::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 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 10dee87e09d80..0d8d71fe7c26d 100644 --- a/core/jni/android/graphics/TextLayoutCache.h +++ b/core/jni/android/graphics/TextLayoutCache.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -187,11 +188,11 @@ private: /** * Cache of text layout information. */ -class TextLayoutCache : public OnEntryRemoved > +class TextLayoutCache : public OnEntryRemoved >, + public Singleton { 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 bcf8e7128ab1c..395e417aee395 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 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 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 ;