Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ee9c2d7 authored by Alec Mouri's avatar Alec Mouri
Browse files

Don't crash skiagl backend.

The skiagl backend was incorrectly being created as skiaglthreaded,
which breaks mapping ExternalTextures off-thread. Specifically, there is
a workaround that disables mapping ExternalTextures at all when the
skiagl backend is used. Don't break that workaround by propagating the
renderengine type properly to implementations.

Bug: 205591213
Bug: 196334700
Bug: 193212592
Test: `adb shell stop; adb shell setprop debug.renderengine.backend
skiagl; adb shell start` boots

Change-Id: I455d5d613ccaa210dc748969e025dc86c78080b8
parent c9963a2d
Loading
Loading
Loading
Loading
+10 −26
Original line number Diff line number Diff line
@@ -26,55 +26,39 @@
namespace android {
namespace renderengine {

std::unique_ptr<RenderEngine> RenderEngine::create(const RenderEngineCreationArgs& args) {
    RenderEngineType renderEngineType = args.renderEngineType;

std::unique_ptr<RenderEngine> RenderEngine::create(RenderEngineCreationArgs args) {
    // Keep the ability to override by PROPERTIES:
    char prop[PROPERTY_VALUE_MAX];
    property_get(PROPERTY_DEBUG_RENDERENGINE_BACKEND, prop, "");
    if (strcmp(prop, "gles") == 0) {
        renderEngineType = RenderEngineType::GLES;
        args.renderEngineType = RenderEngineType::GLES;
    }
    if (strcmp(prop, "threaded") == 0) {
        renderEngineType = RenderEngineType::THREADED;
        args.renderEngineType = RenderEngineType::THREADED;
    }
    if (strcmp(prop, "skiagl") == 0) {
        renderEngineType = RenderEngineType::SKIA_GL;
        args.renderEngineType = RenderEngineType::SKIA_GL;
    }
    if (strcmp(prop, "skiaglthreaded") == 0) {
        renderEngineType = RenderEngineType::SKIA_GL_THREADED;
        args.renderEngineType = RenderEngineType::SKIA_GL_THREADED;
    }

    switch (renderEngineType) {
    switch (args.renderEngineType) {
        case RenderEngineType::THREADED:
            ALOGD("Threaded RenderEngine with GLES Backend");
            return renderengine::threaded::RenderEngineThreaded::create(
                    [args]() { return android::renderengine::gl::GLESRenderEngine::create(args); },
                    renderEngineType);
                    args.renderEngineType);
        case RenderEngineType::SKIA_GL:
            ALOGD("RenderEngine with SkiaGL Backend");
            return 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)
                            .build();
            ALOGD("Threaded RenderEngine with SkiaGL Backend");
            return renderengine::threaded::RenderEngineThreaded::create(
                    [skiaArgs]() {
                        return android::renderengine::skia::SkiaGLRenderEngine::create(skiaArgs);
                    [args]() {
                        return android::renderengine::skia::SkiaGLRenderEngine::create(args);
                    },
                    renderEngineType);
                    args.renderEngineType);
        }
        case RenderEngineType::GLES:
        default:
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public:
        SKIA_GL_THREADED = 4,
    };

    static std::unique_ptr<RenderEngine> create(const RenderEngineCreationArgs& args);
    static std::unique_ptr<RenderEngine> create(RenderEngineCreationArgs args);

    virtual ~RenderEngine() = 0;