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

Side by Side 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: Add big fat TODOs in scheduler code to implement proper idle task scheduling and ensure GC is runni… Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 15 matching lines...) Expand all
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "web/WebViewImpl.h" 31 #include "web/WebViewImpl.h"
32 32
33 #include "core/CSSValueKeywords.h" 33 #include "core/CSSValueKeywords.h"
34 #include "core/HTMLNames.h" 34 #include "core/HTMLNames.h"
35 #include "core/InputTypeNames.h" 35 #include "core/InputTypeNames.h"
36 #include "core/animation/CustomCompositorAnimationManager.h"
36 #include "core/clipboard/DataObject.h" 37 #include "core/clipboard/DataObject.h"
37 #include "core/dom/Document.h" 38 #include "core/dom/Document.h"
38 #include "core/dom/Fullscreen.h" 39 #include "core/dom/Fullscreen.h"
39 #include "core/dom/LayoutTreeBuilderTraversal.h" 40 #include "core/dom/LayoutTreeBuilderTraversal.h"
40 #include "core/dom/Text.h" 41 #include "core/dom/Text.h"
41 #include "core/editing/EditingUtilities.h" 42 #include "core/editing/EditingUtilities.h"
42 #include "core/editing/Editor.h" 43 #include "core/editing/Editor.h"
43 #include "core/editing/FrameSelection.h" 44 #include "core/editing/FrameSelection.h"
44 #include "core/editing/InputMethodController.h" 45 #include "core/editing/InputMethodController.h"
45 #include "core/editing/iterators/TextIterator.h" 46 #include "core/editing/iterators/TextIterator.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 #include "platform/ContextMenu.h" 100 #include "platform/ContextMenu.h"
100 #include "platform/ContextMenuItem.h" 101 #include "platform/ContextMenuItem.h"
101 #include "platform/Cursor.h" 102 #include "platform/Cursor.h"
102 #include "platform/Histogram.h" 103 #include "platform/Histogram.h"
103 #include "platform/KeyboardCodes.h" 104 #include "platform/KeyboardCodes.h"
104 #include "platform/Logging.h" 105 #include "platform/Logging.h"
105 #include "platform/PlatformGestureEvent.h" 106 #include "platform/PlatformGestureEvent.h"
106 #include "platform/PlatformKeyboardEvent.h" 107 #include "platform/PlatformKeyboardEvent.h"
107 #include "platform/PlatformMouseEvent.h" 108 #include "platform/PlatformMouseEvent.h"
108 #include "platform/RuntimeEnabledFeatures.h" 109 #include "platform/RuntimeEnabledFeatures.h"
110 #include "platform/ThreadSafeFunctional.h"
109 #include "platform/TraceEvent.h" 111 #include "platform/TraceEvent.h"
110 #include "platform/UserGestureIndicator.h" 112 #include "platform/UserGestureIndicator.h"
113 #include "platform/WaitableEvent.h"
111 #include "platform/exported/WebActiveGestureAnimation.h" 114 #include "platform/exported/WebActiveGestureAnimation.h"
112 #include "platform/fonts/FontCache.h" 115 #include "platform/fonts/FontCache.h"
113 #include "platform/graphics/Color.h" 116 #include "platform/graphics/Color.h"
114 #include "platform/graphics/CompositorFactory.h" 117 #include "platform/graphics/CompositorFactory.h"
118 #include "platform/graphics/CompositorMutatorClient.h"
115 #include "platform/graphics/FirstPaintInvalidationTracking.h" 119 #include "platform/graphics/FirstPaintInvalidationTracking.h"
116 #include "platform/graphics/GraphicsContext.h" 120 #include "platform/graphics/GraphicsContext.h"
117 #include "platform/graphics/Image.h" 121 #include "platform/graphics/Image.h"
118 #include "platform/graphics/ImageBuffer.h" 122 #include "platform/graphics/ImageBuffer.h"
119 #include "platform/graphics/gpu/DrawingBuffer.h" 123 #include "platform/graphics/gpu/DrawingBuffer.h"
120 #include "platform/graphics/paint/DrawingRecorder.h" 124 #include "platform/graphics/paint/DrawingRecorder.h"
121 #include "platform/scroll/ScrollbarTheme.h" 125 #include "platform/scroll/ScrollbarTheme.h"
122 #include "platform/weborigin/SchemeRegistry.h" 126 #include "platform/weborigin/SchemeRegistry.h"
123 #include "public/platform/Platform.h" 127 #include "public/platform/Platform.h"
124 #include "public/platform/WebCompositeAndReadbackAsyncCallback.h" 128 #include "public/platform/WebCompositeAndReadbackAsyncCallback.h"
(...skipping 19 matching lines...) Expand all
144 #include "public/web/WebMediaPlayerAction.h" 148 #include "public/web/WebMediaPlayerAction.h"
145 #include "public/web/WebNode.h" 149 #include "public/web/WebNode.h"
146 #include "public/web/WebPlugin.h" 150 #include "public/web/WebPlugin.h"
147 #include "public/web/WebPluginAction.h" 151 #include "public/web/WebPluginAction.h"
148 #include "public/web/WebRange.h" 152 #include "public/web/WebRange.h"
149 #include "public/web/WebSelection.h" 153 #include "public/web/WebSelection.h"
150 #include "public/web/WebTextInputInfo.h" 154 #include "public/web/WebTextInputInfo.h"
151 #include "public/web/WebViewClient.h" 155 #include "public/web/WebViewClient.h"
152 #include "public/web/WebWindowFeatures.h" 156 #include "public/web/WebWindowFeatures.h"
153 #include "web/CompositionUnderlineVectorBuilder.h" 157 #include "web/CompositionUnderlineVectorBuilder.h"
158 #include "web/CompositorMutatorImpl.h"
159 #include "web/CompositorProxyClientImpl.h"
154 #include "web/ContextFeaturesClientImpl.h" 160 #include "web/ContextFeaturesClientImpl.h"
155 #include "web/ContextMenuAllowedScope.h" 161 #include "web/ContextMenuAllowedScope.h"
156 #include "web/DatabaseClientImpl.h" 162 #include "web/DatabaseClientImpl.h"
157 #include "web/DedicatedWorkerGlobalScopeProxyProviderImpl.h" 163 #include "web/DedicatedWorkerGlobalScopeProxyProviderImpl.h"
158 #include "web/DevToolsEmulator.h" 164 #include "web/DevToolsEmulator.h"
159 #include "web/FullscreenController.h" 165 #include "web/FullscreenController.h"
160 #include "web/InspectorOverlay.h" 166 #include "web/InspectorOverlay.h"
161 #include "web/LinkHighlightImpl.h" 167 #include "web/LinkHighlightImpl.h"
162 #include "web/PageOverlay.h" 168 #include "web/PageOverlay.h"
163 #include "web/PrerendererClientImpl.h" 169 #include "web/PrerendererClientImpl.h"
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 if (DrawingRecorder::useCachedDrawingIfPossible(graphicsContext, pageOve rlay, DisplayItem::PageOverlay)) 323 if (DrawingRecorder::useCachedDrawingIfPossible(graphicsContext, pageOve rlay, DisplayItem::PageOverlay))
318 return; 324 return;
319 FloatRect rect(0, 0, size.width, size.height); 325 FloatRect rect(0, 0, size.width, size.height);
320 DrawingRecorder drawingRecorder(graphicsContext, pageOverlay, DisplayIte m::PageOverlay, rect); 326 DrawingRecorder drawingRecorder(graphicsContext, pageOverlay, DisplayIte m::PageOverlay, rect);
321 graphicsContext.fillRect(rect, m_color); 327 graphicsContext.fillRect(rect, m_color);
322 } 328 }
323 329
324 WebColor m_color; 330 WebColor m_color;
325 }; 331 };
326 332
333 void createCompositorMutatorClient(std::unique_ptr<CompositorMutatorClient>* ptr , WaitableEvent* doneEvent)
334 {
335 CompositorMutatorImpl* mutator = CompositorMutatorImpl::create();
336 ptr->reset(new CompositorMutatorClient(mutator, mutator->animationManager()) );
337 mutator->setClient(ptr->get());
338 doneEvent->signal();
339 }
340
327 } // namespace 341 } // namespace
328 342
329 // WebView ---------------------------------------------------------------- 343 // WebView ----------------------------------------------------------------
330 344
331 WebView* WebView::create(WebViewClient* client) 345 WebView* WebView::create(WebViewClient* client)
332 { 346 {
333 // Pass the WebViewImpl's self-reference to the caller. 347 // Pass the WebViewImpl's self-reference to the caller.
334 return WebViewImpl::create(client); 348 return WebViewImpl::create(client);
335 } 349 }
336 350
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 , m_fullscreenController(FullscreenController::create(this)) 449 , m_fullscreenController(FullscreenController::create(this))
436 , m_baseBackgroundColor(Color::white) 450 , m_baseBackgroundColor(Color::white)
437 , m_backgroundColorOverride(Color::transparent) 451 , m_backgroundColorOverride(Color::transparent)
438 , m_zoomFactorOverride(0) 452 , m_zoomFactorOverride(0)
439 , m_userGestureObserved(false) 453 , m_userGestureObserved(false)
440 , m_shouldDispatchFirstVisuallyNonEmptyLayout(false) 454 , m_shouldDispatchFirstVisuallyNonEmptyLayout(false)
441 , m_shouldDispatchFirstLayoutAfterFinishedParsing(false) 455 , m_shouldDispatchFirstLayoutAfterFinishedParsing(false)
442 , m_shouldDispatchFirstLayoutAfterFinishedLoading(false) 456 , m_shouldDispatchFirstLayoutAfterFinishedLoading(false)
443 , m_displayMode(WebDisplayModeBrowser) 457 , m_displayMode(WebDisplayModeBrowser)
444 , m_elasticOverscroll(FloatSize()) 458 , m_elasticOverscroll(FloatSize())
459 , m_mutator(nullptr)
445 , m_scheduler(adoptPtr(Platform::current()->currentThread()->scheduler()->cr eateWebViewScheduler(this).release())) 460 , m_scheduler(adoptPtr(Platform::current()->currentThread()->scheduler()->cr eateWebViewScheduler(this).release()))
446 , m_lastFrameTimeMonotonic(0) 461 , m_lastFrameTimeMonotonic(0)
447 { 462 {
448 Page::PageClients pageClients; 463 Page::PageClients pageClients;
449 pageClients.chromeClient = m_chromeClientImpl.get(); 464 pageClients.chromeClient = m_chromeClientImpl.get();
450 pageClients.contextMenuClient = &m_contextMenuClientImpl; 465 pageClients.contextMenuClient = &m_contextMenuClientImpl;
451 pageClients.editorClient = &m_editorClientImpl; 466 pageClients.editorClient = &m_editorClientImpl;
452 pageClients.spellCheckerClient = &m_spellCheckerClientImpl; 467 pageClients.spellCheckerClient = &m_spellCheckerClientImpl;
453 468
454 m_page = Page::createOrdinary(pageClients); 469 m_page = Page::createOrdinary(pageClients);
(...skipping 4017 matching lines...) Expand 10 before | Expand all | Expand 10 after
4472 void WebViewImpl::forceNextWebGLContextCreationToFail() 4487 void WebViewImpl::forceNextWebGLContextCreationToFail()
4473 { 4488 {
4474 WebGLRenderingContext::forceNextWebGLContextCreationToFail(); 4489 WebGLRenderingContext::forceNextWebGLContextCreationToFail();
4475 } 4490 }
4476 4491
4477 void WebViewImpl::forceNextDrawingBufferCreationToFail() 4492 void WebViewImpl::forceNextDrawingBufferCreationToFail()
4478 { 4493 {
4479 DrawingBuffer::forceNextDrawingBufferCreationToFail(); 4494 DrawingBuffer::forceNextDrawingBufferCreationToFail();
4480 } 4495 }
4481 4496
4497 CompositorProxyClient* WebViewImpl::createCompositorProxyClient()
4498 {
4499 if (!m_mutator) {
4500 std::unique_ptr<CompositorMutatorClient> mutatorClient;
4501 WaitableEvent doneEvent;
4502 if (WebThread* compositorThread = Platform::current()->compositorThread( )) {
4503 compositorThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, thre adSafeBind(&createCompositorMutatorClient, AllowCrossThreadAccess(&mutatorClient ), AllowCrossThreadAccess(&doneEvent)));
4504 } else {
4505 createCompositorMutatorClient(&mutatorClient, &doneEvent);
4506 }
4507 // TODO(flackr): Instead of waiting for this event, we may be able to ju st set the
4508 // mutator on the CompositorProxyClient directly from the compositor thr ead before
4509 // it gets used there. We still need to make sure we only create one mut ator though.
4510 doneEvent.wait();
4511 m_mutator = static_cast<CompositorMutatorImpl*>(mutatorClient->mutator() );
4512 m_layerTreeView->setMutatorClient(std::move(mutatorClient));
4513 }
4514 return new CompositorProxyClientImpl(m_mutator);
4515 }
4516
4482 void WebViewImpl::updatePageOverlays() 4517 void WebViewImpl::updatePageOverlays()
4483 { 4518 {
4484 if (m_pageColorOverlay) 4519 if (m_pageColorOverlay)
4485 m_pageColorOverlay->update(); 4520 m_pageColorOverlay->update();
4486 if (InspectorOverlay* overlay = inspectorOverlay()) { 4521 if (InspectorOverlay* overlay = inspectorOverlay()) {
4487 PageOverlay* inspectorPageOverlay = overlay->pageOverlay(); 4522 PageOverlay* inspectorPageOverlay = overlay->pageOverlay();
4488 if (inspectorPageOverlay) 4523 if (inspectorPageOverlay)
4489 inspectorPageOverlay->update(); 4524 inspectorPageOverlay->update();
4490 } 4525 }
4491 } 4526 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4524 { 4559 {
4525 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than 4560 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than
4526 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. 4561 // page's scale factor, which can be 1 in use-zoom-for-dsf mode.
4527 if (!page()) 4562 if (!page())
4528 return 1; 4563 return 1;
4529 4564
4530 return page()->deviceScaleFactor(); 4565 return page()->deviceScaleFactor();
4531 } 4566 }
4532 4567
4533 } // namespace blink 4568 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698