From 79756be175dea78ee9d51bb22abba7621bd9b5cc Mon Sep 17 00:00:00 2001 From: Matt Sarett Date: Wed, 9 Nov 2016 16:13:54 -0500 Subject: [PATCH] Add layer updates debugging feature to Skia pipelines When this property is turned on, we flash green every time a hardware layer is updated. Test: Matches the behavior in OpenGLPipeline BUG:32370375 Change-Id: I916f94eee644c185d8a3f9fa4cd69e087ed1e92d --- libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 8 ++++++++ libs/hwui/pipeline/skia/SkiaLayer.h | 1 + libs/hwui/pipeline/skia/SkiaPipeline.cpp | 1 + 3 files changed, 10 insertions(+) diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index accbabda5a2fa..7dcbbd059e888 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -164,6 +164,14 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { paint = &tmpPaint; } renderNode->getLayerSurface()->draw(canvas, 0, 0, paint); + + if (CC_UNLIKELY(Properties::debugLayersUpdates + && !renderNode->getSkiaLayer()->hasRenderedSinceRepaint)) { + renderNode->getSkiaLayer()->hasRenderedSinceRepaint = true; + SkPaint layerPaint; + layerPaint.setColor(0x7f00ff00); + canvas->drawRect(bounds, layerPaint); + } // composing a software layer with alpha } else if (properties.effectiveLayerType() == LayerType::Software) { SkPaint paint; diff --git a/libs/hwui/pipeline/skia/SkiaLayer.h b/libs/hwui/pipeline/skia/SkiaLayer.h index 0988d7eda89d9..904d57e073ca1 100644 --- a/libs/hwui/pipeline/skia/SkiaLayer.h +++ b/libs/hwui/pipeline/skia/SkiaLayer.h @@ -30,6 +30,7 @@ struct SkiaLayer { sk_sp layerSurface; Matrix4 inverseTransformInWindow; + bool hasRenderedSinceRepaint = false; }; diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index a6612c96b8f3f..a4a83efdecf8c 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -106,6 +106,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque) return; } + layerNode->getSkiaLayer()->hasRenderedSinceRepaint = false; layerCanvas->clear(SK_ColorTRANSPARENT); RenderNodeDrawable root(layerNode, layerCanvas, false);