Merge "Create a thread_local cache for textLocale" into mnc-dev

This commit is contained in:
John Reck
2015-07-10 17:50:10 +00:00
committed by Android (Google) Code Review

View File

@@ -74,6 +74,13 @@ static void defaultSettingsForAndroid(Paint* paint) {
paint->setTextEncoding(Paint::kGlyphID_TextEncoding);
}
struct LocaleCacheEntry {
std::string javaLocale;
std::string languageTag;
};
static thread_local LocaleCacheEntry sSingleEntryLocaleCache;
class PaintGlue {
public:
enum MoveOpt {
@@ -399,10 +406,14 @@ public:
static void setTextLocale(JNIEnv* env, jobject clazz, jlong objHandle, jstring locale) {
Paint* obj = reinterpret_cast<Paint*>(objHandle);
ScopedUtfChars localeChars(env, locale);
char langTag[ULOC_FULLNAME_CAPACITY];
toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, localeChars.c_str());
if (sSingleEntryLocaleCache.javaLocale != localeChars.c_str()) {
sSingleEntryLocaleCache.javaLocale = localeChars.c_str();
char langTag[ULOC_FULLNAME_CAPACITY];
toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, localeChars.c_str());
sSingleEntryLocaleCache.languageTag = langTag;
}
obj->setTextLocale(langTag);
obj->setTextLocale(sSingleEntryLocaleCache.languageTag);
}
static jboolean isElegantTextHeight(JNIEnv* env, jobject paint) {