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

Unified Diff: third_party/WebKit/LayoutTests/intersection-observer/README

Issue 2322143002: Switch IntersectionObserver to postTask. (Closed)
Patch Set: use weakptr Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/resources/intersection-observer-helper-functions.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/intersection-observer/README
diff --git a/third_party/WebKit/LayoutTests/intersection-observer/README b/third_party/WebKit/LayoutTests/intersection-observer/README
index bc78b418df739bfcb6131da4f96037084554eb17..b1867cd654d804950dace2a55ca0d807015e3619 100644
--- a/third_party/WebKit/LayoutTests/intersection-observer/README
+++ b/third_party/WebKit/LayoutTests/intersection-observer/README
@@ -8,71 +8,28 @@ function test_function() {
}
onload = function() {
observer.observe(target);
- requestAnimationFrame(() => { requestAnimationFrame(test_function) });
+ requestAnimationFrame(() => {
+ setTimeout(() => {
+ setTimeout(test_function);
+ });
+ });
}
-Subsequent steps in the test use a single RAF to give the observer a chance to
-generate notifications, but the double RAF is required in the onload handler.
Here's the chain of events:
- onload
- observer.observe()
- - First RAF handler is registered
+ - RAF handler is registered
- BeginFrame
- - RAF handlers run
- - Second RAF handler is registered
+ - RAF handler runs
+ - First setTimeout is registered
- UpdateAllLifecyclePhases
- IntersectionObserver generates notifications
+ - First setTimeout runs
+ - Second setTimeout is regsitered
+ - Notifications that haven't be taken via takeRecords are delivered
+ - Second setTimeout runs and queues another RAF handler
- BeginFrame
- - RAF handlers run
- - Second RAF handler verifies observer notifications.
-
-#-------------------------------------------------------------------------------
-
-All of the IntersectionObserver tests are currently listed in LeakExpecations.
-
-To avoid leaking DOM objects, the tests must ensure that all posted tasks have
-run before exiting. IntersectionObserverController requests an idle callback
-through the document's ScriptedIdleTaskController with a timeout of 100ms. That
-callback must be allowed to run before the test finishes to avoid a leak.
-
-ScriptedIdleTaskController posts two tasks to the WebScheduler: one to run at
-the next idle time, and another to run when the timeout expires.
-crbug.com/595155 explains that when one of those tasks runs, it does not release
-its reference to the ScriptedIdleTaskController, which is needlessly kept alive
-until the both tasks have fired. If a test exits before both tasks have fired,
-it will have a DOM leak.
-
-crbug.com/595152 explains that when running without the threaded compositor --
-as the layout tests do -- idle tasks are never serviced. They will still run
-when their timeout expires, but the idle task posted by
-ScriptedIdleTaskController will never run.
-
-Fixing the first bug means that requestIdleCallback will not leak as long as it
-actually runs before exit. The second bug means that when running without the
-threaded compositor, requestIdleCallback will only ever run when its timeout
-expires.
-
-The upshot of all of this is that the only way to ensure that
-IntersectionObserver tests don't leak is to ensure that their idle tasks all run
-before the tests exit, and those idle tasks will only run when their 100ms
-timeout expires.
-
-Note that all of this still holds when observer.takeRecords() is called before
-the idle task runs. In that case, the idle task is not cancelled (because the
-idle task needs to service all observers tracked by a given
-IntersectionObserverController); when the idle task runs, it's simply a no-op.
-There is no way in javascript to detect that such a no-op has occurred, but
-using requestIdleCallback with a timeout of 100 should be guaranteed to run
-after the IntersectionObserverController's idle task has run, as long as
-ScriptedIdleTaskController honors first-in-first-out semantics.
-
-At the time of writing, there is a patch out to add testRunner.runIdleTasks():
-
-https://codereview.chromium.org/1806133002/
-
-With that patch, the tests can be removed from LeakExpectations as long as they
-end with:
-
-if (window.testRunner)
- testRunner.runIdleTasks(finishJSTest);
+ - RAF handler runs
+ - RAF handler verifies observer notifications via takeRecords or
+ does the setTimeout dance to respond after they've been delivered.
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/resources/intersection-observer-helper-functions.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698