diff options
author | Scott Lobdell <slobdell@google.com> | 2019-01-31 11:53:41 -0800 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2019-02-01 14:08:42 -0800 |
commit | 88b45c586d461df38b866d529bc98d1dfa3e8838 (patch) | |
tree | ae57a86275dac94c0899015923778f3016c865b2 /libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp | |
parent | 067596650927fa91a97355e84b152b21826f7ae2 (diff) | |
parent | 9b9ca46fc2d3da231bf9ef6ff630105720f94cf2 (diff) |
Merge QP1A.190122.001
Conflicts:
api/system-current.txt
core/java/android/bluetooth/BluetoothAdapter.java
core/jni/android_util_Process.cpp
core/jni/com_android_internal_os_Zygote.cpp
core/res/res/values/config.xml
core/res/res/values/symbols.xml
media/java/android/media/MediaCodecInfo.java
packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
services/core/java/com/android/server/ConnectivityService.java
services/core/java/com/android/server/LocationManagerService.java
services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
services/core/java/com/android/server/location/GnssLocationProvider.java
services/core/java/com/android/server/wm/ActivityStack.java
services/net/java/android/net/ip/IpClient.java
telecomm/java/android/telecom/Connection.java
telephony/java/android/telephony/ims/ImsCallSession.java
telephony/java/android/telephony/ims/ImsCallSessionListener.java
telephony/java/android/telephony/ims/aidl/IImsCallSessionListener.aidl
telephony/java/android/telephony/ims/compat/stub/ImsCallSessionImplBase.java
telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
wifi/java/android/net/wifi/WifiConfiguration.java
Change-Id: I367301986f2ae80a528050c3d78776b5a4c6b5ee
Diffstat (limited to 'libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp index a5faae7d5068..c3563dbfd3cd 100644 --- a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp +++ b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp @@ -36,8 +36,6 @@ namespace android { namespace uirenderer { namespace skiapipeline { -static std::mutex sLock{}; -static ThreadBase* sGLDrawThread = nullptr; static renderthread::EglManager sEglManager; // ScopedDrawRequest makes sure a GL thread is started and EGL context is initialized on it. @@ -47,32 +45,20 @@ public: private: void beginDraw() { - std::lock_guard _lock{sLock}; - - if (!sGLDrawThread) { - sGLDrawThread = new ThreadBase{}; - } - - if (!sGLDrawThread->isRunning()) { - sGLDrawThread->start("GLFunctorThread"); - } - if (!sEglManager.hasEglContext()) { - sGLDrawThread->queue().runSync([]() { sEglManager.initialize(); }); + sEglManager.initialize(); } } }; void VkInteropFunctorDrawable::vkInvokeFunctor(Functor* functor) { ScopedDrawRequest _drawRequest{}; - sGLDrawThread->queue().runSync([&]() { - EGLDisplay display = sEglManager.eglDisplay(); - DrawGlInfo::Mode mode = DrawGlInfo::kModeProcessNoContext; - if (display != EGL_NO_DISPLAY) { - mode = DrawGlInfo::kModeProcess; - } - (*functor)(mode, nullptr); - }); + EGLDisplay display = sEglManager.eglDisplay(); + DrawGlInfo::Mode mode = DrawGlInfo::kModeProcessNoContext; + if (display != EGL_NO_DISPLAY) { + mode = DrawGlInfo::kModeProcess; + } + (*functor)(mode, nullptr); } #define FENCE_TIMEOUT 2000000000 @@ -113,7 +99,7 @@ void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) { // TODO: draw command has completed. // TODO: A simple but inefficient way is to flush and issue a QueueWaitIdle call. See // TODO: GrVkGpu::destroyResources() for example. - bool success = sGLDrawThread->queue().runSync([&]() -> bool { + { ATRACE_FORMAT("WebViewDraw_%dx%d", mFBInfo.width(), mFBInfo.height()); EGLDisplay display = sEglManager.eglDisplay(); LOG_ALWAYS_FATAL_IF(display == EGL_NO_DISPLAY, "Failed to get EGL_DEFAULT_DISPLAY! err=%s", @@ -125,7 +111,7 @@ void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) { if (autoImage.image == EGL_NO_IMAGE_KHR) { ALOGW("Could not create EGL image, err =%s", uirenderer::renderthread::EglManager::eglErrorString()); - return false; + return; } AutoSkiaGlTexture glTexture; @@ -156,7 +142,7 @@ void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) { if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { ALOGE("Failed framebuffer check for created target buffer: %s", GLUtils::getGLFramebufferError()); - return false; + return; } glDisable(GL_STENCIL_TEST); @@ -183,11 +169,6 @@ void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) { LOG_ALWAYS_FATAL_IF(waitStatus != EGL_CONDITION_SATISFIED_KHR, "Failed to wait for the fence %#x", eglGetError()); eglDestroySyncKHR(display, glDrawFinishedFence); - return true; - }); - - if (!success) { - return; } SkPaint paint; @@ -208,15 +189,14 @@ VkInteropFunctorDrawable::~VkInteropFunctorDrawable() { if (auto lp = std::get_if<LegacyFunctor>(&mAnyFunctor)) { if (lp->listener) { ScopedDrawRequest _drawRequest{}; - sGLDrawThread->queue().runSync( - [&]() { lp->listener->onGlFunctorReleased(lp->functor); }); + lp->listener->onGlFunctorReleased(lp->functor); } } } void VkInteropFunctorDrawable::syncFunctor(const WebViewSyncData& data) const { ScopedDrawRequest _drawRequest{}; - sGLDrawThread->queue().runSync([&]() { FunctorDrawable::syncFunctor(data); }); + FunctorDrawable::syncFunctor(data); } } // namespace skiapipeline |