[webkit-changes] [WebKit/WebKit] 1a501d: Add a way to run incremental GC sweeps during runl...
Wenson Hsieh
noreply at github.com
Thu Jun 15 07:56:30 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1a501dce9fa2e730808e6a4712a0ab4fb30e3302
https://github.com/WebKit/WebKit/commit/1a501dce9fa2e730808e6a4712a0ab4fb30e3302
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2023-06-15 (Thu, 15 Jun 2023)
Changed paths:
M Source/JavaScriptCore/heap/IncrementalSweeper.cpp
M Source/JavaScriptCore/heap/IncrementalSweeper.h
M Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp
M Source/JavaScriptCore/runtime/DeferredWorkTimer.h
M Source/JavaScriptCore/runtime/VM.cpp
M Source/JavaScriptCore/runtime/VM.h
M Source/WebCore/page/Page.cpp
Log Message:
-----------
Add a way to run incremental GC sweeps during runloop idle time in between rendering updates
https://bugs.webkit.org/show_bug.cgi?id=257622
rdar://110076652
Reviewed by Mark Lam.
Add a new (privately-exposed) hook on `VM`, which enables JavaScriptCore to perform periodically-
scheduled work (for now, just limited to incremental sweeping) when the runloop enters idle state,
in between rendering updates. When combined with <https://webkit.org/b/258032>, this will allow us
to move a significant chunk of our incremental sweeping into time intervals when the runloop has
entered idle state, and we're still waiting for the next rendering update to arrive.
* Source/JavaScriptCore/heap/IncrementalSweeper.cpp:
(JSC::IncrementalSweeper::doWorkUntil):
(JSC::IncrementalSweeper::doWork):
(JSC::IncrementalSweeper::doSweep):
Refactor this method, such that it may be called from either the periodic 100 ms timer, or the
opportunistic task hook from VM. In the case of the latter, we avoid eagerly shrinking or freeing
`MarkedBlock`s that have been swept, in order to mitigate the potential for unnecessarily shrinking
the heap capacity by freeing marked blocks more often, only to grow it again immediately thereafter.
(JSC::IncrementalSweeper::sweepNextBlock):
* Source/JavaScriptCore/heap/IncrementalSweeper.h:
* Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp:
(JSC::DeferredWorkTimer::hasAnyPendingWork const):
Add a helper method to return whether the `DeferredWorkTimer` has any scheduled tasks. If so, we
avoid performing any opportunistically scheduled cleanup; this prevents us from scheduling
opportunistic tasks right as a WASM module is being compiled, and thus block it from running right
away.
* Source/JavaScriptCore/runtime/DeferredWorkTimer.h:
* Source/JavaScriptCore/runtime/VM.cpp:
(JSC::VM::performOpportunisticallyScheduledTasks):
See above for more details.
* Source/JavaScriptCore/runtime/VM.h:
* Source/WebCore/page/Page.cpp:
(WebCore::Page::performOpportunisticallyScheduledTasks):
Adopt the new `VM` hook.
Canonical link: https://commits.webkit.org/265197@main
More information about the webkit-changes
mailing list