1- import type { PerformanceViewerCollector , Scene } from "core/index" ;
2- import { Vector2 } from "core/Maths/math.vector" ;
3-
41import type { FunctionComponent } from "react" ;
52
3+ import type { PerformanceViewerCollector , Scene } from "core/index" ;
4+
5+ import { ArrowDownloadRegular , RecordRegular , StopRegular } from "@fluentui/react-icons" ;
66import { useCallback , useEffect , useRef , useState } from "react" ;
77
8+ import { Vector2 } from "core/Maths/math.vector" ;
89import { Observable } from "core/Misc/observable" ;
910import { PerfCollectionStrategy } from "core/Misc/PerformanceViewer/performanceViewerCollectionStrategies" ;
1011import "core/Misc/PerformanceViewer/performanceViewerSceneExtension" ;
@@ -14,7 +15,30 @@ import { ButtonLine } from "shared-ui-components/fluent/hoc/buttonLine";
1415import { ChildWindow } from "shared-ui-components/fluent/hoc/childWindow" ;
1516import { FileUploadLine } from "shared-ui-components/fluent/hoc/fileUploadLine" ;
1617import type { PerfLayoutSize } from "../performanceViewer/graphSupportingTypes" ;
17- import { PerformanceViewerPopup } from "../performanceViewer/performanceViewerPopup" ;
18+ import { PerformanceViewer } from "../performanceViewer/performanceViewer" ;
19+
20+ function AddStrategies ( perfCollector : PerformanceViewerCollector ) {
21+ perfCollector . addCollectionStrategies ( ...DefaultStrategiesList ) ;
22+ if ( PressureObserverWrapper . IsAvailable ) {
23+ // Do not enable for now as the Pressure API does not
24+ // report factors at the moment.
25+ // perfCollector.addCollectionStrategies({
26+ // strategyCallback: PerfCollectionStrategy.ThermalStrategy(),
27+ // category: IPerfMetadataCategory.FrameSteps,
28+ // hidden: true,
29+ // });
30+ // perfCollector.addCollectionStrategies({
31+ // strategyCallback: PerfCollectionStrategy.PowerSupplyStrategy(),
32+ // category: IPerfMetadataCategory.FrameSteps,
33+ // hidden: true,
34+ // });
35+ perfCollector . addCollectionStrategies ( {
36+ strategyCallback : PerfCollectionStrategy . PressureStrategy ( ) ,
37+ category : PerfMetadataCategory . FrameSteps ,
38+ hidden : true ,
39+ } ) ;
40+ }
41+ }
1842
1943const enum PerfMetadataCategory {
2044 Count = "Count" ,
@@ -53,18 +77,20 @@ const InitialGraphSize = new Vector2(724, 512);
5377
5478export const PerformanceStats : FunctionComponent < { context : Scene } > = ( { context : scene } ) => {
5579 const [ isOpen , setIsOpen ] = useState ( false ) ;
80+ const [ isRecording , setIsRecording ] = useState ( false ) ;
5681 const [ isLoadedFromCsv , setIsLoadedFromCsv ] = useState ( false ) ;
5782 const [ performanceCollector , setPerformanceCollector ] = useState < PerformanceViewerCollector | undefined > ( ) ;
5883 const [ layoutObservable ] = useState ( ( ) => new Observable < PerfLayoutSize > ( ) ) ;
5984 const [ returnToLiveObservable ] = useState ( ( ) => new Observable < void > ( ) ) ;
60- const childWindowRef = useRef < { open : ( options ?: { defaultWidth ?: number ; defaultHeight ?: number ; title ?: string } ) => void ; close : ( ) => void } > ( null ) ;
85+ const childWindowRef = useRef < ChildWindow > ( null ) ;
6186
6287 useEffect ( ( ) => {
6388 if ( ! isLoadedFromCsv ) {
6489 if ( performanceCollector ) {
90+ setIsRecording ( false ) ;
6591 performanceCollector . stop ( ) ;
6692 performanceCollector . clear ( false ) ;
67- addStrategies ( performanceCollector ) ;
93+ AddStrategies ( performanceCollector ) ;
6894 }
6995 }
7096 } , [ isLoadedFromCsv , performanceCollector ] ) ;
@@ -95,6 +121,7 @@ export const PerformanceStats: FunctionComponent<{ context: Scene }> = ({ contex
95121
96122 const onPerformanceButtonClick = ( ) => {
97123 setIsOpen ( true ) ;
124+ setIsRecording ( true ) ;
98125 performanceCollector ?. start ( true ) ;
99126 startPerformanceViewerPopup ( ) ;
100127 } ;
@@ -104,11 +131,13 @@ export const PerformanceStats: FunctionComponent<{ context: Scene }> = ({ contex
104131 // reopen window and load data!
105132 setIsOpen ( false ) ;
106133 setIsLoadedFromCsv ( true ) ;
134+ setIsRecording ( false ) ;
107135 performanceCollector ?. stop ( ) ;
108136 const isValid = performanceCollector ?. loadFromFileData ( data ) ;
109137 if ( ! isValid ) {
110- // if our data isnt valid we close the window.
138+ // if our data isn't valid we close the window.
111139 setIsOpen ( false ) ;
140+ setIsRecording ( true ) ;
112141 performanceCollector ?. start ( true ) ;
113142 } else {
114143 startPerformanceViewerPopup ( ) ;
@@ -121,39 +150,20 @@ export const PerformanceStats: FunctionComponent<{ context: Scene }> = ({ contex
121150 } ;
122151
123152 const onToggleRecording = ( ) => {
124- if ( ! performanceCollector ?. isStarted ) {
125- performanceCollector ?. start ( true ) ;
126- } else {
127- performanceCollector ?. stop ( ) ;
128- }
129- } ;
130-
131- const addStrategies = ( perfCollector : PerformanceViewerCollector ) => {
132- perfCollector . addCollectionStrategies ( ...DefaultStrategiesList ) ;
133- if ( PressureObserverWrapper . IsAvailable ) {
134- // Do not enable for now as the Pressure API does not
135- // report factors at the moment.
136- // perfCollector.addCollectionStrategies({
137- // strategyCallback: PerfCollectionStrategy.ThermalStrategy(),
138- // category: IPerfMetadataCategory.FrameSteps,
139- // hidden: true,
140- // });
141- // perfCollector.addCollectionStrategies({
142- // strategyCallback: PerfCollectionStrategy.PowerSupplyStrategy(),
143- // category: IPerfMetadataCategory.FrameSteps,
144- // hidden: true,
145- // });
146- perfCollector . addCollectionStrategies ( {
147- strategyCallback : PerfCollectionStrategy . PressureStrategy ( ) ,
148- category : PerfMetadataCategory . FrameSteps ,
149- hidden : true ,
150- } ) ;
153+ if ( performanceCollector ) {
154+ if ( ! performanceCollector . isStarted ) {
155+ setIsRecording ( true ) ;
156+ performanceCollector . start ( true ) ;
157+ } else {
158+ setIsRecording ( false ) ;
159+ performanceCollector . stop ( ) ;
160+ }
151161 }
152162 } ;
153163
154164 useEffect ( ( ) => {
155165 const perfCollector = scene . getPerfCollector ( ) ;
156- addStrategies ( perfCollector ) ;
166+ AddStrategies ( perfCollector ) ;
157167 setPerformanceCollector ( perfCollector ) ;
158168 } , [ scene ] ) ;
159169
@@ -173,11 +183,11 @@ export const PerformanceStats: FunctionComponent<{ context: Scene }> = ({ contex
173183 < >
174184 { ! isOpen && < ButtonLine label = "Open Realtime Perf Viewer" onClick = { onPerformanceButtonClick } /> }
175185 { ! isOpen && < FileUploadLine label = "Load Perf Viewer using CSV" accept = ".csv" onClick = { onLoadClick } /> }
176- < ButtonLine label = "Export Perf to CSV" onClick = { onExportClick } />
177- { ! isOpen && < ButtonLine label = { performanceCollector ?. isStarted ? "Stop Recording" : "Begin Recording" } onClick = { onToggleRecording } /> }
186+ < ButtonLine label = "Export Perf to CSV" icon = { ArrowDownloadRegular } onClick = { onExportClick } />
187+ { ! isOpen && < ButtonLine label = { isRecording ? "Stop Recording" : "Begin Recording" } icon = { isRecording ? StopRegular : RecordRegular } onClick = { onToggleRecording } /> }
178188 < ChildWindow id = "performance-viewer" imperativeRef = { childWindowRef } onOpenChange = { ( open ) => ! open && onClosePerformanceViewer ( ) } >
179189 { performanceCollector && (
180- < PerformanceViewerPopup
190+ < PerformanceViewer
181191 scene = { scene }
182192 layoutObservable = { layoutObservable }
183193 returnToLiveObservable = { returnToLiveObservable }
0 commit comments