@@ -21,6 +21,10 @@ import {
2121 sessionStorageSetItem ,
2222} from 'react-devtools-shared/src/storage' ;
2323import setupHighlighter from './views/Highlighter' ;
24+ import {
25+ initialize as setupTraceUpdates ,
26+ toggleEnabled as setTraceUpdatesEnabled ,
27+ } from './views/TraceUpdates' ;
2428import { patch as patchConsole , unpatch as unpatchConsole } from './console' ;
2529
2630import type { BackendBridge } from 'react-devtools-shared/src/bridge' ;
@@ -87,13 +91,15 @@ export default class Agent extends EventEmitter<{|
8791 hideNativeHighlight : [ ] ,
8892 showNativeHighlight : [ NativeType ] ,
8993 shutdown : [ ] ,
94+ traceUpdates : [ Set < NativeType > ] ,
9095| } > {
9196 _bridge : BackendBridge ;
9297 _isProfiling : boolean = false ;
9398 _recordChangeDescriptions : boolean = false ;
9499 _rendererInterfaces : { [ key : RendererID ] : RendererInterface } = { } ;
95100 _persistedSelection : PersistedSelection | null = null ;
96101 _persistedSelectionMatch : PathMatch | null = null ;
102+ _traceUpdatesEnabled : boolean = false ;
97103
98104 constructor ( bridge : BackendBridge ) {
99105 super ( ) ;
@@ -131,6 +137,7 @@ export default class Agent extends EventEmitter<{|
131137 bridge . addListener ( 'overrideState' , this . overrideState ) ;
132138 bridge . addListener ( 'overrideSuspense' , this . overrideSuspense ) ;
133139 bridge . addListener ( 'reloadAndProfile' , this . reloadAndProfile ) ;
140+ bridge . addListener ( 'setTraceUpdatesEnabled' , this . setTraceUpdatesEnabled ) ;
134141 bridge . addListener ( 'startProfiling' , this . startProfiling ) ;
135142 bridge . addListener ( 'stopProfiling' , this . stopProfiling ) ;
136143 bridge . addListener (
@@ -159,6 +166,7 @@ export default class Agent extends EventEmitter<{|
159166 bridge . send ( 'isBackendStorageAPISupported' , isBackendStorageAPISupported ) ;
160167
161168 setupHighlighter ( bridge , this ) ;
169+ setupTraceUpdates ( this ) ;
162170 }
163171
164172 get rendererInterfaces ( ) : { [ key : RendererID ] : RendererInterface } {
@@ -340,6 +348,8 @@ export default class Agent extends EventEmitter<{|
340348 rendererInterface . startProfiling ( this . _recordChangeDescriptions ) ;
341349 }
342350
351+ rendererInterface . setTraceUpdatesEnabled ( this . _traceUpdatesEnabled ) ;
352+
343353 // When the renderer is attached, we need to tell it whether
344354 // we remember the previous selection that we'd like to restore.
345355 // It'll start tracking mounts for matches to the last selection path.
@@ -349,6 +359,19 @@ export default class Agent extends EventEmitter<{|
349359 }
350360 }
351361
362+ setTraceUpdatesEnabled = ( traceUpdatesEnabled : boolean ) => {
363+ this . _traceUpdatesEnabled = traceUpdatesEnabled ;
364+
365+ setTraceUpdatesEnabled ( traceUpdatesEnabled ) ;
366+
367+ for ( let rendererID in this . _rendererInterfaces ) {
368+ const renderer = ( ( this . _rendererInterfaces [
369+ ( rendererID : any )
370+ ] : any ) : RendererInterface ) ;
371+ renderer . setTraceUpdatesEnabled ( traceUpdatesEnabled ) ;
372+ }
373+ } ;
374+
352375 syncSelectionFromNativeElementsPanel = ( ) => {
353376 const target = window . __REACT_DEVTOOLS_GLOBAL_HOOK__ . $0 ;
354377 if ( target == null ) {
@@ -416,6 +439,10 @@ export default class Agent extends EventEmitter<{|
416439 }
417440 } ;
418441
442+ onTraceUpdates = ( nodes : Set < NativeType > ) => {
443+ this . emit ( 'traceUpdates' , nodes ) ;
444+ } ;
445+
419446 onHookOperations = ( operations : Array < number > ) => {
420447 if ( __DEBUG__ ) {
421448 debug ( 'onHookOperations' , operations ) ;
0 commit comments