Merge "Remove unnecessary string operations."
diff --git a/rsFont.cpp b/rsFont.cpp
index 958ecb5..2a2c3b4 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -640,11 +640,9 @@
     initVertexArrayBuffers();
 
     // We store a string with letters in a rough frequency of occurrence
-    mLatinPrecache = String8(" eisarntolcdugpmhbyfvkwzxjq");
-    mLatinPrecache += String8("EISARNTOLCDUGPMHBYFVKWZXJQ");
-    mLatinPrecache += String8(",.?!()-+@;:`'");
-    mLatinPrecache += String8("0123456789");
-
+    mLatinPrecache = " eisarntolcdugpmhbyfvkwzxjq"
+                     "EISARNTOLCDUGPMHBYFVKWZXJQ"
+                     ",.?!()-+@;:`'0123456789";
     mInitialized = true;
 }
 
@@ -740,7 +738,8 @@
     // Remaining capacity is measured in %
     uint32_t remainingCapacity = getRemainingCacheCapacity();
     uint32_t precacheIdx = 0;
-    while (remainingCapacity > 25 && precacheIdx < mLatinPrecache.size()) {
+    const size_t l = strlen(mLatinPrecache);
+    while ((remainingCapacity > 25) && (precacheIdx < l)) {
         font->getCachedUTFChar((int32_t)mLatinPrecache[precacheIdx]);
         remainingCapacity = getRemainingCacheCapacity();
         precacheIdx ++;
diff --git a/rsFont.h b/rsFont.h
index 8f43a2a..f7ad3cd 100644
--- a/rsFont.h
+++ b/rsFont.h
@@ -183,7 +183,7 @@
     uint32_t getRemainingCacheCapacity();
 
     void precacheLatin(Font *font);
-    String8 mLatinPrecache;
+    const char *mLatinPrecache;
 
     Context *mRSC;
 
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index f2885a9..fb00cd1 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -93,13 +93,14 @@
 }
 
 void ProgramFragmentState::init(Context *rsc) {
-    String8 shaderString(RS_SHADER_INTERNAL);
-    shaderString.append("varying lowp vec4 varColor;\n");
-    shaderString.append("varying vec2 varTex0;\n");
-    shaderString.append("void main() {\n");
-    shaderString.append("  lowp vec4 col = UNI_Color;\n");
-    shaderString.append("  gl_FragColor = col;\n");
-    shaderString.append("}\n");
+    const char *shaderString =
+            RS_SHADER_INTERNAL
+            "varying lowp vec4 varColor;\n"
+            "varying vec2 varTex0;\n"
+            "void main() {\n"
+            "  lowp vec4 col = UNI_Color;\n"
+            "  gl_FragColor = col;\n"
+            "}\n";
 
     ObjectBaseRef<const Element> colorElem = Element::createRef(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
     Element::Builder builder;
@@ -114,7 +115,7 @@
 
     Allocation *constAlloc = Allocation::createAllocation(rsc, inputType.get(),
                               RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
-    ProgramFragment *pf = new ProgramFragment(rsc, shaderString.string(), shaderString.length(),
+    ProgramFragment *pf = new ProgramFragment(rsc, shaderString, strlen(shaderString),
                                               NULL, 0, NULL, tmp, 2);
     pf->bindAllocation(rsc, constAlloc, 0);
     pf->setConstantColor(rsc, 1.0f, 1.0f, 1.0f, 1.0f);
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 5265216..30000b0 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -190,15 +190,16 @@
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false, 0);
 
-    String8 shaderString(RS_SHADER_INTERNAL);
-    shaderString.append("varying vec4 varColor;\n");
-    shaderString.append("varying vec2 varTex0;\n");
-    shaderString.append("void main() {\n");
-    shaderString.append("  gl_Position = UNI_MVP * ATTRIB_position;\n");
-    shaderString.append("  gl_PointSize = 1.0;\n");
-    shaderString.append("  varColor = ATTRIB_color;\n");
-    shaderString.append("  varTex0 = ATTRIB_texture0;\n");
-    shaderString.append("}\n");
+    const char *shaderString =
+            RS_SHADER_INTERNAL
+            "varying vec4 varColor;\n"
+            "varying vec2 varTex0;\n"
+            "void main() {\n"
+            "  gl_Position = UNI_MVP * ATTRIB_position;\n"
+            "  gl_PointSize = 1.0;\n"
+            "  varColor = ATTRIB_color;\n"
+            "  varTex0 = ATTRIB_texture0;\n"
+            "}\n";
 
     uint32_t tmp[4];
     tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
@@ -206,7 +207,7 @@
     tmp[2] = RS_PROGRAM_PARAM_INPUT;
     tmp[3] = (uint32_t)attrElem.get();
 
-    ProgramVertex *pv = new ProgramVertex(rsc, shaderString.string(), shaderString.length(),
+    ProgramVertex *pv = new ProgramVertex(rsc, shaderString, strlen(shaderString),
                                           NULL, 0, NULL, tmp, 4);
     Allocation *alloc = Allocation::createAllocation(rsc, inputType.get(),
                               RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);