Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f443fb6 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Fix bug #5274332 TextLayoutCache is having multiple instances"

parents aacbf911 163268b3
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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 ;
+1 −1
Original line number Diff line number Diff line
@@ -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();
+0 −5
Original line number Diff line number Diff line
@@ -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,
+16 −20
Original line number Diff line number Diff line
@@ -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);
+3 −2
Original line number Diff line number Diff line
@@ -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();

Loading