Merge "Store GrContext on RenderThread for use by Skia-based renderers."
This commit is contained in:
committed by
Android (Google) Code Review
commit
be9a73063c
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -73,7 +73,6 @@ public:
|
||||
virtual TaskManager* getTaskManager() = 0;
|
||||
virtual bool createOrUpdateLayer(RenderNode* node,
|
||||
const DamageAccumulator& damageAccumulator) = 0;
|
||||
virtual GrContext* getGrContext() = 0;
|
||||
|
||||
virtual ~IRenderPipeline() {}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user