Flag for requestPaint (#31805)
Will run a quick experiment for this.
Ricky committed
Dec 16, 2024 at 11:18 UTC
f7b1273da2c96057d3908f52f8587379d4418f66
5 files changed
+16
-4
packages/scheduler/src/SchedulerFeatureFlags.js
+1
@@ -14,3 +14,4 @@ export const frameYieldMs = 5;
14
export const userBlockingPriorityTimeout = 250;
15
export const normalPriorityTimeout = 5000;
16
export const lowPriorityTimeout = 10000;
17
+export const enableRequestPaint = true;
packages/scheduler/src/__tests__/Scheduler-test.js
+5
-1
@@ -18,6 +18,7 @@ let scheduleCallback;
18
let requestPaint;
19
let shouldYield;
20
let NormalPriority;
21
+let SchedulerFeatureFlags;
22
23
// The Scheduler implementation uses browser APIs like `MessageChannel` and
24
// `setTimeout` to schedule work on the main thread. Most of our tests treat
@@ -42,6 +43,7 @@ describe('SchedulerBrowser', () => {
43
NormalPriority = Scheduler.unstable_NormalPriority;
44
requestPaint = Scheduler.unstable_requestPaint;
45
shouldYield = Scheduler.unstable_shouldYield;
46
+ SchedulerFeatureFlags = require('../SchedulerFeatureFlags');
47
});
48
49
afterEach(() => {
@@ -199,7 +201,9 @@ describe('SchedulerBrowser', () => {
201
runtime.assertLog([
202
'Message Event',
203
'Task',
202
- 'Yield at 0ms',
204
+ SchedulerFeatureFlags.enableRequestPaint
205
+ ? 'Yield at 0ms'
206
+ : `Yield at ${SchedulerFeatureFlags.frameYieldMs}ms`,
207
'Post Message',
208
]);
209
packages/scheduler/src/forks/Scheduler.js
+8
-3
@@ -18,6 +18,7 @@ import {
18
userBlockingPriorityTimeout,
19
lowPriorityTimeout,
20
normalPriorityTimeout,
21
+ enableRequestPaint,
22
} from '../SchedulerFeatureFlags';
23
24
import {push, pop, peek} from '../SchedulerMinHeap';
@@ -458,7 +459,7 @@ let frameInterval = frameYieldMs;
459
let startTime = -1;
460
461
function shouldYieldToHost(): boolean {
461
- if (needsPaint) {
462
+ if (enableRequestPaint && needsPaint) {
463
// Yield now.
464
return true;
465
}
@@ -473,7 +474,9 @@ function shouldYieldToHost(): boolean {
474
}
475
476
function requestPaint() {
476
- needsPaint = true;
477
+ if (enableRequestPaint) {
478
+ needsPaint = true;
479
+ }
480
}
481
482
function forceFrameRate(fps: number) {
@@ -494,7 +497,9 @@ function forceFrameRate(fps: number) {
497
}
498
499
const performWorkUntilDeadline = () => {
497
- needsPaint = false;
500
+ if (enableRequestPaint) {
501
+ needsPaint = false;
502
+ }
503
if (isMessageLoopRunning) {
504
const currentTime = getCurrentTime();
505
// Keep track of the start time so we can measure how long the main thread
packages/scheduler/src/forks/SchedulerFeatureFlags.www-dynamic.js
+1
@@ -14,3 +14,4 @@
14
export const userBlockingPriorityTimeout = 250;
15
export const normalPriorityTimeout = 5000;
16
export const lowPriorityTimeout = 10000;
17
+export const enableRequestPaint = __VARIANT__;
packages/scheduler/src/forks/SchedulerFeatureFlags.www.js
+1
@@ -14,6 +14,7 @@ export const {
14
userBlockingPriorityTimeout,
15
normalPriorityTimeout,
16
lowPriorityTimeout,
17
+ enableRequestPaint,
18
} = dynamicFeatureFlags;
19
20
export const frameYieldMs = 10;