Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7090728677dd90e4c86e2fe9764e4c0008e049c2
      
https://github.com/WebKit/WebKit/commit/7090728677dd90e4c86e2fe9764e4c0008e049c2
  Author: Ryosuke Niwa <[email protected]>
  Date:   2023-08-17 (Thu, 17 Aug 2023)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/requestidlecallback/deadline-max-rAF-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/requestidlecallback/deadline-max-rAF.html
    M LayoutTests/platform/ios-wk2/TestExpectations
    A 
LayoutTests/requestidlecallback/requestidlecallback-deadline-cap-by-rendering-update-expected.txt
    A 
LayoutTests/requestidlecallback/requestidlecallback-deadline-cap-by-rendering-update.html
    M Source/WebCore/dom/IdleDeadline.cpp
    M Source/WebCore/dom/WindowEventLoop.cpp
    M Source/WebCore/dom/WindowEventLoop.h
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Performance.cpp
    M Source/WebCore/page/Performance.h

  Log Message:
  -----------
  deadline-max-rAF.html fails
https://bugs.webkit.org/show_bug.cgi?id=260183

Reviewed by Antti Koivisto.

This PR fixes a number of issues to make 
requestidlecallback/deadline-max-rAF.html pass.

1. Due to rounding errors / loss of precision, IdleDeadline::timeRemaining 
could return a time
that is off by 1ms or 20us, which ever is currently used for the time 
precision. We now ensure
this off-by-one-time-unit issue does not affect idle callbacks by always 
subtracting the same
amount from the remaining time. Since timeRemaining is defined to be an upper 
cap, this is fine.

2. didFinishRenderingUpdate was erroneously removing Page from 
m_pagesWithRenderingOpportunity
when the next rendering update has been scheduled within the current rendering 
update. Moved
the removal of the entry to at the beginning of Page::updateRendering so that 
subsequent
scheduling of rendering update within this rendering update does not end up 
getting cleared.

3. shouldEndIdlePeriod would return true whenever 
m_pagesWithRenderingOpportunity contains any
entry, which would effectively disable idle callbacks when there is any pending 
rendering update.
We now return true only if the next rendering update is happening within the 
next 4ms.

Unfortunately, this PR doesn't remove PASS FAIL expectation from 
deadline-max-rAF.html because
the test fails intermittently on the stress bots, and adding any logging to 
help debug the issue
will make the test no longer flaky, not providing means to debug it. Instead, 
this PR introduces
a new layout test to test the same scenario.

* 
LayoutTests/imported/w3c/web-platform-tests/requestidlecallback/deadline-max-rAF-dynamic.html:
* 
LayoutTests/imported/w3c/web-platform-tests/requestidlecallback/deadline-max-rAF-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/requestidlecallback/deadline-max-rAF.html:
* LayoutTests/platform/ios-wk2/TestExpectations:
* LayoutTests/platform/mac-wk2/TestExpectations:
* 
LayoutTests/requestidlecallback/requestidlecallback-deadline-cap-by-rendering-update-expected.txt:
 Added.
* 
LayoutTests/requestidlecallback/requestidlecallback-deadline-cap-by-rendering-update.html:
 Added.

* Source/WebCore/dom/IdleDeadline.cpp:
(WebCore::IdleDeadline::timeRemaining const): Fixed off-by-one error (1).

* Source/WebCore/dom/WindowEventLoop.cpp:
(WebCore::WindowEventLoop::didStartRenderingUpdate): Renamed from 
didFinishRenderingUpdate.
(WebCore::WindowEventLoop::opportunisticallyRunIdleCallbacks):
(WebCore::WindowEventLoop::shouldEndIdlePeriod): Now takes the current 
timestamp and only returns
true if the next rendering update is happening within the next 4ms instead of 
whenever (3).
(WebCore::WindowEventLoop::computeIdleDeadline):
(WebCore::WindowEventLoop::nextRenderingTime const): Added.

* Source/WebCore/dom/WindowEventLoop.h:

* Source/WebCore/page/Page.cpp:
(WebCore::Page::updateRendering): Moved the call to didStartRenderingUpdate 
(previously named
didFinishRenderingUpdate) here so that rendering update scheduled within this 
rendering update
doesn't get cleared at the end of the current rendering update (2).
(WebCore::Page::renderingUpdateCompleted):

* Source/WebCore/page/Performance.cpp:
(WebCore::Performance::timeResolution): Added.

* Source/WebCore/page/Performance.h:

Canonical link: https://commits.webkit.org/267008@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to