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

Commit 98f75d53 authored by Derek Sollenberger's avatar Derek Sollenberger
Browse files

Store GrContext on RenderThread for use by Skia-based renderers.

Test: built and booted on device
Change-Id: I4c1060ec72bc67e54e6b2d25b1f2c13aaa513f89
parent 81769558
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ public:
     * If Properties::isSkiaEnabled() is true then this will return the Skia
     * grContext associated with the current RenderPipeline.
     */
    GrContext* getGrContext() const { return mRenderPipeline->getGrContext(); }
    GrContext* getGrContext() const { return mRenderThread.getGrContext(); }

    // Won't take effect until next EGLSurface creation
    void setSwapBehavior(SwapBehavior swapBehavior);
+14 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#include <cutils/log.h>
#include <cutils/properties.h>
#include <EGL/eglext.h>
#include <GrContextOptions.h>
#include <gl/GrGLInterface.h>
#include <string>

#define GLES_VERSION 2
@@ -126,6 +128,17 @@ void EglManager::initialize() {
    makeCurrent(mPBufferSurface);
    DeviceInfo::initialize();
    mRenderThread.renderState().onGLContextCreated();

    if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) {
        sk_sp<const GrGLInterface> glInterface(GrGLCreateNativeInterface());
        LOG_ALWAYS_FATAL_IF(!glInterface.get());

        GrContextOptions options;
        options.fDisableDistanceFieldPaths = true;
        options.fAllowPathMaskCaching = true;
        mRenderThread.setGrContext(GrContext::Create(GrBackend::kOpenGL_GrBackend,
                (GrBackendContext)glInterface.get(), options));
    }
}

void EglManager::initExtensions() {
@@ -235,6 +248,7 @@ void EglManager::destroySurface(EGLSurface surface) {
void EglManager::destroy() {
    if (mEglDisplay == EGL_NO_DISPLAY) return;

    mRenderThread.setGrContext(nullptr);
    mRenderThread.renderState().onGLContextDestroyed();
    eglDestroyContext(mEglDisplay, mEglContext);
    eglDestroySurface(mEglDisplay, mPBufferSurface);
+0 −1
Original line number Diff line number Diff line
@@ -73,7 +73,6 @@ public:
    virtual TaskManager* getTaskManager() = 0;
    virtual bool createOrUpdateLayer(RenderNode* node,
            const DamageAccumulator& damageAccumulator) = 0;
    virtual GrContext* getGrContext() = 0;

    virtual ~IRenderPipeline() {}
};
+0 −1
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ public:
    bool createOrUpdateLayer(RenderNode* node,
            const DamageAccumulator& damageAccumulator) override;
    static void destroyLayer(RenderNode* node);
    GrContext* getGrContext() override { return nullptr; }

private:
    EglManager& mEglManager;
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "../JankTracker.h"
#include "TimeLord.h"

#include <GrContext.h>
#include <cutils/compiler.h>
#include <ui/DisplayInfo.h>
#include <utils/Looper.h>
@@ -94,6 +95,9 @@ public:

    const DisplayInfo& mainDisplayInfo() { return mDisplayInfo; }

    GrContext* getGrContext() const { return mGrContext.get(); }
    void setGrContext(GrContext* cxt) { mGrContext.reset(cxt); }

protected:
    virtual bool threadLoop() override;

@@ -144,6 +148,8 @@ private:
    EglManager* mEglManager;

    JankTracker* mJankTracker = nullptr;

    sk_sp<GrContext> mGrContext;
};

} /* namespace renderthread */