Files
sousa-gecko/testing/web-platform/tests/long-animation-frame/conditional-tracing-buffer-limit.html
T
Guohui Deng 88d8a893df Bug 2053669 [wpt PR 61167] - Implement performance.markConditional(...), a=testonly
Automatic update from web-platform-tests
Implement performance.markConditional(...)

performance.markConditional(...) creates lightweight tracing points that
only occur in PerformanceLongAnimationFrameTiming.

A follow-up CL will implement performance.measureConditional(...).

Explainer:
https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/ConditionalTracing/explainer-for-loaf.md
I2P:
https://groups.google.com/a/chromium.org/g/blink-dev/c/Ur_FiEgzLvk/m/NOCKYJs1BwAJ

Chromestatus: https://chromestatus.com/feature/5693676597673984
Bug: 383157188
Change-Id: I9e6728a44975cd8e7bd8ef3ff280841f058fcaea
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7965263
Commit-Queue: Guohui Deng <guohuideng@microsoft.com>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Noam Rosenthal <nrosenthal@google.com>
Cr-Commit-Position: refs/heads/main@{#1659020}

--

wpt-commits: 9c95f8a1dfa49896bd8d9045b0b256d1950c0276
wpt-pr: 61167
2026-07-12 11:58:03 +00:00

64 lines
2.0 KiB
HTML

<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Long Animation Frame Timing: conditional tracing buffer limit</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/utils.js"></script>
<body>
<h1>Long Animation Frame: Conditional Tracing Buffer Limit</h1>
<div id="log"></div>
<script>
setup(() =>
assert_implements(
"userTimingEntries" in PerformanceLongAnimationFrameTiming.prototype,
'conditional user timing for LoAF not implemented'));
const segment_duration = very_long_frame_duration / 2;
const kConditionalUserTimingBufferSize = 200;
promise_test(async t => {
const loaf_entry = await expect_long_frame(async (t, busy_wait) => {
const element = document.createElement("div");
document.body.appendChild(element);
t.add_cleanup(() => element.remove());
for (let i = 0; i < 50; i++) {
performance.markConditional("mark_repeat");
}
busy_wait(segment_duration);
for (let i = 0; i < 50; i++) {
performance.markConditional("mark1_" + i);
}
requestAnimationFrame(() => {
for (let i = 0; i < 50; i++) {
performance.markConditional("mark2_" + i);
}
busy_wait(segment_duration);
for (let i = 0; i < 50; i++) {
performance.markConditional("mark3_" + i);
}
});
new ResizeObserver(() => {
for (let i = 0; i < 50; i++) {
performance.markConditional("mark4_" + i);
}
busy_wait(segment_duration);
for (let i = 0; i < 50; i++) {
performance.markConditional("mark5_" + i);
}
}).observe(element);
}, t);
assert_not_equals(loaf_entry, "timeout");
const conditional_mark_entries = Array.from(loaf_entry.userTimingEntries)
.filter(entry => entry.entryType === "mark-conditional");
assert_equals(conditional_mark_entries.length, kConditionalUserTimingBufferSize);
}, 'conditional user timing entries are capped at ' + kConditionalUserTimingBufferSize);
</script>
</body>