]> git.saurik.com Git - android/aapt.git/commitdiff
Use UTF-8 strings to avoid duplicate caching, part 1
authorKenny Root <kroot@google.com>
Tue, 23 Feb 2010 06:36:26 +0000 (22:36 -0800)
committerKenny Root <kroot@google.com>
Tue, 23 Feb 2010 18:02:20 +0000 (10:02 -0800)
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

StringPool.cpp

index 51afc0a946cc38d617c1144743609c98dfb19fe5..a09cec05110b4102f284225d2f0ff0526dc962c5 100644 (file)
@@ -25,8 +25,12 @@ void printStringPool(const ResStringPool* pool)
     const size_t NS = pool->size();
     for (size_t s=0; s<NS; s++) {
         size_t len;
-        printf("String #%ld: %s\n", s,
-                String8(pool->stringAt(s, &len)).string());
+        const char *str = (const char*)pool->string8At(s, &len);
+        if (str == NULL) {
+            str = String8(pool->stringAt(s, &len)).string();
+        }
+
+        printf("String #%ld: %s\n", s, str);
     }
 }