Changeset 165534 in webkit
- Timestamp:
- Mar 13, 2014, 8:41:42 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r165521 r165534 1 2014-03-13 Antti Koivisto <antti@apple.com> 2 3 Ensure that layout milestones complete in all cases 4 https://bugs.webkit.org/show_bug.cgi?id=130101 5 6 Reviewed by Darin Adler. 7 8 Milestones fail to complete in some testing scenarios. 9 10 * dom/Document.cpp: 11 (WebCore::Document::setParsing): 12 13 Check if we need to fire layout milestones if parsing finishes without pending layout. 14 Parsing status affects whether the document is considered non-empty and that affects 15 layout milestones. 16 17 Remove explicit layout scheduling here, layout timer will be active already if there 18 is a layout pending 19 20 * page/FrameView.cpp: 21 (WebCore::FrameView::performPostLayoutTasks): 22 (WebCore::FrameView::firePaintRelatedMilestonesIfNeeded): 23 24 Renamed for consistency 25 26 (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded): 27 28 Factor layout milestone firing into a function. 29 30 * page/FrameView.h: 31 1 32 2014-03-12 Brian Burg <bburg@apple.com> 2 33 -
trunk/Source/WebCore/dom/Document.cpp
r165103 r165534 2487 2487 m_sharedObjectPool = std::make_unique<DocumentSharedObjectPool>(); 2488 2488 2489 if (!m_bParsing && view() )2490 view()-> scheduleRelayout();2489 if (!m_bParsing && view() && !view()->needsLayout()) 2490 view()->fireLayoutRelatedMilestonesIfNeeded(); 2491 2491 2492 2492 #ifdef INSTRUMENT_LAYOUT_SCHEDULING -
trunk/Source/WebCore/page/FrameView.cpp
r165484 r165534 2636 2636 frame().selection().updateAndRevealSelection(); 2637 2637 2638 LayoutMilestones requestedMilestones = 0; 2639 LayoutMilestones milestonesAchieved = 0; 2640 Page* page = frame().page(); 2641 if (page) 2642 requestedMilestones = page->requestedLayoutMilestones(); 2643 2644 if (m_nestedLayoutCount <= 1 && frame().document()->documentElement()) { 2645 if (m_firstLayoutCallbackPending) { 2646 m_firstLayoutCallbackPending = false; 2647 frame().loader().didFirstLayout(); 2648 if (requestedMilestones & DidFirstLayout) 2649 milestonesAchieved |= DidFirstLayout; 2650 if (frame().isMainFrame()) 2651 page->startCountingRelevantRepaintedObjects(); 2652 } 2653 updateIsVisuallyNonEmpty(); 2654 2655 // If the layout was done with pending sheets, we are not in fact visually non-empty yet. 2656 if (m_isVisuallyNonEmpty && !frame().document()->didLayoutWithPendingStylesheets() && m_firstVisuallyNonEmptyLayoutCallbackPending) { 2657 m_firstVisuallyNonEmptyLayoutCallbackPending = false; 2658 if (requestedMilestones & DidFirstVisuallyNonEmptyLayout) 2659 milestonesAchieved |= DidFirstVisuallyNonEmptyLayout; 2660 } 2661 } 2638 if (m_nestedLayoutCount <= 1 && frame().document()->documentElement()) 2639 fireLayoutRelatedMilestonesIfNeeded(); 2662 2640 2663 2641 #if PLATFORM(IOS) … … 2669 2647 #endif 2670 2648 2671 if (milestonesAchieved && frame().isMainFrame())2672 frame().loader().didLayout(milestonesAchieved);2673 2674 2649 #if ENABLE(FONT_LOAD_EVENTS) 2675 2650 if (RuntimeEnabledFeatures::sharedFeatures().fontLoadEventsEnabled()) … … 2692 2667 } 2693 2668 2694 if ( page) {2695 if ( ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())2669 if (auto* page = frame().page()) { 2670 if (auto* scrollingCoordinator = page->scrollingCoordinator()) 2696 2671 scrollingCoordinator->frameViewLayoutUpdated(this); 2697 2672 } … … 3557 3532 InspectorInstrumentation::didPaint(renderView, p, rect); 3558 3533 // FIXME: should probably not fire milestones for snapshot painting. https://bugs.webkit.org/show_bug.cgi?id=117623 3559 firePaintRelatedMilestones ();3534 firePaintRelatedMilestonesIfNeeded(); 3560 3535 } 3561 3536 } … … 4148 4123 } 4149 4124 4150 void FrameView::firePaintRelatedMilestones() 4125 void FrameView::fireLayoutRelatedMilestonesIfNeeded() 4126 { 4127 LayoutMilestones requestedMilestones = 0; 4128 LayoutMilestones milestonesAchieved = 0; 4129 Page* page = frame().page(); 4130 if (page) 4131 requestedMilestones = page->requestedLayoutMilestones(); 4132 4133 if (m_firstLayoutCallbackPending) { 4134 m_firstLayoutCallbackPending = false; 4135 frame().loader().didFirstLayout(); 4136 if (requestedMilestones & DidFirstLayout) 4137 milestonesAchieved |= DidFirstLayout; 4138 if (frame().isMainFrame()) 4139 page->startCountingRelevantRepaintedObjects(); 4140 } 4141 updateIsVisuallyNonEmpty(); 4142 4143 // If the layout was done with pending sheets, we are not in fact visually non-empty yet. 4144 if (m_isVisuallyNonEmpty && !frame().document()->didLayoutWithPendingStylesheets() && m_firstVisuallyNonEmptyLayoutCallbackPending) { 4145 m_firstVisuallyNonEmptyLayoutCallbackPending = false; 4146 if (requestedMilestones & DidFirstVisuallyNonEmptyLayout) 4147 milestonesAchieved |= DidFirstVisuallyNonEmptyLayout; 4148 } 4149 4150 if (milestonesAchieved && frame().isMainFrame()) 4151 frame().loader().didLayout(milestonesAchieved); 4152 } 4153 4154 void FrameView::firePaintRelatedMilestonesIfNeeded() 4151 4155 { 4152 4156 Page* page = frame().page(); -
trunk/Source/WebCore/page/FrameView.h
r165484 r165534 432 432 433 433 void addPaintPendingMilestones(LayoutMilestones); 434 void firePaintRelatedMilestones(); 434 void firePaintRelatedMilestonesIfNeeded(); 435 void fireLayoutRelatedMilestonesIfNeeded(); 435 436 LayoutMilestones milestonesPendingPaint() const { return m_milestonesPendingPaint; } 436 437 -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r165484 r165534 3756 3756 return; 3757 3757 3758 m_renderView.frameView().firePaintRelatedMilestones ();3758 m_renderView.frameView().firePaintRelatedMilestonesIfNeeded(); 3759 3759 } 3760 3760
Note:
See TracChangeset
for help on using the changeset viewer.