diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index ade3180..9fc73a4 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -531,7 +531,7 @@
     jfloat totalAdvance = value->getTotalAdvance();
     const float* positions = value->getPos();
     int bytesCount = glyphsCount * sizeof(jchar);
-    renderer->drawGeneralText((const char*) glyphs, bytesCount, glyphsCount, x, y,
+    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y,
             positions, paint, totalAdvance);
 }
 
@@ -562,7 +562,7 @@
     jfloat totalAdvance = value->getTotalAdvance();
     const float* positions = value->getPos();
     int bytesCount = glyphsCount * sizeof(jchar);
-    renderer->drawGeneralText((const char*) glyphs, bytesCount, glyphsCount, x, y,
+    renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y,
             positions, paint, totalAdvance);
 }
 
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 7161c58..76321be 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -63,7 +63,7 @@
     "DrawPoints",
     "DrawTextOnPath",
     "DrawPosText",
-    "DrawGeneralText",
+    "DrawText",
     "ResetShader",
     "SetupShader",
     "ResetColorFilter",
@@ -593,7 +593,7 @@
                         text.text(), text.length(), count, paint);
             }
             break;
-            case DrawGeneralText: {
+            case DrawText: {
                 getText(&text);
                 int count = getInt();
                 int positionsCount = 0;
@@ -1221,7 +1221,7 @@
                         positions, paint);
             }
             break;
-            case DrawGeneralText: {
+            case DrawText: {
                 getText(&text);
                 int32_t count = getInt();
                 float x = getFloat();
@@ -1232,7 +1232,7 @@
                 float length = getFloat();
                 DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent,
                         OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length);
-                drawGlStatus |= renderer.drawGeneralText(text.text(), text.length(), count,
+                drawGlStatus |= renderer.drawText(text.text(), text.length(), count,
                         x, y, positions, paint, length);
             }
             break;
@@ -1712,7 +1712,7 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawGeneralText(const char* text, int bytesCount, int count,
+status_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
         float x, float y, const float* positions, SkPaint* paint, float length) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
 
@@ -1733,7 +1733,7 @@
         reject = quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom);
     }
 
-    uint32_t* location = addOp(DisplayList::DrawGeneralText, reject);
+    uint32_t* location = addOp(DisplayList::DrawText, reject);
     addText(text, bytesCount);
     addInt(count);
     addFloat(x);
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index f3041dd..60a40c6 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -105,7 +105,7 @@
         DrawPoints,
         DrawTextOnPath,
         DrawPosText,
-        DrawGeneralText,
+        DrawText,
         ResetShader,
         SetupShader,
         ResetColorFilter,
@@ -603,7 +603,7 @@
             float hOffset, float vOffset, SkPaint* paint);
     virtual status_t drawPosText(const char* text, int bytesCount, int count,
             const float* positions, SkPaint* paint);
-    virtual status_t drawGeneralText(const char* text, int bytesCount, int count,
+    virtual status_t drawText(const char* text, int bytesCount, int count,
             float x, float y, const float* positions, SkPaint* paint, float length);
 
     virtual void resetShader();
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 07281cc..d0d5af5 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2421,7 +2421,7 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawGeneralText(const char* text, int bytesCount, int count,
+status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
         float x, float y, const float* positions, SkPaint* paint, float length) {
     if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
             (paint->getAlpha() * mSnapshot->alpha == 0 && paint->getXfermode() == NULL)) {
@@ -2455,7 +2455,7 @@
     }
 
 #if DEBUG_GLYPHS
-    ALOGD("OpenGLRenderer drawGeneralText() with FontID=%d",
+    ALOGD("OpenGLRenderer drawText() with FontID=%d",
             SkTypeface::UniqueID(paint->getTypeface()));
 #endif
 
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 378fc8c..51683e1 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -142,7 +142,7 @@
             float hOffset, float vOffset, SkPaint* paint);
     virtual status_t drawPosText(const char* text, int bytesCount, int count,
             const float* positions, SkPaint* paint);
-    virtual status_t drawGeneralText(const char* text, int bytesCount, int count, float x, float y,
+    virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
             const float* positions, SkPaint* paint, float length = -1.0f);
 
     virtual void resetShader();
