diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/GLES20Canvas.java | 6 | ||||
-rw-r--r-- | core/java/android/view/GLES20DisplayList.java | 8 | ||||
-rw-r--r-- | core/java/android/view/HardwareRenderer.java | 9 | ||||
-rw-r--r-- | core/java/android/view/View.java | 3 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 2 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 17 |
6 files changed, 38 insertions, 7 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 748ec0c..fa4dd25 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -378,6 +378,12 @@ class GLES20Canvas extends HardwareCanvas { private static native int nGetDisplayListSize(int displayList); + static void setDisplayListName(int displayList, String name) { + nSetDisplayListName(displayList, name); + } + + private static native void nSetDisplayListName(int displayList, String name); + @Override public boolean drawDisplayList(DisplayList displayList, int width, int height, Rect dirty) { return nDrawDisplayList(mRenderer, diff --git a/core/java/android/view/GLES20DisplayList.java b/core/java/android/view/GLES20DisplayList.java index 0cb9449..969c9ab 100644 --- a/core/java/android/view/GLES20DisplayList.java +++ b/core/java/android/view/GLES20DisplayList.java @@ -31,10 +31,17 @@ class GLES20DisplayList extends DisplayList { private GLES20RecordingCanvas mCanvas; private boolean mValid; + // Used for debugging + private final String mName; + // The native display list will be destroyed when this object dies. // DO NOT overwrite this reference once it is set. private DisplayListFinalizer mFinalizer; + GLES20DisplayList(String name) { + mName = name; + } + int getNativeDisplayList() { if (!mValid || mFinalizer == null) { throw new IllegalStateException("The display list is not valid."); @@ -75,6 +82,7 @@ class GLES20DisplayList extends DisplayList { mCanvas.end(mFinalizer.mNativeDisplayList); } else { mFinalizer = new DisplayListFinalizer(mCanvas.end(0)); + GLES20Canvas.setDisplayListName(mFinalizer.mNativeDisplayList, mName); } mCanvas.recycle(); mCanvas = null; diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index e0749de..9e8a228 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -283,9 +283,12 @@ public abstract class HardwareRenderer { * Creates a new display list that can be used to record batches of * drawing operations. * + * @param name The name of the display list, used for debugging purpose. + * May be null + * * @return A new display list. */ - public abstract DisplayList createDisplayList(); + public abstract DisplayList createDisplayList(String name); /** * Creates a new hardware layer. A hardware layer built by calling this @@ -1094,8 +1097,8 @@ public abstract class HardwareRenderer { } @Override - public DisplayList createDisplayList() { - return new GLES20DisplayList(); + public DisplayList createDisplayList(String name) { + return new GLES20DisplayList(name); } @Override diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 39f603d..f929a9e 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10374,7 +10374,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal // we copy in child display lists into ours in drawChild() mRecreateDisplayList = true; if (mDisplayList == null) { - mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList(); + final String name = getClass().getSimpleName(); + mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList(name); // If we're creating a new display list, make sure our parent gets invalidated // since they will need to recreate their display list to account for this // new child display list. diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3ce0a3e..8d31460 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5022,7 +5022,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mTextDisplayList == null || !mTextDisplayList.isValid() || !mTextDisplayListIsValid) { if (mTextDisplayList == null) { - mTextDisplayList = getHardwareRenderer().createDisplayList(); + mTextDisplayList = getHardwareRenderer().createDisplayList("Text"); } final HardwareCanvas hardwareCanvas = mTextDisplayList.start(); diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index 32f8780..e19bb38 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -626,6 +626,15 @@ static jint android_view_GLES20Canvas_getDisplayListSize(JNIEnv* env, return displayList->getSize(); } +static void android_view_GLES20Canvas_setDisplayListName(JNIEnv* env, + jobject clazz, DisplayList* displayList, jstring name) { + if (name != NULL) { + const char* textArray = env->GetStringUTFChars(name, NULL); + displayList->setName(textArray); + env->ReleaseStringUTFChars(name, textArray); + } +} + static OpenGLRenderer* android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env, jobject clazz) { return new DisplayListRenderer; @@ -890,10 +899,14 @@ static JNINativeMethod gMethods[] = { { "nGetDisplayList", "(II)I", (void*) android_view_GLES20Canvas_getDisplayList }, { "nDestroyDisplayList", "(I)V", (void*) android_view_GLES20Canvas_destroyDisplayList }, { "nGetDisplayListSize", "(I)I", (void*) android_view_GLES20Canvas_getDisplayListSize }, - { "nCreateDisplayListRenderer", "()I", (void*) android_view_GLES20Canvas_createDisplayListRenderer }, - { "nResetDisplayListRenderer", "(I)V", (void*) android_view_GLES20Canvas_resetDisplayListRenderer }, + { "nSetDisplayListName", "(ILjava/lang/String;)V", + (void*) android_view_GLES20Canvas_setDisplayListName }, { "nDrawDisplayList", "(IIIILandroid/graphics/Rect;)Z", (void*) android_view_GLES20Canvas_drawDisplayList }, + + { "nCreateDisplayListRenderer", "()I", (void*) android_view_GLES20Canvas_createDisplayListRenderer }, + { "nResetDisplayListRenderer", "(I)V", (void*) android_view_GLES20Canvas_resetDisplayListRenderer }, + { "nOutputDisplayList", "(II)V", (void*) android_view_GLES20Canvas_outputDisplayList }, { "nInterrupt", "(I)V", (void*) android_view_GLES20Canvas_interrupt }, { "nResume", "(I)V", (void*) android_view_GLES20Canvas_resume }, |