Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Unified Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 1895873006: compositor-worker: Initialize CW machinery plumbing to compositor and fire CW rAF callbacks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bring up oilpan support during compositor worker creation and oilpan the compositor mutator and pro… Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/web/WebViewImpl.cpp
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index 358c045533e74111a3bb3a10c57126db939e78cf..f9de83406b7f66453a2f5973a7bf2de182e5c71d 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -33,6 +33,7 @@
#include "core/CSSValueKeywords.h"
#include "core/HTMLNames.h"
#include "core/InputTypeNames.h"
+#include "core/animation/CustomCompositorAnimationManager.h"
#include "core/clipboard/DataObject.h"
#include "core/dom/Document.h"
#include "core/dom/Fullscreen.h"
@@ -107,12 +108,15 @@
#include "platform/PlatformKeyboardEvent.h"
#include "platform/PlatformMouseEvent.h"
#include "platform/RuntimeEnabledFeatures.h"
+#include "platform/ThreadSafeFunctional.h"
#include "platform/TraceEvent.h"
#include "platform/UserGestureIndicator.h"
+#include "platform/WaitableEvent.h"
#include "platform/exported/WebActiveGestureAnimation.h"
#include "platform/fonts/FontCache.h"
#include "platform/graphics/Color.h"
#include "platform/graphics/CompositorFactory.h"
+#include "platform/graphics/CompositorMutatorClient.h"
#include "platform/graphics/FirstPaintInvalidationTracking.h"
#include "platform/graphics/GraphicsContext.h"
#include "platform/graphics/Image.h"
@@ -152,6 +156,8 @@
#include "public/web/WebViewClient.h"
#include "public/web/WebWindowFeatures.h"
#include "web/CompositionUnderlineVectorBuilder.h"
+#include "web/CompositorMutatorImpl.h"
+#include "web/CompositorProxyClientImpl.h"
#include "web/ContextFeaturesClientImpl.h"
#include "web/ContextMenuAllowedScope.h"
#include "web/DatabaseClientImpl.h"
@@ -443,6 +449,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client)
, m_shouldDispatchFirstLayoutAfterFinishedLoading(false)
, m_displayMode(WebDisplayModeBrowser)
, m_elasticOverscroll(FloatSize())
+ , m_mutator(nullptr)
, m_scheduler(adoptPtr(Platform::current()->currentThread()->scheduler()->createWebViewScheduler(this).release()))
{
Page::PageClients pageClients;
@@ -4545,6 +4552,34 @@ void WebViewImpl::forceNextDrawingBufferCreationToFail()
DrawingBuffer::forceNextDrawingBufferCreationToFail();
}
+void createCompositoMutatorClient(CompositorMutatorClient** ptr, WaitableEvent* doneEvent)
jbroman 2016/04/29 19:42:23 nit/spelling: "createCompositorMutatorClient" Als
flackr 2016/05/03 22:24:55 Done.
+{
+ CompositorMutatorImpl* mutator = CompositorMutatorImpl::create();
+ *ptr = new CompositorMutatorClient(mutator, mutator->animationManager());
+ mutator->setClient(*ptr);
+ doneEvent->signal();
+}
+
+CompositorProxyClient* WebViewImpl::createCompositorProxyClient(double referenceMonotonicTime)
+{
+ if (!m_mutator) {
+ std::unique_ptr<CompositorMutatorClient> mutatorClient;
+ CompositorMutatorClient* client;
+ OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
jbroman 2016/04/29 19:42:22 No need for an extra layer of heap allocation here
flackr 2016/05/03 22:24:55 Done, or should i say doneEvent.signal();
+ WebThread* compositorThread = Platform::current()->compositorThread();
+ if (compositorThread) {
jbroman 2016/04/29 19:42:22 super-nit: you can combine these two lines: if (W
flackr 2016/05/03 22:24:55 Done.
+ compositorThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&createCompositoMutatorClient, AllowCrossThreadAccess(&client), AllowCrossThreadAccess(doneEvent.get())));
+ } else {
+ createCompositoMutatorClient(&client, doneEvent.get());
+ }
+ doneEvent->wait();
jbroman 2016/04/29 19:42:22 I'm not thrilled about blocking between threads, b
flackr 2016/05/03 22:24:55 Agreed, but we also need to make sure we only crea
jbroman 2016/05/04 17:59:00 Yeah, I'm happy with that resolution.
+ mutatorClient.reset(client);
+ m_mutator = static_cast<CompositorMutatorImpl*>(mutatorClient->mutator());
+ m_layerTreeView->setMutatorClient(std::move(mutatorClient));
+ }
+ return new CompositorProxyClientImpl(m_mutator, referenceMonotonicTime);
+}
+
void WebViewImpl::updatePageOverlays()
{
if (m_pageColorOverlay)

Powered by Google App Engine
This is Rietveld 408576698