Introduce SharedTimebase and stop sending time updates every 100ms
1feeb18
WebKit's multi-process model puts media decoding in the GPU process and JS in the WebContent process; every video.currentTime query must answer synchronously without an IPC round-trip. Previously the GPU sent MediaTimeUpdateData anchors ~4×/sec; TimeProgressEstimator cached and extrapolated. The new SharedTimebase maps a small SharedMemory region into both processes — GPU holds the writer, WebContent holds the SharedTimebaseReader, and reads are lock-free via SequenceLocked<T> (a seqlock).
Source/WebCore/platform/SharedTimebase.h (new)
+struct Snapshot {
+ MediaTime currentTime;
+ double playbackRate;
+ MonotonicTime hostTime;
+};
+class SharedTimebase : public RefCounted<SharedTimebase> { ... };
Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.cpp
- TimeProgressEstimator m_timeEstimator;
+ std::unique_ptr<SharedTimebaseReader> m_sharedTimebaseReader;
+ std::optional<MediaTime> m_stallCap;
In the same commit: AVFoundation's 0→nonzero rate-lie is masked at source with a fine-grained time observer, and the stall cap moves from the deleted TimeProgressEstimator inner class onto AudioVideoRendererRemote itself under m_lock.
Significance
Eliminates steady-state IPC noise for every active media element and introduces a new cross-process shared-memory surface that the WebContent process reads without IPC message validation — a meaningful trust-boundary shift on top of the performance win.
Audit directions
Aaaaaaaaaaaaa Aaaaaaaaaaaaa Aaaaa Aaaaaaaaa Aaa Aaaaaaa Aaaaaa Aaaaaaaaaa Aaaaaa Aaaa Aaaaaaaaaa Aaaaaaaa Aaaa Aa Aaa Aaaaaaaaaaa Aaaaaaaaaaaaa Aaaaaaaaa Aaaaa Aa Aaaaaaaaaaaaaaaaaaa a Aaa Aaaaaaaaaaaaaaaaaaaaaaa Aaa Aaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaaaaaaaa a Aaa Aaaa Aaaaaaa Aaaa Aaaaaaa a Aaaaaaaaaaa Aaa Aaaaaaa Aaa Aaaaa Aaaaaaaaaaa Aaaaaaa Aaaaaaaa Aaaa Aaaaaaaaaaaa Aaaa Aaaaaaaaaaa Aaaaaaaaaaaaaaaaaaa Aaaaaaaaaaa Aaaaaa Aaaaaaa Aaaaaaaaaa Aaaaaaaa Aaaaaaa Aaaaaaaa Aa Aaaaa Aaaaa Aaa Aaaaaaa Aaaaaaaa Aa Aaaaa Aaaa Aaaa a Aaaaa Aaaa Aa Aaaaaaaaaaaaaa Aaaaaaaaa Aaaaaaa Aa Aaaaaaaaa Aaaaaaaa Aaaaaaaaaaa Aaaaa Aaaaaaaa Aaaaaaaaaaaaa Aa Aaaa Aaa Aaaaaaa Aaaa Aaaaa Aaaaa Aaaaaaaaaaaaa Aaaa Aaaaa a Aaaaa Aaaa Aaaaaaaaaa Aaaa Aaaaa Aaaa Aaaaaaaaaaaa Aa Aaa Aa Aaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaa Aaaaaaaaaaaaaaa Aa Aaaaaaaaaaaaaaaaaaaaaaaaaa Aaa Aaaaaaaaaaaaa Aaaaaaa Aa Aaaaaaaaaaaaaaaaaaa Aaaaa Aa Aaaa Aaaaaaaaa a Aaaaaa Aaaa Aaaaaaaaaaaaaaaaaaaaa Aaaaaaa Aaaaaaa Aaaaaa Aaaaaa Aaaaaa Aaa Aaaaa Aaaaaaaa Aaaaa a Aaaaa Aaa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaa Aaaaaaa Aa Aaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaa Aaaa Aaaaaaa Aaaaaa Aaaaa Aaa Aaaaa Aaaaa Aaaaaaaa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaa Aaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaa Aaaaaaaaaaaaa Aa Aaaaaaaa Aaaaaaaa Aaa Aaaaaaaaaaaaaaaaaa Aaaaaa Aaaaaa Aaaaaaaaaaaa Aaaaaaa Aaaaaaaaaaaaaaaaaaa Aa Aaaaaa Aaaaa Aaaaa Aa Aaaaaa Aa Aaa Aaa Aaaaaaa Aaaaaa Aaaaaa Aaaa Aaa Aaaa
🔒New cross-process shared-memory path with lock-free reads and conditional stall-cap logic — several edge cases across the trust boundary are worth security investigation.
Subscribe to read more