From dfec8f5f9665e4088900cd76f656f480a10ed464 Mon Sep 17 00:00:00 2001 From: Ana Krulec Date: Wed, 13 Jan 2021 12:51:47 -0800 Subject: Caching images and textures for threaded Skia RE Skia also performs texture generation and deletion when we create an image. This needs to happen on the same thread. Running Skia on it's own thread, will allow async caching of images, and hopefully increasing the start up/transition of application. Screenshot of the parallel caching: https://screenshot.googleplex.com/BUnne3urcoavykk Test results for DisplayOrientationMicrobench test for SFSTATS_GLOBAL_RENDER_ENGINE_DURATION_AVG metric: skiathreaded 1st run: 5.750296 ms skia threaded 2nd run: 5.530306 ms gles: 4.974821 ms skia: 6.374791 ms Test: Set renderengine backend to 'skiathreaded'. - run libsurfaceflinger_test, SurfaceFlinger_test - open apps - switch between apps Bug: 175312877 Change-Id: I6521f9ddfadff8c839bdd7071c2bd6cfadebb663 --- libs/renderengine/RenderEngine.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'libs/renderengine/RenderEngine.cpp') diff --git a/libs/renderengine/RenderEngine.cpp b/libs/renderengine/RenderEngine.cpp index 45db31c026..b2ad22d687 100644 --- a/libs/renderengine/RenderEngine.cpp +++ b/libs/renderengine/RenderEngine.cpp @@ -51,11 +51,28 @@ std::unique_ptr RenderEngine::create(const RenderEngineCreationArg return renderengine::threaded::RenderEngineThreaded::create( [args]() { return android::renderengine::gl::GLESRenderEngine::create(args); }); case RenderEngineType::SKIA_GL: + ALOGD("RenderEngine with SkiaGL Backend"); return renderengine::skia::SkiaGLRenderEngine::create(args); - case RenderEngineType::SKIA_GL_THREADED: - return renderengine::threaded::RenderEngineThreaded::create([args]() { - return android::renderengine::skia::SkiaGLRenderEngine::create(args); + case RenderEngineType::SKIA_GL_THREADED: { + // These need to be recreated, since they are a constant reference, and we need to + // let SkiaRE know that it's running as threaded, and all GL operation will happen on + // the same thread. + RenderEngineCreationArgs skiaArgs = + RenderEngineCreationArgs::Builder() + .setPixelFormat(args.pixelFormat) + .setImageCacheSize(args.imageCacheSize) + .setUseColorManagerment(args.useColorManagement) + .setEnableProtectedContext(args.enableProtectedContext) + .setPrecacheToneMapperShaderOnly(args.precacheToneMapperShaderOnly) + .setSupportsBackgroundBlur(args.supportsBackgroundBlur) + .setContextPriority(args.contextPriority) + .setRenderEngineType(RenderEngineType::SKIA_GL_THREADED) + .build(); + ALOGD("Threaded RenderEngine with SkiaGL Backend"); + return renderengine::threaded::RenderEngineThreaded::create([skiaArgs]() { + return android::renderengine::skia::SkiaGLRenderEngine::create(skiaArgs); }); + } case RenderEngineType::GLES: default: ALOGD("RenderEngine with GLES Backend"); -- cgit v1.2.3-59-g8ed1b