@samitouri / QOS-React / commits / f7b1273da2

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;