summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorFabrice Di Meglio <fdimeglio@google.com>2011-09-07 18:12:11 -0700
committerFabrice Di Meglio <fdimeglio@google.com>2011-09-07 18:25:58 -0700
commit163268b3a8d4dd7e650e6c540f832bf60f6bf4c9 (patch)
tree8c95644bd28d89eba78b8f96ff9da30303d1eed9 /core/jni
parente3238c98054688dd9a5b3ae4a776c023d70fb311 (diff)
downloadframeworks_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.cpp6
-rw-r--r--core/jni/android/graphics/TextLayout.cpp2
-rw-r--r--core/jni/android/graphics/TextLayout.h5
-rw-r--r--core/jni/android/graphics/TextLayoutCache.cpp36
-rw-r--r--core/jni/android/graphics/TextLayoutCache.h5
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp4
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 ;