From f5ce45285ea937c1d83c2c13c77c00d9591a350a Mon Sep 17 00:00:00 2001 From: Nader Jawad Date: Mon, 27 Mar 2023 13:02:41 -0700 Subject: [PATCH] Fixed issue where HardwareBufferRenderer was not preserving contents Updated RenderProxy creation to pass false for the opaque flag in order to avoid an unnecessary canvas->clear invocation within SkiaPipeline::draw Fixes: 275398000 Test: Added test to HardwareBufferRendererTests Change-Id: I5f884240439bf3e57500ed1404f31fbe2ea122fa --- libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp | 2 +- libs/hwui/pipeline/skia/SkiaPipeline.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp index ae22213f4bf40..768dfcd528405 100644 --- a/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp +++ b/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp @@ -74,7 +74,7 @@ static long android_graphics_HardwareBufferRenderer_create(JNIEnv* env, jobject, auto* hardwareBuffer = HardwareBufferHelpers::AHardwareBuffer_fromHardwareBuffer(env, buffer); auto* rootRenderNode = reinterpret_cast(renderNodePtr); ContextFactoryImpl factory(rootRenderNode); - auto* proxy = new RenderProxy(true, rootRenderNode, &factory); + auto* proxy = new RenderProxy(false, rootRenderNode, &factory); proxy->setHardwareBuffer(hardwareBuffer); return (jlong)proxy; } diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 6628463bcabff..8ea71f11e2f0d 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -499,8 +499,7 @@ void SkiaPipeline::renderFrameImpl(const SkRect& clip, } canvas->concat(preTransform); - // STOPSHIP: Revert, temporary workaround to clear always F16 frame buffer for b/74976293 - if (!opaque || getSurfaceColorType() == kRGBA_F16_SkColorType) { + if (!opaque) { canvas->clear(SK_ColorTRANSPARENT); }