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