diff options
| author | 2019-01-03 19:15:24 +0000 | |
|---|---|---|
| committer | 2019-01-03 19:15:24 +0000 | |
| commit | 8319a7ee7fbd824b413c7dafa758ddb66d97733c (patch) | |
| tree | a5ac962e94a5bfc54bc146d7c4362211025f82a9 /libs/hwui | |
| parent | c54ffd28f7efa82054ebc4443c7c6a396e07ddd6 (diff) | |
| parent | d6668e7c0c59c0cf91bfb4d0491c526cd1d5e439 (diff) | |
Merge "Plumb new functor in native/webview"
Diffstat (limited to 'libs/hwui')
| -rw-r--r-- | libs/hwui/WebViewFunctorManager.cpp | 23 | ||||
| -rw-r--r-- | libs/hwui/WebViewFunctorManager.h | 5 | ||||
| -rw-r--r-- | libs/hwui/private/hwui/WebViewFunctor.h | 15 | ||||
| -rw-r--r-- | libs/hwui/tests/common/TestUtils.h | 8 | ||||
| -rw-r--r-- | libs/hwui/tests/unit/SkiaDisplayListTests.cpp | 4 | ||||
| -rw-r--r-- | libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp | 18 |
6 files changed, 39 insertions, 34 deletions
diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp index 20e77b453706..5b7ae70e821c 100644 --- a/libs/hwui/WebViewFunctorManager.cpp +++ b/libs/hwui/WebViewFunctorManager.cpp @@ -37,7 +37,8 @@ RenderMode WebViewFunctor_queryPlatformRenderMode() { } } -int WebViewFunctor_create(const WebViewFunctorCallbacks& prototype, RenderMode functorMode) { +int WebViewFunctor_create(void* data, const WebViewFunctorCallbacks& prototype, + RenderMode functorMode) { if (functorMode != RenderMode::OpenGL_ES && functorMode != RenderMode::Vulkan) { ALOGW("Unknown rendermode %d", (int)functorMode); return -1; @@ -47,7 +48,7 @@ int WebViewFunctor_create(const WebViewFunctorCallbacks& prototype, RenderMode f ALOGW("Unable to map from GLES platform to a vulkan functor"); return -1; } - return WebViewFunctorManager::instance().createFunctor(prototype, functorMode); + return WebViewFunctorManager::instance().createFunctor(data, prototype, functorMode); } void WebViewFunctor_release(int functor) { @@ -56,7 +57,9 @@ void WebViewFunctor_release(int functor) { static std::atomic_int sNextId{1}; -WebViewFunctor::WebViewFunctor(const WebViewFunctorCallbacks& callbacks, RenderMode functorMode) { +WebViewFunctor::WebViewFunctor(void* data, const WebViewFunctorCallbacks& callbacks, + RenderMode functorMode) + : mData(data) { mFunctor = sNextId++; mCallbacks = callbacks; mMode = functorMode; @@ -66,12 +69,12 @@ WebViewFunctor::~WebViewFunctor() { destroyContext(); ATRACE_NAME("WebViewFunctor::onDestroy"); - mCallbacks.onDestroyed(mFunctor); + mCallbacks.onDestroyed(mFunctor, mData); } void WebViewFunctor::sync(const WebViewSyncData& syncData) const { ATRACE_NAME("WebViewFunctor::sync"); - mCallbacks.onSync(mFunctor, syncData); + mCallbacks.onSync(mFunctor, mData, syncData); } void WebViewFunctor::drawGl(const DrawGlInfo& drawInfo) { @@ -79,14 +82,14 @@ void WebViewFunctor::drawGl(const DrawGlInfo& drawInfo) { if (!mHasContext) { mHasContext = true; } - mCallbacks.gles.draw(mFunctor, drawInfo); + mCallbacks.gles.draw(mFunctor, mData, drawInfo); } void WebViewFunctor::destroyContext() { if (mHasContext) { mHasContext = false; ATRACE_NAME("WebViewFunctor::onContextDestroyed"); - mCallbacks.onContextDestroyed(mFunctor); + mCallbacks.onContextDestroyed(mFunctor, mData); } } @@ -95,9 +98,9 @@ WebViewFunctorManager& WebViewFunctorManager::instance() { return sInstance; } -int WebViewFunctorManager::createFunctor(const WebViewFunctorCallbacks& callbacks, +int WebViewFunctorManager::createFunctor(void* data, const WebViewFunctorCallbacks& callbacks, RenderMode functorMode) { - auto object = std::make_unique<WebViewFunctor>(callbacks, functorMode); + auto object = std::make_unique<WebViewFunctor>(data, callbacks, functorMode); int id = object->id(); auto handle = object->createHandle(); { @@ -164,4 +167,4 @@ sp<WebViewFunctor::Handle> WebViewFunctorManager::handleFor(int functor) { return nullptr; } -} // namespace android::uirenderer
\ No newline at end of file +} // namespace android::uirenderer diff --git a/libs/hwui/WebViewFunctorManager.h b/libs/hwui/WebViewFunctorManager.h index 2a621dd411e3..1719ce7cca75 100644 --- a/libs/hwui/WebViewFunctorManager.h +++ b/libs/hwui/WebViewFunctorManager.h @@ -29,7 +29,7 @@ class WebViewFunctorManager; class WebViewFunctor { public: - WebViewFunctor(const WebViewFunctorCallbacks& callbacks, RenderMode functorMode); + WebViewFunctor(void* data, const WebViewFunctorCallbacks& callbacks, RenderMode functorMode); ~WebViewFunctor(); class Handle : public LightRefBase<Handle> { @@ -63,6 +63,7 @@ public: private: WebViewFunctorCallbacks mCallbacks; + void* const mData; int mFunctor; RenderMode mMode; bool mHasContext = false; @@ -73,7 +74,7 @@ class WebViewFunctorManager { public: static WebViewFunctorManager& instance(); - int createFunctor(const WebViewFunctorCallbacks& callbacks, RenderMode functorMode); + int createFunctor(void* data, const WebViewFunctorCallbacks& callbacks, RenderMode functorMode); void releaseFunctor(int functor); void onContextDestroyed(); void destroyFunctor(int functor); diff --git a/libs/hwui/private/hwui/WebViewFunctor.h b/libs/hwui/private/hwui/WebViewFunctor.h index e5346aabaee3..da3d06a4d60c 100644 --- a/libs/hwui/private/hwui/WebViewFunctor.h +++ b/libs/hwui/private/hwui/WebViewFunctor.h @@ -17,6 +17,7 @@ #ifndef FRAMEWORKS_BASE_WEBVIEWFUNCTOR_H #define FRAMEWORKS_BASE_WEBVIEWFUNCTOR_H +#include <cutils/compiler.h> #include <private/hwui/DrawGlInfo.h> namespace android::uirenderer { @@ -27,7 +28,7 @@ enum class RenderMode { }; // Static for the lifetime of the process -RenderMode WebViewFunctor_queryPlatformRenderMode(); +ANDROID_API RenderMode WebViewFunctor_queryPlatformRenderMode(); struct WebViewSyncData { bool applyForceDark; @@ -35,21 +36,21 @@ struct WebViewSyncData { struct WebViewFunctorCallbacks { // kModeSync, called on RenderThread - void (*onSync)(int functor, const WebViewSyncData& syncData); + void (*onSync)(int functor, void* data, const WebViewSyncData& syncData); // Called when either the context is destroyed _or_ when the functor's last reference goes // away. Will always be called with an active context and always on renderthread. - void (*onContextDestroyed)(int functor); + void (*onContextDestroyed)(int functor, void* data); // Called when the last reference to the handle goes away and the handle is considered // irrevocably destroyed. Will always be proceeded by a call to onContextDestroyed if // this functor had ever been drawn. - void (*onDestroyed)(int functor); + void (*onDestroyed)(int functor, void* data); union { struct { // Called on RenderThread. initialize is guaranteed to happen before this call - void (*draw)(int functor, const DrawGlInfo& params); + void (*draw)(int functor, void* data, const DrawGlInfo& params); } gles; // TODO: VK support. The current DrawVkInfo is monolithic and needs to be split up for // what params are valid on what callbacks @@ -70,12 +71,12 @@ struct WebViewFunctorCallbacks { // Creates a new WebViewFunctor from the given prototype. The prototype is copied after // this function returns. Caller retains full ownership of it. // Returns -1 if the creation fails (such as an unsupported functorMode + platform mode combination) -int WebViewFunctor_create(const WebViewFunctorCallbacks& prototype, RenderMode functorMode); +ANDROID_API int WebViewFunctor_create(void* data, const WebViewFunctorCallbacks& prototype, RenderMode functorMode); // May be called on any thread to signal that the functor should be destroyed. // The functor will receive an onDestroyed when the last usage of it is released, // and it should be considered alive & active until that point. -void WebViewFunctor_release(int functor); +ANDROID_API void WebViewFunctor_release(int functor); } // namespace android::uirenderer diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h index 5ff8993e6779..6a1ca5a25361 100644 --- a/libs/hwui/tests/common/TestUtils.h +++ b/libs/hwui/tests/common/TestUtils.h @@ -315,24 +315,24 @@ public: static WebViewFunctorCallbacks createMockFunctor(RenderMode mode) { auto callbacks = WebViewFunctorCallbacks{ .onSync = - [](int functor, const WebViewSyncData& data) { + [](int functor, void* client_data, const WebViewSyncData& data) { expectOnRenderThread(); sMockFunctorCounts[functor].sync++; }, .onContextDestroyed = - [](int functor) { + [](int functor, void* client_data) { expectOnRenderThread(); sMockFunctorCounts[functor].contextDestroyed++; }, .onDestroyed = - [](int functor) { + [](int functor, void* client_data) { expectOnRenderThread(); sMockFunctorCounts[functor].destroyed++; }, }; switch (mode) { case RenderMode::OpenGL_ES: - callbacks.gles.draw = [](int functor, const DrawGlInfo& params) { + callbacks.gles.draw = [](int functor, void* client_data, const DrawGlInfo& params) { expectOnRenderThread(); sMockFunctorCounts[functor].glesDraw++; }; diff --git a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp index 53bf84f13fd6..1b4cf7e144bd 100644 --- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp +++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp @@ -100,8 +100,8 @@ TEST(SkiaDisplayList, syncContexts) { GLFunctorDrawable functorDrawable(&functor, nullptr, &dummyCanvas); skiaDL.mChildFunctors.push_back(&functorDrawable); - int functor2 = WebViewFunctor_create(TestUtils::createMockFunctor(RenderMode::OpenGL_ES), - RenderMode::OpenGL_ES); + int functor2 = WebViewFunctor_create( + nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES); auto& counts = TestUtils::countsForFunctor(functor2); skiaDL.mChildFunctors.push_back( skiaDL.allocateDrawable<GLFunctorDrawable>(functor2, &dummyCanvas)); diff --git a/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp b/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp index c8169aff1c5e..e1fb8b7069ff 100644 --- a/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp +++ b/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp @@ -27,8 +27,8 @@ using namespace android; using namespace android::uirenderer; TEST(WebViewFunctor, createDestroyGLES) { - int functor = WebViewFunctor_create(TestUtils::createMockFunctor(RenderMode::OpenGL_ES), - RenderMode::OpenGL_ES); + int functor = WebViewFunctor_create( + nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES); ASSERT_NE(-1, functor); WebViewFunctor_release(functor); TestUtils::runOnRenderThreadUnmanaged([](renderthread::RenderThread&) { @@ -41,8 +41,8 @@ TEST(WebViewFunctor, createDestroyGLES) { } TEST(WebViewFunctor, createSyncHandleGLES) { - int functor = WebViewFunctor_create(TestUtils::createMockFunctor(RenderMode::OpenGL_ES), - RenderMode::OpenGL_ES); + int functor = WebViewFunctor_create( + nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES); ASSERT_NE(-1, functor); auto handle = WebViewFunctorManager::instance().handleFor(functor); ASSERT_TRUE(handle); @@ -82,8 +82,8 @@ TEST(WebViewFunctor, createSyncHandleGLES) { } TEST(WebViewFunctor, createSyncDrawGLES) { - int functor = WebViewFunctor_create(TestUtils::createMockFunctor(RenderMode::OpenGL_ES), - RenderMode::OpenGL_ES); + int functor = WebViewFunctor_create( + nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES); ASSERT_NE(-1, functor); auto handle = WebViewFunctorManager::instance().handleFor(functor); ASSERT_TRUE(handle); @@ -109,8 +109,8 @@ TEST(WebViewFunctor, createSyncDrawGLES) { } TEST(WebViewFunctor, contextDestroyed) { - int functor = WebViewFunctor_create(TestUtils::createMockFunctor(RenderMode::OpenGL_ES), - RenderMode::OpenGL_ES); + int functor = WebViewFunctor_create( + nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES); ASSERT_NE(-1, functor); auto handle = WebViewFunctorManager::instance().handleFor(functor); ASSERT_TRUE(handle); @@ -151,4 +151,4 @@ TEST(WebViewFunctor, contextDestroyed) { EXPECT_EQ(2, counts.glesDraw); EXPECT_EQ(2, counts.contextDestroyed); EXPECT_EQ(1, counts.destroyed); -}
\ No newline at end of file +} |