Changeset 245958 in webkit
- Timestamp:
- May 31, 2019, 4:03:14 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
dom/Document.cpp (modified) (4 diffs)
-
dom/Document.h (modified) (2 diffs)
-
page/IntersectionObserver.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r245952 r245958 1 2019-05-31 Ali Juma <ajuma@chromium.org> 2 3 REGRESSION (r245396): Page load time performance regression 4 https://bugs.webkit.org/show_bug.cgi?id=198382 5 6 Reviewed by Simon Fraser. 7 8 Delay the scheduling of a rendering update by 500ms when a new 9 IntersectionObserver target is added during page load. This addresses 10 a page load time regression from r245396, which immediately scheduled a 11 rendering update when a target is added. Note that even with this change, 12 if anything else triggers a rendering update before the 500ms delay expires, 13 intersection observations will be updated during that rendering update. 14 15 Covered by intersection-observer/initial-observation.html 16 17 * dom/Document.cpp: 18 (WebCore::Document::updateIntersectionObservations): 19 (WebCore::Document::scheduleInitialIntersectionObservationUpdate): 20 * dom/Document.h: 21 * page/IntersectionObserver.cpp: 22 (WebCore::IntersectionObserver::observe): 23 1 24 2019-05-30 Zan Dobersek <zdobersek@igalia.com> 2 25 -
trunk/Source/WebCore/dom/Document.cpp
r245946 r245958 353 353 }; 354 354 355 #if ENABLE(INTERSECTION_OBSERVER) 356 static const Seconds intersectionObserversInitialUpdateDelay { 500_ms }; 357 #endif 358 355 359 // DOM Level 2 says (letters added): 356 360 // … … 537 541 #if ENABLE(INTERSECTION_OBSERVER) 538 542 , m_intersectionObserversNotifyTimer(*this, &Document::notifyIntersectionObserversTimerFired) 543 , m_intersectionObserversInitialUpdateTimer(*this, &Document::scheduleRenderingUpdate) 539 544 #endif 540 545 , m_loadEventDelayTimer(*this, &Document::loadEventDelayTimerFired) … … 7417 7422 return; 7418 7423 7424 m_intersectionObserversInitialUpdateTimer.stop(); 7425 7419 7426 bool needsLayout = frameView->layoutContext().isLayoutPending() || (renderView() && renderView()->needsLayout()); 7420 7427 if (needsLayout || hasPendingStyleRecalc()) … … 7505 7512 m_intersectionObserversWithPendingNotifications.clear(); 7506 7513 } 7514 7515 void Document::scheduleInitialIntersectionObservationUpdate() 7516 { 7517 if (m_readyState == Complete) 7518 scheduleRenderingUpdate(); 7519 else if (!m_intersectionObserversInitialUpdateTimer.isActive()) 7520 m_intersectionObserversInitialUpdateTimer.startOneShot(intersectionObserversInitialUpdateDelay); 7521 } 7507 7522 #endif 7508 7523 -
trunk/Source/WebCore/dom/Document.h
r245868 r245958 1388 1388 unsigned numberOfIntersectionObservers() const { return m_intersectionObservers.size(); } 1389 1389 void updateIntersectionObservations(); 1390 void scheduleInitialIntersectionObservationUpdate(); 1390 1391 #endif 1391 1392 … … 1822 1823 Vector<WeakPtr<IntersectionObserver>> m_intersectionObserversWithPendingNotifications; 1823 1824 Timer m_intersectionObserversNotifyTimer; 1825 Timer m_intersectionObserversInitialUpdateTimer; 1824 1826 #endif 1825 1827 -
trunk/Source/WebCore/page/IntersectionObserver.cpp
r245396 r245958 159 159 if (!hadObservationTargets) 160 160 document->addIntersectionObserver(*this); 161 document->schedule RenderingUpdate();161 document->scheduleInitialIntersectionObservationUpdate(); 162 162 } 163 163
Note:
See TracChangeset
for help on using the changeset viewer.