From 780d2a1b714724d85227141c76b3c64f543f00b4 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 22 Feb 2010 22:36:26 -0800 Subject: Use UTF-8 strings to avoid duplicate caching, part 1 StringBlock instances containing UTF-8 strings use a cache to convert into UTF-16, but using that cache and then using a JNI call to NewString causes the UTF-8 string as well as two copies of the UTF-16 string to be held in memory. Getting the UTF-8 string directly from the StringPool eliminates one copy of the UTF-16 string being held in memory. This is part 1. Part 2 will include ResXMLParser optimizations. Change-Id: Ibd4509a485db746d59cd4b9501f544877139276c --- core/jni/android_util_StringBlock.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'core/jni/android_util_StringBlock.cpp') diff --git a/core/jni/android_util_StringBlock.cpp b/core/jni/android_util_StringBlock.cpp index ffb271c..641fbce 100644 --- a/core/jni/android_util_StringBlock.cpp +++ b/core/jni/android_util_StringBlock.cpp @@ -89,6 +89,11 @@ static jstring android_content_StringBlock_nativeGetString(JNIEnv* env, jobject } size_t len; + const char* str8 = osb->string8At(idx, &len); + if (str8 != NULL) { + return env->NewStringUTF(str8); + } + const char16_t* str = osb->stringAt(idx, &len); if (str == NULL) { doThrow(env, "java/lang/IndexOutOfBoundsException"); -- cgit v1.1