summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-03-01 11:45:33 -0800
committerRomain Guy <romainguy@google.com>2011-03-01 11:45:33 -0800
commit321dce646dc3c2ecfbd72a693d8d9294a6119736 (patch)
treef4ab0818521b9e336c5a4ecb83194aa4bc89e557 /libs
parentfbaa6741b61cffa5db8ad843fd4e3cf07ff0b31a (diff)
downloadframeworks_base-321dce646dc3c2ecfbd72a693d8d9294a6119736.zip
frameworks_base-321dce646dc3c2ecfbd72a693d8d9294a6119736.tar.gz
frameworks_base-321dce646dc3c2ecfbd72a693d8d9294a6119736.tar.bz2
Avoid UTF-8 conversions and string copies whenever possible.
Change-Id: Ie4584417bbb7247e6c567fbfdb819529e548bb8f
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/TextDropShadowCache.cpp3
-rw-r--r--libs/hwui/TextDropShadowCache.h24
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;
}
}
}