Loading core/java/android/view/GLES20Canvas.java +24 −8 Original line number Original line Diff line number Diff line Loading @@ -452,12 +452,15 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public int saveLayer(float left, float top, float right, float bottom, Paint paint, public int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags) { int saveFlags) { if (left < right && top < bottom) { boolean hasColorFilter = paint != null && setupColorFilter(paint); boolean hasColorFilter = paint != null && setupColorFilter(paint); final int nativePaint = paint == null ? 0 : paint.mNativePaint; final int nativePaint = paint == null ? 0 : paint.mNativePaint; int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); if (hasColorFilter) nResetModifiers(mRenderer); if (hasColorFilter) nResetModifiers(mRenderer); return count; return count; } } return save(saveFlags); } private native int nSaveLayer(int renderer, float left, float top, float right, float bottom, private native int nSaveLayer(int renderer, float left, float top, float right, float bottom, int paint, int saveFlags); int paint, int saveFlags); Loading @@ -471,8 +474,11 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags) { int saveFlags) { if (left < right && top < bottom) { return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); } } return save(saveFlags); } private native int nSaveLayerAlpha(int renderer, float left, float top, float right, private native int nSaveLayerAlpha(int renderer, float left, float top, float right, float bottom, int alpha, int saveFlags); float bottom, int alpha, int saveFlags); Loading Loading @@ -629,9 +635,13 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public void drawCircle(float cx, float cy, float radius, Paint paint) { public void drawCircle(float cx, float cy, float radius, Paint paint) { throw new UnsupportedOperationException(); boolean hasModifier = setupModifiers(paint); nDrawCircle(mRenderer, cx, cy, radius, paint.mNativePaint); if (hasModifier) nResetModifiers(mRenderer); } } private native void nDrawCircle(int renderer, float cx, float cy, float radius, int paint); @Override @Override public void drawColor(int color) { public void drawColor(int color) { drawColor(color, PorterDuff.Mode.SRC_OVER); drawColor(color, PorterDuff.Mode.SRC_OVER); Loading Loading @@ -767,9 +777,15 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { // TODO: Implement boolean hasModifier = setupModifiers(paint); nDrawRoundRect(mRenderer, rect.left, rect.top, rect.right, rect.bottom, rx, ry, paint.mNativePaint); if (hasModifier) nResetModifiers(mRenderer); } } private native void nDrawRoundRect(int renderer, float left, float top, float right, float bottom, float rx, float y, int paint); @Override @Override public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { if ((index | count | (index + count) | (text.length - index - count)) < 0) { if ((index | count | (index + count) | (text.length - index - count)) < 0) { Loading core/jni/android_view_GLES20Canvas.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -299,6 +299,17 @@ static void android_view_GLES20Canvas_drawRect(JNIEnv* env, jobject canvas, renderer->drawRect(left, top, right, bottom, paint); renderer->drawRect(left, top, right, bottom, paint); } } static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat rx, jfloat ry, SkPaint* paint) { renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint); } static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, jfloat x, jfloat y, jfloat radius, SkPaint* paint) { renderer->drawCircle(x, y, radius, paint); } static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas, static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) { OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) { SkRegion::Iterator it(*region); SkRegion::Iterator it(*region); Loading Loading @@ -570,6 +581,8 @@ static JNINativeMethod gMethods[] = { { "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor }, { "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor }, { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, { "nDrawRoundRect", "(IFFFFFFI)V", (void*) android_view_GLES20Canvas_drawRoundRect }, { "nDrawCircle", "(IFFFI)V", (void*) android_view_GLES20Canvas_drawCircle }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, Loading libs/hwui/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ ifeq ($(USE_OPENGL_RENDERER),true) Program.cpp \ Program.cpp \ ProgramCache.cpp \ ProgramCache.cpp \ ResourceCache.cpp \ ResourceCache.cpp \ ShapeCache.cpp \ SkiaColorFilter.cpp \ SkiaColorFilter.cpp \ SkiaShader.cpp \ SkiaShader.cpp \ TextureCache.cpp \ TextureCache.cpp \ Loading libs/hwui/Caches.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,10 @@ void Caches::dumpMemoryUsage() { LOGD(" LayerCache %8d / %8d", layerCache.getSize(), layerCache.getMaxSize()); LOGD(" LayerCache %8d / %8d", layerCache.getSize(), layerCache.getMaxSize()); LOGD(" GradientCache %8d / %8d", gradientCache.getSize(), gradientCache.getMaxSize()); LOGD(" GradientCache %8d / %8d", gradientCache.getSize(), gradientCache.getMaxSize()); LOGD(" PathCache %8d / %8d", pathCache.getSize(), pathCache.getMaxSize()); LOGD(" PathCache %8d / %8d", pathCache.getSize(), pathCache.getMaxSize()); LOGD(" CircleShapeCache %8d / %8d", circleShapeCache.getSize(), circleShapeCache.getMaxSize()); LOGD(" RoundRectShapeCache %8d / %8d", roundRectShapeCache.getSize(), roundRectShapeCache.getMaxSize()); LOGD(" TextDropShadowCache %8d / %8d", dropShadowCache.getSize(), LOGD(" TextDropShadowCache %8d / %8d", dropShadowCache.getSize(), dropShadowCache.getMaxSize()); dropShadowCache.getMaxSize()); for (uint32_t i = 0; i < fontRenderer.getFontRendererCount(); i++) { for (uint32_t i = 0; i < fontRenderer.getFontRendererCount(); i++) { Loading libs/hwui/Caches.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include "PatchCache.h" #include "PatchCache.h" #include "ProgramCache.h" #include "ProgramCache.h" #include "PathCache.h" #include "PathCache.h" #include "ShapeCache.h" #include "TextDropShadowCache.h" #include "TextDropShadowCache.h" #include "FboCache.h" #include "FboCache.h" #include "ResourceCache.h" #include "ResourceCache.h" Loading Loading @@ -159,6 +160,8 @@ public: GradientCache gradientCache; GradientCache gradientCache; ProgramCache programCache; ProgramCache programCache; PathCache pathCache; PathCache pathCache; RoundRectShapeCache roundRectShapeCache; CircleShapeCache circleShapeCache; PatchCache patchCache; PatchCache patchCache; TextDropShadowCache dropShadowCache; TextDropShadowCache dropShadowCache; FboCache fboCache; FboCache fboCache; Loading Loading
core/java/android/view/GLES20Canvas.java +24 −8 Original line number Original line Diff line number Diff line Loading @@ -452,12 +452,15 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public int saveLayer(float left, float top, float right, float bottom, Paint paint, public int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags) { int saveFlags) { if (left < right && top < bottom) { boolean hasColorFilter = paint != null && setupColorFilter(paint); boolean hasColorFilter = paint != null && setupColorFilter(paint); final int nativePaint = paint == null ? 0 : paint.mNativePaint; final int nativePaint = paint == null ? 0 : paint.mNativePaint; int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); if (hasColorFilter) nResetModifiers(mRenderer); if (hasColorFilter) nResetModifiers(mRenderer); return count; return count; } } return save(saveFlags); } private native int nSaveLayer(int renderer, float left, float top, float right, float bottom, private native int nSaveLayer(int renderer, float left, float top, float right, float bottom, int paint, int saveFlags); int paint, int saveFlags); Loading @@ -471,8 +474,11 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags) { int saveFlags) { if (left < right && top < bottom) { return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); } } return save(saveFlags); } private native int nSaveLayerAlpha(int renderer, float left, float top, float right, private native int nSaveLayerAlpha(int renderer, float left, float top, float right, float bottom, int alpha, int saveFlags); float bottom, int alpha, int saveFlags); Loading Loading @@ -629,9 +635,13 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public void drawCircle(float cx, float cy, float radius, Paint paint) { public void drawCircle(float cx, float cy, float radius, Paint paint) { throw new UnsupportedOperationException(); boolean hasModifier = setupModifiers(paint); nDrawCircle(mRenderer, cx, cy, radius, paint.mNativePaint); if (hasModifier) nResetModifiers(mRenderer); } } private native void nDrawCircle(int renderer, float cx, float cy, float radius, int paint); @Override @Override public void drawColor(int color) { public void drawColor(int color) { drawColor(color, PorterDuff.Mode.SRC_OVER); drawColor(color, PorterDuff.Mode.SRC_OVER); Loading Loading @@ -767,9 +777,15 @@ class GLES20Canvas extends HardwareCanvas { @Override @Override public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { // TODO: Implement boolean hasModifier = setupModifiers(paint); nDrawRoundRect(mRenderer, rect.left, rect.top, rect.right, rect.bottom, rx, ry, paint.mNativePaint); if (hasModifier) nResetModifiers(mRenderer); } } private native void nDrawRoundRect(int renderer, float left, float top, float right, float bottom, float rx, float y, int paint); @Override @Override public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { if ((index | count | (index + count) | (text.length - index - count)) < 0) { if ((index | count | (index + count) | (text.length - index - count)) < 0) { Loading
core/jni/android_view_GLES20Canvas.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -299,6 +299,17 @@ static void android_view_GLES20Canvas_drawRect(JNIEnv* env, jobject canvas, renderer->drawRect(left, top, right, bottom, paint); renderer->drawRect(left, top, right, bottom, paint); } } static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat rx, jfloat ry, SkPaint* paint) { renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint); } static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, jfloat x, jfloat y, jfloat radius, SkPaint* paint) { renderer->drawCircle(x, y, radius, paint); } static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas, static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) { OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) { SkRegion::Iterator it(*region); SkRegion::Iterator it(*region); Loading Loading @@ -570,6 +581,8 @@ static JNINativeMethod gMethods[] = { { "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor }, { "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor }, { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, { "nDrawRoundRect", "(IFFFFFFI)V", (void*) android_view_GLES20Canvas_drawRoundRect }, { "nDrawCircle", "(IFFFI)V", (void*) android_view_GLES20Canvas_drawCircle }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, Loading
libs/hwui/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ ifeq ($(USE_OPENGL_RENDERER),true) Program.cpp \ Program.cpp \ ProgramCache.cpp \ ProgramCache.cpp \ ResourceCache.cpp \ ResourceCache.cpp \ ShapeCache.cpp \ SkiaColorFilter.cpp \ SkiaColorFilter.cpp \ SkiaShader.cpp \ SkiaShader.cpp \ TextureCache.cpp \ TextureCache.cpp \ Loading
libs/hwui/Caches.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,10 @@ void Caches::dumpMemoryUsage() { LOGD(" LayerCache %8d / %8d", layerCache.getSize(), layerCache.getMaxSize()); LOGD(" LayerCache %8d / %8d", layerCache.getSize(), layerCache.getMaxSize()); LOGD(" GradientCache %8d / %8d", gradientCache.getSize(), gradientCache.getMaxSize()); LOGD(" GradientCache %8d / %8d", gradientCache.getSize(), gradientCache.getMaxSize()); LOGD(" PathCache %8d / %8d", pathCache.getSize(), pathCache.getMaxSize()); LOGD(" PathCache %8d / %8d", pathCache.getSize(), pathCache.getMaxSize()); LOGD(" CircleShapeCache %8d / %8d", circleShapeCache.getSize(), circleShapeCache.getMaxSize()); LOGD(" RoundRectShapeCache %8d / %8d", roundRectShapeCache.getSize(), roundRectShapeCache.getMaxSize()); LOGD(" TextDropShadowCache %8d / %8d", dropShadowCache.getSize(), LOGD(" TextDropShadowCache %8d / %8d", dropShadowCache.getSize(), dropShadowCache.getMaxSize()); dropShadowCache.getMaxSize()); for (uint32_t i = 0; i < fontRenderer.getFontRendererCount(); i++) { for (uint32_t i = 0; i < fontRenderer.getFontRendererCount(); i++) { Loading
libs/hwui/Caches.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include "PatchCache.h" #include "PatchCache.h" #include "ProgramCache.h" #include "ProgramCache.h" #include "PathCache.h" #include "PathCache.h" #include "ShapeCache.h" #include "TextDropShadowCache.h" #include "TextDropShadowCache.h" #include "FboCache.h" #include "FboCache.h" #include "ResourceCache.h" #include "ResourceCache.h" Loading Loading @@ -159,6 +160,8 @@ public: GradientCache gradientCache; GradientCache gradientCache; ProgramCache programCache; ProgramCache programCache; PathCache pathCache; PathCache pathCache; RoundRectShapeCache roundRectShapeCache; CircleShapeCache circleShapeCache; PatchCache patchCache; PatchCache patchCache; TextDropShadowCache dropShadowCache; TextDropShadowCache dropShadowCache; FboCache fboCache; FboCache fboCache; Loading