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

Side by Side Diff: Source/core/frame/FrameView.cpp

Issue 1287093004: Slimming Paint phase 2 compositing algorithm plumbing (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase from space Created 5 years, 4 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
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/layout/LayoutTestHelper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 11 matching lines...) Expand all
22 * along with this library; see the file COPYING.LIB. If not, write to 22 * along with this library; see the file COPYING.LIB. If not, write to
23 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 23 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 * Boston, MA 02110-1301, USA. 24 * Boston, MA 02110-1301, USA.
25 */ 25 */
26 26
27 #include "config.h" 27 #include "config.h"
28 #include "core/frame/FrameView.h" 28 #include "core/frame/FrameView.h"
29 29
30 #include "core/HTMLNames.h" 30 #include "core/HTMLNames.h"
31 #include "core/MediaTypeNames.h" 31 #include "core/MediaTypeNames.h"
32 #include "core/compositing/DisplayListCompositingBuilder.h"
32 #include "core/css/FontFaceSet.h" 33 #include "core/css/FontFaceSet.h"
33 #include "core/css/resolver/StyleResolver.h" 34 #include "core/css/resolver/StyleResolver.h"
34 #include "core/dom/AXObjectCache.h" 35 #include "core/dom/AXObjectCache.h"
35 #include "core/dom/Fullscreen.h" 36 #include "core/dom/Fullscreen.h"
36 #include "core/editing/EditingUtilities.h" 37 #include "core/editing/EditingUtilities.h"
37 #include "core/editing/FrameSelection.h" 38 #include "core/editing/FrameSelection.h"
38 #include "core/editing/RenderedPosition.h" 39 #include "core/editing/RenderedPosition.h"
39 #include "core/editing/markers/DocumentMarkerController.h" 40 #include "core/editing/markers/DocumentMarkerController.h"
40 #include "core/fetch/ResourceFetcher.h" 41 #include "core/fetch/ResourceFetcher.h"
41 #include "core/fetch/ResourceLoadPriorityOptimizer.h" 42 #include "core/fetch/ResourceLoadPriorityOptimizer.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 #include "platform/ScriptForbiddenScope.h" 86 #include "platform/ScriptForbiddenScope.h"
86 #include "platform/TraceEvent.h" 87 #include "platform/TraceEvent.h"
87 #include "platform/TracedValue.h" 88 #include "platform/TracedValue.h"
88 #include "platform/fonts/FontCache.h" 89 #include "platform/fonts/FontCache.h"
89 #include "platform/geometry/DoubleRect.h" 90 #include "platform/geometry/DoubleRect.h"
90 #include "platform/geometry/FloatRect.h" 91 #include "platform/geometry/FloatRect.h"
91 #include "platform/geometry/LayoutRect.h" 92 #include "platform/geometry/LayoutRect.h"
92 #include "platform/graphics/GraphicsContext.h" 93 #include "platform/graphics/GraphicsContext.h"
93 #include "platform/graphics/GraphicsLayer.h" 94 #include "platform/graphics/GraphicsLayer.h"
94 #include "platform/graphics/GraphicsLayerDebugInfo.h" 95 #include "platform/graphics/GraphicsLayerDebugInfo.h"
96 #include "platform/graphics/paint/DisplayItemList.h"
95 #include "platform/scroll/ScrollAnimator.h" 97 #include "platform/scroll/ScrollAnimator.h"
96 #include "platform/text/TextStream.h" 98 #include "platform/text/TextStream.h"
97 #include "wtf/CurrentTime.h" 99 #include "wtf/CurrentTime.h"
98 #include "wtf/StdLibExtras.h" 100 #include "wtf/StdLibExtras.h"
99 #include "wtf/TemporaryChange.h" 101 #include "wtf/TemporaryChange.h"
100 102
101 namespace blink { 103 namespace blink {
102 104
103 using namespace HTMLNames; 105 using namespace HTMLNames;
104 106
(...skipping 2322 matching lines...) Expand 10 before | Expand all | Expand 10 after
2427 m_needsUpdateWidgetPositions = false; 2429 m_needsUpdateWidgetPositions = false;
2428 2430
2429 updateWidgetPositions(); 2431 updateWidgetPositions();
2430 } 2432 }
2431 2433
2432 void FrameView::updateAllLifecyclePhases() 2434 void FrameView::updateAllLifecyclePhases()
2433 { 2435 {
2434 frame().localFrameRoot()->view()->updateLifecyclePhasesInternal(AllPhases); 2436 frame().localFrameRoot()->view()->updateLifecyclePhasesInternal(AllPhases);
2435 } 2437 }
2436 2438
2437 // TODO(chrishtr): add a scrolling update lifecycle phase, after compositing and before invalidation. 2439 // TODO(chrishtr): add a scrolling update lifecycle phase.
2438 void FrameView::updateLifecycleToCompositingCleanPlusScrolling() 2440 void FrameView::updateLifecycleToCompositingCleanPlusScrolling()
2439 { 2441 {
2440 frame().localFrameRoot()->view()->updateLifecyclePhasesInternal(OnlyUpToComp ositingCleanPlusScrolling); 2442 frame().localFrameRoot()->view()->updateLifecyclePhasesInternal(OnlyUpToComp ositingCleanPlusScrolling);
2441 } 2443 }
2442 2444
2443 void FrameView::updateLifecyclePhasesInternal(LifeCycleUpdateOption phases) 2445 void FrameView::updateLifecyclePhasesInternal(LifeCycleUpdateOption phases)
2444 { 2446 {
2445 // This must be called from the root frame, since it recurses down, not up. 2447 // This must be called from the root frame, since it recurses down, not up.
2446 // Otherwise the lifecycles of the frames might be out of sync. 2448 // Otherwise the lifecycles of the frames might be out of sync.
2447 ASSERT(m_frame->isLocalRoot()); 2449 ASSERT(m_frame->isLocalRoot());
2448 2450
2449 // Updating layout can run script, which can tear down the FrameView. 2451 // Updating layout can run script, which can tear down the FrameView.
2450 RefPtrWillBeRawPtr<FrameView> protector(this); 2452 RefPtrWillBeRawPtr<FrameView> protector(this);
2451 2453
2452 updateStyleAndLayoutIfNeededRecursive(); 2454 updateStyleAndLayoutIfNeededRecursive();
2453 2455
2454 if (LayoutView* view = layoutView()) { 2456 if (LayoutView* view = layoutView()) {
2455 TRACE_EVENT1("devtools.timeline", "UpdateLayerTree", "data", InspectorUp dateLayerTreeEvent::data(m_frame.get())); 2457 TRACE_EVENT1("devtools.timeline", "UpdateLayerTree", "data", InspectorUp dateLayerTreeEvent::data(m_frame.get()));
2456 2458
2459 // This was required for slimming paint v1 but is only temporarily
2460 // needed for slimming paint v2.
2457 view->compositor()->updateIfNeededRecursive(); 2461 view->compositor()->updateIfNeededRecursive();
2458 scrollContentsIfNeededRecursive(); 2462 scrollContentsIfNeededRecursive();
2459 2463
2460 ASSERT(lifecycle().state() >= DocumentLifecycle::CompositingClean); 2464 ASSERT(lifecycle().state() >= DocumentLifecycle::CompositingClean);
2461 2465
2462 if (phases == AllPhases) { 2466 if (phases == AllPhases) {
2463 invalidateTreeIfNeededRecursive(); 2467 invalidateTreeIfNeededRecursive();
2464 2468
2465 if (view->compositor()->inCompositingMode()) 2469 if (view->compositor()->inCompositingMode())
2466 scrollingCoordinator()->updateAfterCompositingChangeIfNeeded(); 2470 scrollingCoordinator()->updateAfterCompositingChangeIfNeeded();
2467 2471
2468 updateCompositedSelectionIfNeeded(); 2472 updateCompositedSelectionIfNeeded();
2473
2474 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
2475 paintForSlimmingPaintV2();
2476 compositeForSlimmingPaintV2();
2477 }
2478
2469 if (RuntimeEnabledFeatures::frameTimingSupportEnabled()) 2479 if (RuntimeEnabledFeatures::frameTimingSupportEnabled())
2470 updateFrameTimingRequestsIfNeeded(); 2480 updateFrameTimingRequestsIfNeeded();
2471 2481
2472 ASSERT(!view->hasPendingSelection()); 2482 ASSERT(!view->hasPendingSelection());
2473 ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationCl ean); 2483 ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationCl ean
2484 || (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && lifecycl e().state() == DocumentLifecycle::CompositingForSlimmingPaintV2Clean));
2474 } 2485 }
2475 } 2486 }
2476 } 2487 }
2477 2488
2489 void FrameView::paintForSlimmingPaintV2()
2490 {
2491 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
2492 ASSERT(frame() == page()->mainFrame() || (!frame().tree().parent()->isLocalF rame()));
2493
2494 LayoutView* view = layoutView();
2495 ASSERT(view);
2496 GraphicsLayer* rootGraphicsLayer = view->layer()->graphicsLayerBacking();
2497
2498 // Detached frames can have no root graphics layer.
2499 if (!rootGraphicsLayer)
2500 return;
2501
2502 lifecycle().advanceTo(DocumentLifecycle::InPaintForSlimmingPaintV2);
2503
2504 // TODO(pdr): Update callers to pass in the interest rect.
2505 IntRect interestRect = LayoutRect::infiniteIntRect();
2506 GraphicsContext context(rootGraphicsLayer->displayItemList());
2507 rootGraphicsLayer->paint(context, interestRect);
2508
2509 lifecycle().advanceTo(DocumentLifecycle::PaintForSlimmingPaintV2Clean);
2510 }
2511
2512 void FrameView::compositeForSlimmingPaintV2()
2513 {
2514 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
2515 ASSERT(frame() == page()->mainFrame() || (!frame().tree().parent()->isLocalF rame()));
2516
2517 GraphicsLayer* rootGraphicsLayer = layoutView()->layer()->graphicsLayerBacki ng();
2518
2519 // Detached frames can have no root graphics layer.
2520 if (!rootGraphicsLayer)
2521 return;
2522
2523 lifecycle().advanceTo(DocumentLifecycle::InCompositingForSlimmingPaintV2);
2524
2525 DisplayListDiff displayListDiff;
2526 rootGraphicsLayer->displayItemList()->commitNewDisplayItems(&displayListDiff );
2527
2528 DisplayListCompositingBuilder compositingBuilder(*rootGraphicsLayer->display ItemList(), displayListDiff);
2529 OwnPtr<CompositedDisplayList> compositedDisplayList = adoptPtr(new Composite dDisplayList());
2530 compositingBuilder.build(*compositedDisplayList);
2531 layoutView()->setCompositedDisplayList(compositedDisplayList.release());
2532
2533 lifecycle().advanceTo(DocumentLifecycle::CompositingForSlimmingPaintV2Clean) ;
2534 }
2535
2478 void FrameView::updateFrameTimingRequestsIfNeeded() 2536 void FrameView::updateFrameTimingRequestsIfNeeded()
2479 { 2537 {
2480 GraphicsLayerFrameTimingRequests graphicsLayerTimingRequests; 2538 GraphicsLayerFrameTimingRequests graphicsLayerTimingRequests;
2481 // TODO(mpb) use a 'dirty' bit to not call this every time. 2539 // TODO(mpb) use a 'dirty' bit to not call this every time.
2482 collectFrameTimingRequestsRecursive(graphicsLayerTimingRequests); 2540 collectFrameTimingRequestsRecursive(graphicsLayerTimingRequests);
2483 2541
2484 for (const auto& iter : graphicsLayerTimingRequests) { 2542 for (const auto& iter : graphicsLayerTimingRequests) {
2485 const GraphicsLayer* graphicsLayer = iter.key; 2543 const GraphicsLayer* graphicsLayer = iter.key;
2486 graphicsLayer->platformLayer()->setFrameTimingRequests(iter.value); 2544 graphicsLayer->platformLayer()->setFrameTimingRequests(iter.value);
2487 } 2545 }
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after
3920 3978
3921 if (!graphicsLayer) 3979 if (!graphicsLayer)
3922 return; 3980 return;
3923 3981
3924 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect); 3982 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect);
3925 3983
3926 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect))); 3984 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect)));
3927 } 3985 }
3928 3986
3929 } // namespace blink 3987 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/layout/LayoutTestHelper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698