Loading core/java/android/view/DisplayListCanvas.java +0 −14 Original line number Diff line number Diff line Loading @@ -278,18 +278,4 @@ public class DisplayListCanvas extends Canvas { private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, long propRight, long propBottom, long propRx, long propRy, long propPaint); // TODO: move this optimization to Canvas.java @Override public void drawPath(Path path, Paint paint) { if (path.isSimplePath) { if (path.rects != null) { nDrawRects(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance()); } } else { super.drawPath(path, paint); } } private static native void nDrawRects(long renderer, long region, long paint); } core/jni/android_graphics_Canvas.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,13 @@ static void drawRect(JNIEnv* env, jobject, jlong canvasHandle, jfloat left, jflo get_canvas(canvasHandle)->drawRect(left, top, right, bottom, *paint); } static void drawRegion(JNIEnv* env, jobject, jlong canvasHandle, jlong regionHandle, jlong paintHandle) { const SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); get_canvas(canvasHandle)->drawRegion(*region, *paint); } static void drawRoundRect(JNIEnv* env, jobject, jlong canvasHandle, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat rx, jfloat ry, jlong paintHandle) { const Paint* paint = reinterpret_cast<Paint*>(paintHandle); Loading Loading @@ -698,6 +705,7 @@ static JNINativeMethod gMethods[] = { {"native_drawLine", "(JFFFFJ)V", (void*) CanvasJNI::drawLine}, {"native_drawLines", "(J[FIIJ)V", (void*) CanvasJNI::drawLines}, {"native_drawRect","(JFFFFJ)V", (void*) CanvasJNI::drawRect}, {"native_drawRegion", "(JJJ)V", (void*) CanvasJNI::drawRegion }, {"native_drawRoundRect","(JFFFFFFJ)V", (void*) CanvasJNI::drawRoundRect}, {"native_drawCircle","(JFFFJ)V", (void*) CanvasJNI::drawCircle}, {"native_drawOval","(JFFFFJ)V", (void*) CanvasJNI::drawOval}, Loading core/jni/android_view_DisplayListCanvas.cpp +0 −31 Original line number Diff line number Diff line Loading @@ -124,36 +124,6 @@ static void android_view_DisplayListCanvas_drawCircleProps(JNIEnv* env, jobject renderer->drawCircle(xProp, yProp, radiusProp, paintProp); } static void android_view_DisplayListCanvas_drawRegionAsRects(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong regionPtr, jlong paintPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); SkRegion* region = reinterpret_cast<SkRegion*>(regionPtr); Paint* paint = reinterpret_cast<Paint*>(paintPtr); if (paint->getStyle() != Paint::kFill_Style || (paint->isAntiAlias() && !renderer->isCurrentTransformSimple())) { SkRegion::Iterator it(*region); while (!it.done()) { const SkIRect& r = it.rect(); renderer->drawRect(r.fLeft, r.fTop, r.fRight, r.fBottom, *paint); it.next(); } } else { int count = 0; Vector<float> rects; SkRegion::Iterator it(*region); while (!it.done()) { const SkIRect& r = it.rect(); rects.push(r.fLeft); rects.push(r.fTop); rects.push(r.fRight); rects.push(r.fBottom); count += 4; it.next(); } renderer->drawRects(rects.array(), count, paint); } } // ---------------------------------------------------------------------------- // Display lists // ---------------------------------------------------------------------------- Loading Loading @@ -235,7 +205,6 @@ static JNINativeMethod gMethods[] = { { "nDrawPatch", "(JLandroid/graphics/Bitmap;JFFFFJ)V", (void*) android_view_DisplayListCanvas_drawPatch }, { "nDrawRects", "(JJJ)V", (void*) android_view_DisplayListCanvas_drawRegionAsRects }, { "nDrawRoundRect", "(JJJJJJJJ)V", (void*) android_view_DisplayListCanvas_drawRoundRectProps }, { "nDrawCircle", "(JJJJJ)V", (void*) android_view_DisplayListCanvas_drawCircleProps }, Loading graphics/java/android/graphics/Canvas.java +7 −1 Original line number Diff line number Diff line Loading @@ -1248,8 +1248,12 @@ public class Canvas { * @param paint The paint used to draw the path */ public void drawPath(@NonNull Path path, @NonNull Paint paint) { if (path.isSimplePath && path.rects != null) { native_drawRegion(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance()); } else { native_drawPath(mNativeCanvasWrapper, path.ni(), paint.getNativeInstance()); } } /** * @hide Loading Loading @@ -2053,6 +2057,8 @@ public class Canvas { private static native void native_drawPath(long nativeCanvas, long nativePath, long nativePaint); private static native void native_drawRegion(long nativeCanvas, long nativeRegion, long nativePaint); private native void native_drawBitmap(long nativeCanvas, Bitmap bitmap, float left, float top, long nativePaintOrZero, Loading libs/hwui/Canvas.h +1 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ public: virtual void drawLines(const float* points, int count, const SkPaint& paint) = 0; virtual void drawRect(float left, float top, float right, float bottom, const SkPaint& paint) = 0; virtual void drawRegion(const SkRegion& region, const SkPaint& paint) = 0; virtual void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, const SkPaint& paint) = 0; virtual void drawCircle(float x, float y, float radius, const SkPaint& paint) = 0; Loading Loading
core/java/android/view/DisplayListCanvas.java +0 −14 Original line number Diff line number Diff line Loading @@ -278,18 +278,4 @@ public class DisplayListCanvas extends Canvas { private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, long propRight, long propBottom, long propRx, long propRy, long propPaint); // TODO: move this optimization to Canvas.java @Override public void drawPath(Path path, Paint paint) { if (path.isSimplePath) { if (path.rects != null) { nDrawRects(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance()); } } else { super.drawPath(path, paint); } } private static native void nDrawRects(long renderer, long region, long paint); }
core/jni/android_graphics_Canvas.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,13 @@ static void drawRect(JNIEnv* env, jobject, jlong canvasHandle, jfloat left, jflo get_canvas(canvasHandle)->drawRect(left, top, right, bottom, *paint); } static void drawRegion(JNIEnv* env, jobject, jlong canvasHandle, jlong regionHandle, jlong paintHandle) { const SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); get_canvas(canvasHandle)->drawRegion(*region, *paint); } static void drawRoundRect(JNIEnv* env, jobject, jlong canvasHandle, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat rx, jfloat ry, jlong paintHandle) { const Paint* paint = reinterpret_cast<Paint*>(paintHandle); Loading Loading @@ -698,6 +705,7 @@ static JNINativeMethod gMethods[] = { {"native_drawLine", "(JFFFFJ)V", (void*) CanvasJNI::drawLine}, {"native_drawLines", "(J[FIIJ)V", (void*) CanvasJNI::drawLines}, {"native_drawRect","(JFFFFJ)V", (void*) CanvasJNI::drawRect}, {"native_drawRegion", "(JJJ)V", (void*) CanvasJNI::drawRegion }, {"native_drawRoundRect","(JFFFFFFJ)V", (void*) CanvasJNI::drawRoundRect}, {"native_drawCircle","(JFFFJ)V", (void*) CanvasJNI::drawCircle}, {"native_drawOval","(JFFFFJ)V", (void*) CanvasJNI::drawOval}, Loading
core/jni/android_view_DisplayListCanvas.cpp +0 −31 Original line number Diff line number Diff line Loading @@ -124,36 +124,6 @@ static void android_view_DisplayListCanvas_drawCircleProps(JNIEnv* env, jobject renderer->drawCircle(xProp, yProp, radiusProp, paintProp); } static void android_view_DisplayListCanvas_drawRegionAsRects(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong regionPtr, jlong paintPtr) { DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr); SkRegion* region = reinterpret_cast<SkRegion*>(regionPtr); Paint* paint = reinterpret_cast<Paint*>(paintPtr); if (paint->getStyle() != Paint::kFill_Style || (paint->isAntiAlias() && !renderer->isCurrentTransformSimple())) { SkRegion::Iterator it(*region); while (!it.done()) { const SkIRect& r = it.rect(); renderer->drawRect(r.fLeft, r.fTop, r.fRight, r.fBottom, *paint); it.next(); } } else { int count = 0; Vector<float> rects; SkRegion::Iterator it(*region); while (!it.done()) { const SkIRect& r = it.rect(); rects.push(r.fLeft); rects.push(r.fTop); rects.push(r.fRight); rects.push(r.fBottom); count += 4; it.next(); } renderer->drawRects(rects.array(), count, paint); } } // ---------------------------------------------------------------------------- // Display lists // ---------------------------------------------------------------------------- Loading Loading @@ -235,7 +205,6 @@ static JNINativeMethod gMethods[] = { { "nDrawPatch", "(JLandroid/graphics/Bitmap;JFFFFJ)V", (void*) android_view_DisplayListCanvas_drawPatch }, { "nDrawRects", "(JJJ)V", (void*) android_view_DisplayListCanvas_drawRegionAsRects }, { "nDrawRoundRect", "(JJJJJJJJ)V", (void*) android_view_DisplayListCanvas_drawRoundRectProps }, { "nDrawCircle", "(JJJJJ)V", (void*) android_view_DisplayListCanvas_drawCircleProps }, Loading
graphics/java/android/graphics/Canvas.java +7 −1 Original line number Diff line number Diff line Loading @@ -1248,8 +1248,12 @@ public class Canvas { * @param paint The paint used to draw the path */ public void drawPath(@NonNull Path path, @NonNull Paint paint) { if (path.isSimplePath && path.rects != null) { native_drawRegion(mNativeCanvasWrapper, path.rects.mNativeRegion, paint.getNativeInstance()); } else { native_drawPath(mNativeCanvasWrapper, path.ni(), paint.getNativeInstance()); } } /** * @hide Loading Loading @@ -2053,6 +2057,8 @@ public class Canvas { private static native void native_drawPath(long nativeCanvas, long nativePath, long nativePaint); private static native void native_drawRegion(long nativeCanvas, long nativeRegion, long nativePaint); private native void native_drawBitmap(long nativeCanvas, Bitmap bitmap, float left, float top, long nativePaintOrZero, Loading
libs/hwui/Canvas.h +1 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ public: virtual void drawLines(const float* points, int count, const SkPaint& paint) = 0; virtual void drawRect(float left, float top, float right, float bottom, const SkPaint& paint) = 0; virtual void drawRegion(const SkRegion& region, const SkPaint& paint) = 0; virtual void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, const SkPaint& paint) = 0; virtual void drawCircle(float x, float y, float radius, const SkPaint& paint) = 0; Loading