Loading core/java/android/view/DisplayListCanvas.java +10 −41 Original line number Diff line number Diff line Loading @@ -48,13 +48,17 @@ public class DisplayListCanvas extends Canvas { private int mWidth; private int mHeight; static DisplayListCanvas obtain(@NonNull RenderNode node) { static DisplayListCanvas obtain(@NonNull RenderNode node, int width, int height) { if (node == null) throw new IllegalArgumentException("node cannot be null"); DisplayListCanvas canvas = sPool.acquire(); if (canvas == null) { canvas = new DisplayListCanvas(); canvas = new DisplayListCanvas(width, height); } else { nResetDisplayListCanvas(canvas.mNativeCanvasWrapper, width, height); } canvas.mNode = node; canvas.mWidth = width; canvas.mHeight = height; return canvas; } Loading Loading @@ -87,12 +91,13 @@ public class DisplayListCanvas extends Canvas { // Constructors /////////////////////////////////////////////////////////////////////////// private DisplayListCanvas() { super(nCreateDisplayListCanvas()); private DisplayListCanvas(int width, int height) { super(nCreateDisplayListCanvas(width, height)); mDensity = 0; // disable bitmap density scaling } private static native long nCreateDisplayListCanvas(); private static native long nCreateDisplayListCanvas(int width, int height); private static native void nResetDisplayListCanvas(long canvas, int width, int height); /////////////////////////////////////////////////////////////////////////// // Canvas management Loading Loading @@ -153,17 +158,6 @@ public class DisplayListCanvas extends Canvas { // Setup /////////////////////////////////////////////////////////////////////////// @Override public void setViewport(int width, int height) { mWidth = width; mHeight = height; nSetViewport(mNativeCanvasWrapper, width, height); } private static native void nSetViewport(long renderer, int width, int height); @Override public void setHighContrastText(boolean highContrastText) { nSetHighContrastText(mNativeCanvasWrapper, highContrastText); Loading @@ -183,31 +177,6 @@ public class DisplayListCanvas extends Canvas { private static native void nInsertReorderBarrier(long renderer, boolean enableReorder); /** * Invoked before any drawing operation is performed in this canvas. * * @param dirty The dirty rectangle to update, can be null. */ public void onPreDraw(Rect dirty) { if (dirty != null) { nPrepareDirty(mNativeCanvasWrapper, dirty.left, dirty.top, dirty.right, dirty.bottom); } else { nPrepare(mNativeCanvasWrapper); } } private static native void nPrepare(long renderer); private static native void nPrepareDirty(long renderer, int left, int top, int right, int bottom); /** * Invoked after all drawing operation have been performed. */ public void onPostDraw() { nFinish(mNativeCanvasWrapper); } private static native void nFinish(long renderer); /////////////////////////////////////////////////////////////////////////// // Functor /////////////////////////////////////////////////////////////////////////// Loading core/java/android/view/RenderNode.java +1 −45 Original line number Diff line number Diff line Loading @@ -126,45 +126,6 @@ import android.graphics.Rect; * @hide */ public class RenderNode { /** * Flag used when calling * {@link DisplayListCanvas#drawRenderNode * When this flag is set, draw operations lying outside of the bounds of the * display list will be culled early. It is recommeneded to always set this * flag. */ public static final int FLAG_CLIP_CHILDREN = 0x1; // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h /** * Indicates that the display list is done drawing. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DONE = 0x0; /** * Indicates that the display list needs another drawing pass. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DRAW = 0x1; /** * Indicates that the display list needs to re-execute its GL functors. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) * @see DisplayListCanvas#callDrawGLFunction2(long) */ public static final int STATUS_INVOKE = 0x2; /** * Indicates that the display list performed GL drawing operations. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DREW = 0x4; private boolean mValid; // Do not access directly unless you are ThreadedRenderer Loading Loading @@ -225,11 +186,7 @@ public class RenderNode { * @see #isValid() */ public DisplayListCanvas start(int width, int height) { DisplayListCanvas canvas = DisplayListCanvas.obtain(this); canvas.setViewport(width, height); // The dirty rect should always be null for a display list canvas.onPreDraw(null); return canvas; return DisplayListCanvas.obtain(this, width, height); } /** Loading @@ -241,7 +198,6 @@ public class RenderNode { * @see #isValid() */ public void end(DisplayListCanvas canvas) { canvas.onPostDraw(); long renderNodeData = canvas.finishRecording(); nSetDisplayListData(mNativeRenderNode, renderNodeData); canvas.recycle(); Loading core/jni/android_view_DisplayListCanvas.cpp +12 −31 Original line number Diff line number Diff line Loading @@ -50,12 +50,6 @@ static struct { // Setup // ---------------------------------------------------------------------------- static void android_view_DisplayListCanvas_setViewport(JNIEnv* env, jobject clazz, jlong rendererPtr, jint width, jint height) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->setViewport(width, height); } static void android_view_DisplayListCanvas_setHighContrastText(JNIEnv* env, jobject clazz, jlong rendererPtr, jboolean highContrastText) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); Loading @@ -68,24 +62,6 @@ static void android_view_DisplayListCanvas_insertReorderBarrier(JNIEnv* env, job renderer->insertReorderBarrier(reorderEnable); } static void android_view_DisplayListCanvas_prepare(JNIEnv* env, jobject clazz, jlong rendererPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->prepare(); } static void android_view_DisplayListCanvas_prepareDirty(JNIEnv* env, jobject clazz, jlong rendererPtr, jint left, jint top, jint right, jint bottom) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->prepareDirty(left, top, right, bottom); } static void android_view_DisplayListCanvas_finish(JNIEnv* env, jobject clazz, jlong rendererPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->finish(); } // ---------------------------------------------------------------------------- // Functor // ---------------------------------------------------------------------------- Loading Loading @@ -188,10 +164,18 @@ static jlong android_view_DisplayListCanvas_finishRecording(JNIEnv* env, return reinterpret_cast<jlong>(renderer->finishRecording()); } static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env, jobject clazz) { return reinterpret_cast<jlong>(new DisplayListCanvas); static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env, jobject clazz, jint width, jint height) { return reinterpret_cast<jlong>(new DisplayListCanvas(width, height)); } static void android_view_DisplayListCanvas_resetDisplayListCanvas(JNIEnv* env, jobject clazz, jlong rendererPtr, jint width, jint height) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->reset(width, height); } static void android_view_DisplayListCanvas_drawRenderNode(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong renderNodePtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); Loading Loading @@ -244,12 +228,8 @@ const char* const kClassPathName = "android/view/DisplayListCanvas"; static JNINativeMethod gMethods[] = { { "nIsAvailable", "()Z", (void*) android_view_DisplayListCanvas_isAvailable }, { "nSetViewport", "(JII)V", (void*) android_view_DisplayListCanvas_setViewport }, { "nSetHighContrastText","(JZ)V", (void*) android_view_DisplayListCanvas_setHighContrastText }, { "nInsertReorderBarrier","(JZ)V", (void*) android_view_DisplayListCanvas_insertReorderBarrier }, { "nPrepare", "(J)V", (void*) android_view_DisplayListCanvas_prepare }, { "nPrepareDirty", "(JIIII)V", (void*) android_view_DisplayListCanvas_prepareDirty }, { "nFinish", "(J)V", (void*) android_view_DisplayListCanvas_finish }, { "nCallDrawGLFunction", "(JJ)V", (void*) android_view_DisplayListCanvas_callDrawGLFunction }, Loading @@ -262,7 +242,8 @@ static JNINativeMethod gMethods[] = { { "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording }, { "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode }, { "nCreateDisplayListCanvas", "()J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas }, { "nCreateDisplayListCanvas", "(II)J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas }, { "nResetDisplayListCanvas", "(JII)V", (void*) android_view_DisplayListCanvas_resetDisplayListCanvas }, { "nDrawLayer", "(JJFF)V", (void*) android_view_DisplayListCanvas_drawLayer }, Loading graphics/java/android/graphics/Canvas.java +0 −11 Original line number Diff line number Diff line Loading @@ -214,17 +214,6 @@ public class Canvas { mBitmap = bitmap; } /** * Set the viewport dimensions if this canvas is GL based. If it is not, * this method is ignored and no exception is thrown. * * @param width The width of the viewport * @param height The height of the viewport * * @hide */ public void setViewport(int width, int height) {} /** @hide */ public void setHighContrastText(boolean highContrastText) {} Loading libs/hwui/DisplayListCanvas.cpp +17 −25 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ namespace android { namespace uirenderer { DisplayListCanvas::DisplayListCanvas() DisplayListCanvas::DisplayListCanvas(int width, int height) : mState(*this) , mResourceCache(ResourceCache::getInstance()) , mDisplayListData(nullptr) Loading @@ -41,6 +41,7 @@ DisplayListCanvas::DisplayListCanvas() , mDeferredBarrierType(kBarrier_None) , mHighContrastText(false) , mRestoreSaveCount(-1) { reset(width, height); } DisplayListCanvas::~DisplayListCanvas() { Loading @@ -48,27 +49,12 @@ DisplayListCanvas::~DisplayListCanvas() { "Destroyed a DisplayListCanvas during a record!"); } /////////////////////////////////////////////////////////////////////////////// // Operations /////////////////////////////////////////////////////////////////////////////// DisplayListData* DisplayListCanvas::finishRecording() { mPaintMap.clear(); mRegionMap.clear(); mPathMap.clear(); DisplayListData* data = mDisplayListData; mDisplayListData = nullptr; mSkiaCanvasProxy.reset(nullptr); return data; } void DisplayListCanvas::prepareDirty(float left, float top, float right, float bottom) { void DisplayListCanvas::reset(int width, int height) { LOG_ALWAYS_FATAL_IF(mDisplayListData, "prepareDirty called a second time during a recording!"); mDisplayListData = new DisplayListData(); mState.setViewport(width, height); mState.initializeSaveStack(0, 0, mState.getWidth(), mState.getHeight(), Vector3()); mDeferredBarrierType = kBarrier_InOrder; Loading @@ -76,16 +62,22 @@ void DisplayListCanvas::prepareDirty(float left, float top, mRestoreSaveCount = -1; } bool DisplayListCanvas::finish() { /////////////////////////////////////////////////////////////////////////////// // Operations /////////////////////////////////////////////////////////////////////////////// DisplayListData* DisplayListCanvas::finishRecording() { flushRestoreToCount(); flushTranslate(); return false; } void DisplayListCanvas::interrupt() { } void DisplayListCanvas::resume() { mPaintMap.clear(); mRegionMap.clear(); mPathMap.clear(); DisplayListData* data = mDisplayListData; mDisplayListData = nullptr; mSkiaCanvasProxy.reset(nullptr); return data; } void DisplayListCanvas::callDrawGLFunction(Functor *functor) { Loading Loading
core/java/android/view/DisplayListCanvas.java +10 −41 Original line number Diff line number Diff line Loading @@ -48,13 +48,17 @@ public class DisplayListCanvas extends Canvas { private int mWidth; private int mHeight; static DisplayListCanvas obtain(@NonNull RenderNode node) { static DisplayListCanvas obtain(@NonNull RenderNode node, int width, int height) { if (node == null) throw new IllegalArgumentException("node cannot be null"); DisplayListCanvas canvas = sPool.acquire(); if (canvas == null) { canvas = new DisplayListCanvas(); canvas = new DisplayListCanvas(width, height); } else { nResetDisplayListCanvas(canvas.mNativeCanvasWrapper, width, height); } canvas.mNode = node; canvas.mWidth = width; canvas.mHeight = height; return canvas; } Loading Loading @@ -87,12 +91,13 @@ public class DisplayListCanvas extends Canvas { // Constructors /////////////////////////////////////////////////////////////////////////// private DisplayListCanvas() { super(nCreateDisplayListCanvas()); private DisplayListCanvas(int width, int height) { super(nCreateDisplayListCanvas(width, height)); mDensity = 0; // disable bitmap density scaling } private static native long nCreateDisplayListCanvas(); private static native long nCreateDisplayListCanvas(int width, int height); private static native void nResetDisplayListCanvas(long canvas, int width, int height); /////////////////////////////////////////////////////////////////////////// // Canvas management Loading Loading @@ -153,17 +158,6 @@ public class DisplayListCanvas extends Canvas { // Setup /////////////////////////////////////////////////////////////////////////// @Override public void setViewport(int width, int height) { mWidth = width; mHeight = height; nSetViewport(mNativeCanvasWrapper, width, height); } private static native void nSetViewport(long renderer, int width, int height); @Override public void setHighContrastText(boolean highContrastText) { nSetHighContrastText(mNativeCanvasWrapper, highContrastText); Loading @@ -183,31 +177,6 @@ public class DisplayListCanvas extends Canvas { private static native void nInsertReorderBarrier(long renderer, boolean enableReorder); /** * Invoked before any drawing operation is performed in this canvas. * * @param dirty The dirty rectangle to update, can be null. */ public void onPreDraw(Rect dirty) { if (dirty != null) { nPrepareDirty(mNativeCanvasWrapper, dirty.left, dirty.top, dirty.right, dirty.bottom); } else { nPrepare(mNativeCanvasWrapper); } } private static native void nPrepare(long renderer); private static native void nPrepareDirty(long renderer, int left, int top, int right, int bottom); /** * Invoked after all drawing operation have been performed. */ public void onPostDraw() { nFinish(mNativeCanvasWrapper); } private static native void nFinish(long renderer); /////////////////////////////////////////////////////////////////////////// // Functor /////////////////////////////////////////////////////////////////////////// Loading
core/java/android/view/RenderNode.java +1 −45 Original line number Diff line number Diff line Loading @@ -126,45 +126,6 @@ import android.graphics.Rect; * @hide */ public class RenderNode { /** * Flag used when calling * {@link DisplayListCanvas#drawRenderNode * When this flag is set, draw operations lying outside of the bounds of the * display list will be culled early. It is recommeneded to always set this * flag. */ public static final int FLAG_CLIP_CHILDREN = 0x1; // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h /** * Indicates that the display list is done drawing. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DONE = 0x0; /** * Indicates that the display list needs another drawing pass. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DRAW = 0x1; /** * Indicates that the display list needs to re-execute its GL functors. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) * @see DisplayListCanvas#callDrawGLFunction2(long) */ public static final int STATUS_INVOKE = 0x2; /** * Indicates that the display list performed GL drawing operations. * * @see DisplayListCanvas#drawRenderNode(RenderNode, int) */ public static final int STATUS_DREW = 0x4; private boolean mValid; // Do not access directly unless you are ThreadedRenderer Loading Loading @@ -225,11 +186,7 @@ public class RenderNode { * @see #isValid() */ public DisplayListCanvas start(int width, int height) { DisplayListCanvas canvas = DisplayListCanvas.obtain(this); canvas.setViewport(width, height); // The dirty rect should always be null for a display list canvas.onPreDraw(null); return canvas; return DisplayListCanvas.obtain(this, width, height); } /** Loading @@ -241,7 +198,6 @@ public class RenderNode { * @see #isValid() */ public void end(DisplayListCanvas canvas) { canvas.onPostDraw(); long renderNodeData = canvas.finishRecording(); nSetDisplayListData(mNativeRenderNode, renderNodeData); canvas.recycle(); Loading
core/jni/android_view_DisplayListCanvas.cpp +12 −31 Original line number Diff line number Diff line Loading @@ -50,12 +50,6 @@ static struct { // Setup // ---------------------------------------------------------------------------- static void android_view_DisplayListCanvas_setViewport(JNIEnv* env, jobject clazz, jlong rendererPtr, jint width, jint height) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->setViewport(width, height); } static void android_view_DisplayListCanvas_setHighContrastText(JNIEnv* env, jobject clazz, jlong rendererPtr, jboolean highContrastText) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); Loading @@ -68,24 +62,6 @@ static void android_view_DisplayListCanvas_insertReorderBarrier(JNIEnv* env, job renderer->insertReorderBarrier(reorderEnable); } static void android_view_DisplayListCanvas_prepare(JNIEnv* env, jobject clazz, jlong rendererPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->prepare(); } static void android_view_DisplayListCanvas_prepareDirty(JNIEnv* env, jobject clazz, jlong rendererPtr, jint left, jint top, jint right, jint bottom) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->prepareDirty(left, top, right, bottom); } static void android_view_DisplayListCanvas_finish(JNIEnv* env, jobject clazz, jlong rendererPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->finish(); } // ---------------------------------------------------------------------------- // Functor // ---------------------------------------------------------------------------- Loading Loading @@ -188,10 +164,18 @@ static jlong android_view_DisplayListCanvas_finishRecording(JNIEnv* env, return reinterpret_cast<jlong>(renderer->finishRecording()); } static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env, jobject clazz) { return reinterpret_cast<jlong>(new DisplayListCanvas); static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env, jobject clazz, jint width, jint height) { return reinterpret_cast<jlong>(new DisplayListCanvas(width, height)); } static void android_view_DisplayListCanvas_resetDisplayListCanvas(JNIEnv* env, jobject clazz, jlong rendererPtr, jint width, jint height) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); renderer->reset(width, height); } static void android_view_DisplayListCanvas_drawRenderNode(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong renderNodePtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); Loading Loading @@ -244,12 +228,8 @@ const char* const kClassPathName = "android/view/DisplayListCanvas"; static JNINativeMethod gMethods[] = { { "nIsAvailable", "()Z", (void*) android_view_DisplayListCanvas_isAvailable }, { "nSetViewport", "(JII)V", (void*) android_view_DisplayListCanvas_setViewport }, { "nSetHighContrastText","(JZ)V", (void*) android_view_DisplayListCanvas_setHighContrastText }, { "nInsertReorderBarrier","(JZ)V", (void*) android_view_DisplayListCanvas_insertReorderBarrier }, { "nPrepare", "(J)V", (void*) android_view_DisplayListCanvas_prepare }, { "nPrepareDirty", "(JIIII)V", (void*) android_view_DisplayListCanvas_prepareDirty }, { "nFinish", "(J)V", (void*) android_view_DisplayListCanvas_finish }, { "nCallDrawGLFunction", "(JJ)V", (void*) android_view_DisplayListCanvas_callDrawGLFunction }, Loading @@ -262,7 +242,8 @@ static JNINativeMethod gMethods[] = { { "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording }, { "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode }, { "nCreateDisplayListCanvas", "()J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas }, { "nCreateDisplayListCanvas", "(II)J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas }, { "nResetDisplayListCanvas", "(JII)V", (void*) android_view_DisplayListCanvas_resetDisplayListCanvas }, { "nDrawLayer", "(JJFF)V", (void*) android_view_DisplayListCanvas_drawLayer }, Loading
graphics/java/android/graphics/Canvas.java +0 −11 Original line number Diff line number Diff line Loading @@ -214,17 +214,6 @@ public class Canvas { mBitmap = bitmap; } /** * Set the viewport dimensions if this canvas is GL based. If it is not, * this method is ignored and no exception is thrown. * * @param width The width of the viewport * @param height The height of the viewport * * @hide */ public void setViewport(int width, int height) {} /** @hide */ public void setHighContrastText(boolean highContrastText) {} Loading
libs/hwui/DisplayListCanvas.cpp +17 −25 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ namespace android { namespace uirenderer { DisplayListCanvas::DisplayListCanvas() DisplayListCanvas::DisplayListCanvas(int width, int height) : mState(*this) , mResourceCache(ResourceCache::getInstance()) , mDisplayListData(nullptr) Loading @@ -41,6 +41,7 @@ DisplayListCanvas::DisplayListCanvas() , mDeferredBarrierType(kBarrier_None) , mHighContrastText(false) , mRestoreSaveCount(-1) { reset(width, height); } DisplayListCanvas::~DisplayListCanvas() { Loading @@ -48,27 +49,12 @@ DisplayListCanvas::~DisplayListCanvas() { "Destroyed a DisplayListCanvas during a record!"); } /////////////////////////////////////////////////////////////////////////////// // Operations /////////////////////////////////////////////////////////////////////////////// DisplayListData* DisplayListCanvas::finishRecording() { mPaintMap.clear(); mRegionMap.clear(); mPathMap.clear(); DisplayListData* data = mDisplayListData; mDisplayListData = nullptr; mSkiaCanvasProxy.reset(nullptr); return data; } void DisplayListCanvas::prepareDirty(float left, float top, float right, float bottom) { void DisplayListCanvas::reset(int width, int height) { LOG_ALWAYS_FATAL_IF(mDisplayListData, "prepareDirty called a second time during a recording!"); mDisplayListData = new DisplayListData(); mState.setViewport(width, height); mState.initializeSaveStack(0, 0, mState.getWidth(), mState.getHeight(), Vector3()); mDeferredBarrierType = kBarrier_InOrder; Loading @@ -76,16 +62,22 @@ void DisplayListCanvas::prepareDirty(float left, float top, mRestoreSaveCount = -1; } bool DisplayListCanvas::finish() { /////////////////////////////////////////////////////////////////////////////// // Operations /////////////////////////////////////////////////////////////////////////////// DisplayListData* DisplayListCanvas::finishRecording() { flushRestoreToCount(); flushTranslate(); return false; } void DisplayListCanvas::interrupt() { } void DisplayListCanvas::resume() { mPaintMap.clear(); mRegionMap.clear(); mPathMap.clear(); DisplayListData* data = mDisplayListData; mDisplayListData = nullptr; mSkiaCanvasProxy.reset(nullptr); return data; } void DisplayListCanvas::callDrawGLFunction(Functor *functor) { Loading