diff options
author | Romain Guy <romainguy@google.com> | 2011-03-01 14:28:13 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-01 14:28:13 -0800 |
commit | 6910f429cdfa000628b82e164131a47a8748c8af (patch) | |
tree | 700e5ef1e12b55c493d0d543aad96223388080fc /libs | |
parent | 91b52b189550b20cdb4e3e1920fe81a479aec843 (diff) | |
parent | 321dce646dc3c2ecfbd72a693d8d9294a6119736 (diff) | |
download | frameworks_base-6910f429cdfa000628b82e164131a47a8748c8af.zip frameworks_base-6910f429cdfa000628b82e164131a47a8748c8af.tar.gz frameworks_base-6910f429cdfa000628b82e164131a47a8748c8af.tar.bz2 |
Merge "Avoid UTF-8 conversions and string copies whenever possible."
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/TextDropShadowCache.cpp | 3 | ||||
-rw-r--r-- | libs/hwui/TextDropShadowCache.h | 24 |
2 files changed, 15 insertions, 12 deletions
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp index 3256790..8f6f860 100644 --- a/libs/hwui/TextDropShadowCache.cpp +++ b/libs/hwui/TextDropShadowCache.cpp @@ -147,6 +147,9 @@ ShadowTexture* TextDropShadowCache::get(SkPaint* paint, const char* text, uint32 if (mDebugEnabled) { LOGD("Shadow texture created, size = %d", texture->bitmapSize); } + + entry.copyTextLocally(); + mSize += size; mCache.put(entry, texture); } else { diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h index 1e065d1..62c4250 100644 --- a/libs/hwui/TextDropShadowCache.h +++ b/libs/hwui/TextDropShadowCache.h @@ -21,7 +21,7 @@ #include <SkPaint.h> -#include <utils/String8.h> +#include <utils/String16.h> #include "utils/Compare.h" #include "utils/GenerationCache.h" @@ -37,18 +37,13 @@ struct ShadowText { ShadowText(SkPaint* paint, uint32_t radius, uint32_t len, const char* srcText): radius(radius), len(len) { - // The source text we receive is in UTF-16, convert to UTF-8 - str.setTo((const char16_t*) srcText, len >> 1); + // TODO: Propagate this through the API, we should not cast here + text = (const char16_t*) srcText; textSize = paint->getTextSize(); typeface = paint->getTypeface(); } - ShadowText(const ShadowText& shadow): - radius(shadow.radius), len(shadow.len), textSize(shadow.textSize), - typeface(shadow.typeface), str(shadow.str) { - } - ~ShadowText() { } @@ -56,16 +51,21 @@ struct ShadowText { uint32_t len; float textSize; SkTypeface* typeface; - String8 str; + const char16_t* text; + String16 str; + + void copyTextLocally() { + str.setTo((const char16_t*) text, len >> 1); + text = str.string(); + } // TODO: Should take into account fake bold and text skew bool operator<(const ShadowText& rhs) const { LTE_INT(len) { LTE_INT(radius) { LTE_FLOAT(textSize) { - if (typeface < rhs.typeface) return true; - else if (typeface == rhs.typeface) { - return str.compare(rhs.str) < 0; + LTE_INT(typeface) { + return strncmp16(text, rhs.text, len >> 1) < 0; } } } |