@@ -1581,6 +1581,143 @@ describe('preprocessData', () => {
15811581 ) ;
15821582 }
15831583 } ) ;
1584+
1585+ it ( 'should not warn about transition updates scheduled during commit phase' , async ( ) => {
1586+ function Component ( ) {
1587+ const [ value , setValue ] = React . useState ( 0 ) ;
1588+ // eslint-disable-next-line no-unused-vars
1589+ const [ isPending , startTransition ] = React . useTransition ( ) ;
1590+
1591+ Scheduler . unstable_yieldValue (
1592+ `Component rendered with value ${ value } ` ,
1593+ ) ;
1594+
1595+ // Fake a long render
1596+ if ( value !== 0 ) {
1597+ Scheduler . unstable_yieldValue ( 'Long render' ) ;
1598+ startTime += 20000 ;
1599+ }
1600+
1601+ React . useLayoutEffect ( ( ) => {
1602+ startTransition ( ( ) => {
1603+ setValue ( 1 ) ;
1604+ } ) ;
1605+ } , [ ] ) ;
1606+
1607+ return value ;
1608+ }
1609+
1610+ if ( gate ( flags => flags . enableSchedulingProfiler ) ) {
1611+ const cpuProfilerSample = creactCpuProfilerSample ( ) ;
1612+
1613+ const root = ReactDOM . createRoot ( document . createElement ( 'div' ) ) ;
1614+ act ( ( ) => {
1615+ root . render ( < Component /> ) ;
1616+ } ) ;
1617+
1618+ expect ( Scheduler ) . toHaveYielded ( [
1619+ 'Component rendered with value 0' ,
1620+ 'Component rendered with value 0' ,
1621+ 'Component rendered with value 1' ,
1622+ 'Long render' ,
1623+ ] ) ;
1624+
1625+ const testMarks = [ ] ;
1626+ clearedMarks . forEach ( markName => {
1627+ if ( markName === '--component-render-start-Component' ) {
1628+ // Fake a long running render
1629+ startTime += 20000 ;
1630+ }
1631+
1632+ testMarks . push ( {
1633+ pid : ++ pid ,
1634+ tid : ++ tid ,
1635+ ts : ++ startTime ,
1636+ args : { data : { } } ,
1637+ cat : 'blink.user_timing' ,
1638+ name : markName ,
1639+ ph : 'R' ,
1640+ } ) ;
1641+ } ) ;
1642+
1643+ const data = await preprocessData ( [
1644+ cpuProfilerSample ,
1645+ ...createBoilerplateEntries ( ) ,
1646+ ...testMarks ,
1647+ ] ) ;
1648+
1649+ data . schedulingEvents . forEach ( event => {
1650+ expect ( event . warning ) . toBeNull ( ) ;
1651+ } ) ;
1652+ }
1653+ } ) ;
1654+
1655+ it ( 'should not warn about deferred value updates scheduled during commit phase' , async ( ) => {
1656+ function Component ( ) {
1657+ const [ value , setValue ] = React . useState ( 0 ) ;
1658+ const deferredValue = React . useDeferredValue ( value ) ;
1659+
1660+ Scheduler . unstable_yieldValue (
1661+ `Component rendered with value ${ value } and deferredValue ${ deferredValue } ` ,
1662+ ) ;
1663+
1664+ // Fake a long render
1665+ if ( deferredValue !== 0 ) {
1666+ Scheduler . unstable_yieldValue ( 'Long render' ) ;
1667+ startTime += 20000 ;
1668+ }
1669+
1670+ React . useLayoutEffect ( ( ) => {
1671+ setValue ( 1 ) ;
1672+ } , [ ] ) ;
1673+
1674+ return value + deferredValue ;
1675+ }
1676+
1677+ if ( gate ( flags => flags . enableSchedulingProfiler ) ) {
1678+ const cpuProfilerSample = creactCpuProfilerSample ( ) ;
1679+
1680+ const root = ReactDOM . createRoot ( document . createElement ( 'div' ) ) ;
1681+ act ( ( ) => {
1682+ root . render ( < Component /> ) ;
1683+ } ) ;
1684+
1685+ expect ( Scheduler ) . toHaveYielded ( [
1686+ 'Component rendered with value 0 and deferredValue 0' ,
1687+ 'Component rendered with value 1 and deferredValue 0' ,
1688+ 'Component rendered with value 1 and deferredValue 1' ,
1689+ 'Long render' ,
1690+ ] ) ;
1691+
1692+ const testMarks = [ ] ;
1693+ clearedMarks . forEach ( markName => {
1694+ if ( markName === '--component-render-start-Component' ) {
1695+ // Fake a long running render
1696+ startTime += 20000 ;
1697+ }
1698+
1699+ testMarks . push ( {
1700+ pid : ++ pid ,
1701+ tid : ++ tid ,
1702+ ts : ++ startTime ,
1703+ args : { data : { } } ,
1704+ cat : 'blink.user_timing' ,
1705+ name : markName ,
1706+ ph : 'R' ,
1707+ } ) ;
1708+ } ) ;
1709+
1710+ const data = await preprocessData ( [
1711+ cpuProfilerSample ,
1712+ ...createBoilerplateEntries ( ) ,
1713+ ...testMarks ,
1714+ ] ) ;
1715+
1716+ data . schedulingEvents . forEach ( event => {
1717+ expect ( event . warning ) . toBeNull ( ) ;
1718+ } ) ;
1719+ }
1720+ } ) ;
15841721 } ) ;
15851722
15861723 describe ( 'errors thrown while rendering' , ( ) => {
0 commit comments