diff options
author | Jiyong Park <jiyong@google.com> | 2018-08-02 17:02:45 +0900 |
---|---|---|
committer | Jiyong Park <jiyong@google.com> | 2018-08-02 18:07:54 +0900 |
commit | 1581c348fc5d6cbf1673b3dbc5960637f891d488 (patch) | |
tree | 31e9444210520c28f42b9445fbc53daf68e5a0be /libs/hwui/renderthread/EglManager.cpp | |
parent | 7a01a307753309f198eacbb8a36e15428b38bbe7 (diff) | |
parent | decdaee091799aced8169d45632c923e2605214e (diff) |
Merge QPR1.180718.001
Conflicts:
core/java/android/provider/Settings.java
core/jni/android_view_InputEventReceiver.cpp
core/res/res/values/config.xml
core/res/res/values/symbols.xml
media/jni/Android.bp
packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml
packages/SystemUI/res/values/config.xml
packages/SystemUI/src/com/android/keyguard/KeyguardConstants.java
packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
services/core/java/com/android/server/ConnectivityService.java
services/core/java/com/android/server/NetworkTimeUpdateService.java
services/core/java/com/android/server/StorageManagerService.java
services/core/java/com/android/server/Watchdog.java
services/core/java/com/android/server/am/ActiveServices.java
services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/am/ActivityStack.java
services/core/java/com/android/server/am/AppTaskImpl.java
services/core/java/com/android/server/audio/AudioService.java
services/core/java/com/android/server/wm/DisplayContent.java
services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
telephony/java/android/telephony/CarrierConfigManager.java
telephony/java/android/telephony/ims/ImsReasonInfo.java
telephony/java/android/telephony/ims/feature/MmTelFeature.java
telephony/java/com/android/internal/telephony/ISmsBaseImpl.java
Change-Id: I3f98340699f9e31be03eaf23fdea70803c4cef42
Diffstat (limited to 'libs/hwui/renderthread/EglManager.cpp')
-rw-r--r-- | libs/hwui/renderthread/EglManager.cpp | 63 |
1 files changed, 21 insertions, 42 deletions
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp index 6e239e357cf6..cd21822df5b1 100644 --- a/libs/hwui/renderthread/EglManager.cpp +++ b/libs/hwui/renderthread/EglManager.cpp @@ -16,27 +16,19 @@ #include "EglManager.h" -#include <string> - #include <cutils/properties.h> #include <log/log.h> +#include <utils/Trace.h> #include "utils/StringUtils.h" -#include "Caches.h" #include "DeviceInfo.h" #include "Frame.h" #include "Properties.h" -#include "RenderThread.h" -#include "Texture.h" -#include "renderstate/RenderState.h" #include <EGL/eglext.h> -#include <GrContextOptions.h> -#include <gl/GrGLInterface.h> -#ifdef HWUI_GLES_WRAP_ENABLED -#include "debug/GlesDriver.h" -#endif +#include <string> +#include <vector> #define GLES_VERSION 2 @@ -83,17 +75,21 @@ static struct { bool glColorSpace = false; bool scRGB = false; bool contextPriority = false; + bool surfacelessContext = false; } EglExtensions; -EglManager::EglManager(RenderThread& thread) - : mRenderThread(thread) - , mEglDisplay(EGL_NO_DISPLAY) +EglManager::EglManager() + : mEglDisplay(EGL_NO_DISPLAY) , mEglConfig(nullptr) , mEglConfigWideGamut(nullptr) , mEglContext(EGL_NO_CONTEXT) , mPBufferSurface(EGL_NO_SURFACE) , mCurrentSurface(EGL_NO_SURFACE) {} +EglManager::~EglManager() { + destroy(); +} + void EglManager::initialize() { if (hasEglContext()) return; @@ -126,26 +122,8 @@ void EglManager::initialize() { loadConfigs(); createContext(); createPBufferSurface(); - makeCurrent(mPBufferSurface); + makeCurrent(mPBufferSurface, nullptr, /* force */ true); DeviceInfo::initialize(); - mRenderThread.renderState().onGLContextCreated(); - - if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) { -#ifdef HWUI_GLES_WRAP_ENABLED - debug::GlesDriver* driver = debug::GlesDriver::get(); - sk_sp<const GrGLInterface> glInterface(driver->getSkiaInterface()); -#else - sk_sp<const GrGLInterface> glInterface(GrGLCreateNativeInterface()); -#endif - LOG_ALWAYS_FATAL_IF(!glInterface.get()); - - GrContextOptions options; - options.fDisableDistanceFieldPaths = true; - mRenderThread.cacheManager().configureContext(&options); - sk_sp<GrContext> grContext(GrContext::MakeGL(std::move(glInterface), options)); - LOG_ALWAYS_FATAL_IF(!grContext.get()); - mRenderThread.setGrContext(grContext); - } } void EglManager::initExtensions() { @@ -170,6 +148,7 @@ void EglManager::initExtensions() { EglExtensions.scRGB = extensions.has("EGL_EXT_gl_colorspace_scrgb"); #endif EglExtensions.contextPriority = extensions.has("EGL_IMG_context_priority"); + EglExtensions.surfacelessContext = extensions.has("EGL_KHR_surfaceless_context"); } bool EglManager::hasEglContext() { @@ -195,7 +174,7 @@ void EglManager::loadConfigs() { EGL_CONFIG_CAVEAT, EGL_NONE, EGL_STENCIL_SIZE, - Stencil::getStencilSize(), + STENCIL_BUFFER_SIZE, EGL_SURFACE_TYPE, EGL_WINDOW_BIT | swapBehavior, EGL_NONE}; @@ -232,7 +211,7 @@ void EglManager::loadConfigs() { EGL_DEPTH_SIZE, 0, EGL_STENCIL_SIZE, - Stencil::getStencilSize(), + STENCIL_BUFFER_SIZE, EGL_SURFACE_TYPE, EGL_WINDOW_BIT | swapBehavior, EGL_NONE}; @@ -269,14 +248,14 @@ void EglManager::createPBufferSurface() { LOG_ALWAYS_FATAL_IF(mEglDisplay == EGL_NO_DISPLAY, "usePBufferSurface() called on uninitialized GlobalContext!"); - if (mPBufferSurface == EGL_NO_SURFACE) { + if (mPBufferSurface == EGL_NO_SURFACE && !EglExtensions.surfacelessContext) { EGLint attribs[] = {EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE}; mPBufferSurface = eglCreatePbufferSurface(mEglDisplay, mEglConfig, attribs); } } EGLSurface EglManager::createSurface(EGLNativeWindowType window, bool wideColorGamut) { - initialize(); + LOG_ALWAYS_FATAL_IF(!hasEglContext(), "Not initialized"); wideColorGamut = wideColorGamut && EglExtensions.glColorSpace && EglExtensions.scRGB && EglExtensions.pixelFormatFloat && EglExtensions.noConfigContext; @@ -350,10 +329,10 @@ 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); + if (mPBufferSurface != EGL_NO_SURFACE) { + eglDestroySurface(mEglDisplay, mPBufferSurface); + } eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglTerminate(mEglDisplay); eglReleaseThread(); @@ -364,8 +343,8 @@ void EglManager::destroy() { mCurrentSurface = EGL_NO_SURFACE; } -bool EglManager::makeCurrent(EGLSurface surface, EGLint* errOut) { - if (isCurrent(surface)) return false; +bool EglManager::makeCurrent(EGLSurface surface, EGLint* errOut, bool force) { + if (!force && isCurrent(surface)) return false; if (surface == EGL_NO_SURFACE) { // Ensure we always have a valid surface & context |