From c6a73641879a4d23403ec007ffc1c3d634bc46e6 Mon Sep 17 00:00:00 2001 From: rnlee Date: Fri, 4 Jun 2021 14:16:42 -0700 Subject: Add detailed Skia traces sysprop to RenderEngine. BUG:180767647 Test: setprop, force client composition, perfetto trace 1. `adb shell setprop debug.renderengine.skia_atrace_enabled 1` 2. `adb shell stop && adb shell start` 3. Force client composition: `adb shell service call SurfaceFlinger 1008 i32 1` (`adb shell dumpsys SurfaceFlinger | grep -A 30 "HWC layers"` can be used to check layers are "CLIENT" instead of "DEVICE".) 4. Perfetto script to trace. 5. See skia traces e.g. `grsurfacedrawcontext` in surfaceflinger RenderEngine process. Change-Id: I0612e3df82de08ab6a754b4f60d09057d335b1b1 --- libs/renderengine/include/renderengine/RenderEngine.h | 13 +++++++++---- libs/renderengine/skia/SkiaRenderEngine.cpp | 15 ++++++++++++--- libs/renderengine/skia/SkiaRenderEngine.h | 6 +++--- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h index d1bbcc55a9..f805be5ecf 100644 --- a/libs/renderengine/include/renderengine/RenderEngine.h +++ b/libs/renderengine/include/renderengine/RenderEngine.h @@ -48,6 +48,11 @@ */ #define PROPERTY_DEBUG_RENDERENGINE_CAPTURE_FILENAME "debug.renderengine.capture_filename" +/** + * Allows recording of Skia drawing commands with systrace. + */ +#define PROPERTY_SKIA_ATRACE_ENABLED "debug.renderengine.skia_atrace_enabled" + struct ANativeWindowBuffer; namespace android { @@ -94,10 +99,6 @@ public: static std::unique_ptr create(const RenderEngineCreationArgs& args); - RenderEngine() : RenderEngine(RenderEngineType::GLES) {} - - RenderEngine(RenderEngineType type) : mRenderEngineType(type) {} - virtual ~RenderEngine() = 0; // ----- BEGIN DEPRECATED INTERFACE ----- @@ -204,6 +205,10 @@ public: static void validateOutputBufferUsage(const sp&); protected: + RenderEngine() : RenderEngine(RenderEngineType::GLES) {} + + RenderEngine(RenderEngineType type) : mRenderEngineType(type) {} + // Maps GPU resources for this buffer. // Note that work may be deferred to an additional thread, i.e. this call // is made asynchronously, but the caller can expect that map/unmap calls diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp index 81f0b6f970..29175a227e 100644 --- a/libs/renderengine/skia/SkiaRenderEngine.cpp +++ b/libs/renderengine/skia/SkiaRenderEngine.cpp @@ -14,13 +14,22 @@ * limitations under the License. */ -//#define LOG_NDEBUG 0 #undef LOG_TAG #define LOG_TAG "RenderEngine" #define ATRACE_TAG ATRACE_TAG_GRAPHICS +#include "SkiaRenderEngine.h" + +#include +#include + namespace android { namespace renderengine { -namespace skia {} // namespace skia +namespace skia { +SkiaRenderEngine::SkiaRenderEngine(RenderEngineType type) : RenderEngine(type) { + SkAndroidFrameworkTraceUtil::setEnableTracing( + base::GetBoolProperty(PROPERTY_SKIA_ATRACE_ENABLED, false)); +} +} // namespace skia } // namespace renderengine -} // namespace android \ No newline at end of file +} // namespace android diff --git a/libs/renderengine/skia/SkiaRenderEngine.h b/libs/renderengine/skia/SkiaRenderEngine.h index 308c5ffa9f..7bb6d6dec5 100644 --- a/libs/renderengine/skia/SkiaRenderEngine.h +++ b/libs/renderengine/skia/SkiaRenderEngine.h @@ -36,7 +36,7 @@ class BlurFilter; class SkiaRenderEngine : public RenderEngine { public: static std::unique_ptr create(const RenderEngineCreationArgs& args); - SkiaRenderEngine(RenderEngineType type) : RenderEngine(type) {} + SkiaRenderEngine(RenderEngineType type); ~SkiaRenderEngine() override {} virtual void primeCache() override{}; @@ -60,8 +60,8 @@ public: protected: virtual void mapExternalTextureBuffer(const sp& /*buffer*/, - bool /*isRenderable*/) override; - virtual void unmapExternalTextureBuffer(const sp& /*buffer*/) override; + bool /*isRenderable*/) override = 0; + virtual void unmapExternalTextureBuffer(const sp& /*buffer*/) override = 0; }; } // namespace skia -- cgit v1.2.3-59-g8ed1b