5ec30b922f0ceba077d51b8e1aac5484a7702504ab0d7a47159558489ba867b3.json 50 KB

1
  1. {"ast":null,"code":"import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation.js\";\nimport { PrecisionDate } from \"../precisionDate.js\";\nimport { SceneInstrumentation } from \"../../Instrumentation/sceneInstrumentation.js\";\nimport { PressureObserverWrapper } from \"../pressureObserverWrapper.js\";\n// Dispose which does nothing.\nconst defaultDisposeImpl = () => {};\n/**\n * Defines the predefined strategies used in the performance viewer.\n */\nexport class PerfCollectionStrategy {\n /**\n * Gets the initializer for the strategy used for collection of fps metrics\n * @returns the initializer for the fps strategy\n */\n static FpsStrategy() {\n return scene => {\n const engine = scene.getEngine();\n return {\n id: \"FPS\",\n getData: () => engine.getFps(),\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of thermal utilization metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the thermal utilization strategy\n */\n static ThermalStrategy() {\n return this._PressureStrategy(\"Thermal utilization\", \"thermal\");\n }\n /**\n * Gets the initializer for the strategy used for collection of power supply utilization metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the power supply utilization strategy\n */\n static PowerSupplyStrategy() {\n return this._PressureStrategy(\"Power supply utilization\", \"power-supply\");\n }\n /**\n * Gets the initializer for the strategy used for collection of pressure metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the pressure strategy\n */\n static PressureStrategy() {\n return this._PressureStrategy(\"Pressure\");\n }\n static _PressureStrategy(name, factor = null) {\n return () => {\n let value = 0;\n const wrapper = new PressureObserverWrapper();\n wrapper.observe(\"cpu\");\n wrapper.onPressureChanged.add(update => {\n for (const record of update) {\n var _record$factors$lengt, _record$factors;\n if (factor && record.factors.includes(factor) || !factor && ((_record$factors$lengt = (_record$factors = record.factors) === null || _record$factors === void 0 ? void 0 : _record$factors.length) !== null && _record$factors$lengt !== void 0 ? _record$factors$lengt : 0) === 0) {\n // Let s consider each step being 25% of the total pressure.\n switch (record.state) {\n case \"nominal\":\n value = 0;\n break;\n case \"fair\":\n value = 0.25;\n break;\n case \"serious\":\n value = 0.5;\n break;\n case \"critical\":\n value = 1;\n break;\n }\n }\n }\n });\n return {\n id: name,\n getData: () => value,\n dispose: () => wrapper.dispose()\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total meshes metrics.\n * @returns the initializer for the total meshes strategy\n */\n static TotalMeshesStrategy() {\n return scene => {\n return {\n id: \"Total meshes\",\n getData: () => scene.meshes.length,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active meshes metrics.\n * @returns the initializer for the active meshes strategy\n */\n static ActiveMeshesStrategy() {\n return scene => {\n return {\n id: \"Active meshes\",\n getData: () => scene.getActiveMeshes().length,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active indices metrics.\n * @returns the initializer for the active indices strategy\n */\n static ActiveIndicesStrategy() {\n return scene => {\n return {\n id: \"Active indices\",\n getData: () => scene.getActiveIndices(),\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active faces metrics.\n * @returns the initializer for the active faces strategy\n */\n static ActiveFacesStrategy() {\n return scene => {\n return {\n id: \"Active faces\",\n getData: () => scene.getActiveIndices() / 3,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active bones metrics.\n * @returns the initializer for the active bones strategy\n */\n static ActiveBonesStrategy() {\n return scene => {\n return {\n id: \"Active bones\",\n getData: () => scene.getActiveBones(),\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active particles metrics.\n * @returns the initializer for the active particles strategy\n */\n static ActiveParticlesStrategy() {\n return scene => {\n return {\n id: \"Active particles\",\n getData: () => scene.getActiveParticles(),\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of draw calls metrics.\n * @returns the initializer for the draw calls strategy\n */\n static DrawCallsStrategy() {\n return scene => {\n let drawCalls = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n scene.getEngine()._drawCalls.fetchNewFrame();\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n drawCalls = scene.getEngine()._drawCalls.current;\n });\n return {\n id: \"Draw calls\",\n getData: () => drawCalls,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total lights metrics.\n * @returns the initializer for the total lights strategy\n */\n static TotalLightsStrategy() {\n return scene => {\n return {\n id: \"Total lights\",\n getData: () => scene.lights.length,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total vertices metrics.\n * @returns the initializer for the total vertices strategy\n */\n static TotalVerticesStrategy() {\n return scene => {\n return {\n id: \"Total vertices\",\n getData: () => scene.getTotalVertices(),\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total materials metrics.\n * @returns the initializer for the total materials strategy\n */\n static TotalMaterialsStrategy() {\n return scene => {\n return {\n id: \"Total materials\",\n getData: () => scene.materials.length,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total textures metrics.\n * @returns the initializer for the total textures strategy\n */\n static TotalTexturesStrategy() {\n return scene => {\n return {\n id: \"Total textures\",\n getData: () => scene.textures.length,\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\n * @returns the initializer for the absolute fps strategy\n */\n static AbsoluteFpsStrategy() {\n return scene => {\n const sceneInstrumentation = new SceneInstrumentation(scene);\n sceneInstrumentation.captureFrameTime = true;\n return {\n id: \"Absolute FPS\",\n getData: () => {\n return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;\n },\n dispose: defaultDisposeImpl\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\n * @returns the initializer for the meshes selection time strategy\n */\n static MeshesSelectionStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Meshes Selection\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of render targets time metrics.\n * @returns the initializer for the render targets time strategy\n */\n static RenderTargetsStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Render Targets\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of particles time metrics.\n * @returns the initializer for the particles time strategy\n */\n static ParticlesStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Particles\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of sprites time metrics.\n * @returns the initializer for the sprites time strategy\n */\n static SpritesStrategy() {\n return scene => {\n var _scene$onBeforeSprite, _scene$onAfterSprites;\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeSpritesObserver = (_scene$onBeforeSprite = scene.onBeforeSpritesRenderingObservable) === null || _scene$onBeforeSprite === void 0 ? void 0 : _scene$onBeforeSprite.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterSpritesObserver = (_scene$onAfterSprites = scene.onAfterSpritesRenderingObservable) === null || _scene$onAfterSprites === void 0 ? void 0 : _scene$onAfterSprites.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Sprites\",\n getData: () => timeTaken,\n dispose: () => {\n var _scene$onBeforeSprite2, _scene$onAfterSprites2;\n (_scene$onBeforeSprite2 = scene.onBeforeSpritesRenderingObservable) === null || _scene$onBeforeSprite2 === void 0 || _scene$onBeforeSprite2.remove(onBeforeSpritesObserver);\n (_scene$onAfterSprites2 = scene.onAfterSpritesRenderingObservable) === null || _scene$onAfterSprites2 === void 0 || _scene$onAfterSprites2.remove(onAfterSpritesObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of animations time metrics.\n * @returns the initializer for the animations time strategy\n */\n static AnimationsStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Animations\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of physics time metrics.\n * @returns the initializer for the physics time strategy\n */\n static PhysicsStrategy() {\n return scene => {\n var _scene$onBeforePhysic, _scene$onAfterPhysics;\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforePhysicsObserver = (_scene$onBeforePhysic = scene.onBeforePhysicsObservable) === null || _scene$onBeforePhysic === void 0 ? void 0 : _scene$onBeforePhysic.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterPhysicsObserver = (_scene$onAfterPhysics = scene.onAfterPhysicsObservable) === null || _scene$onAfterPhysics === void 0 ? void 0 : _scene$onAfterPhysics.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Physics\",\n getData: () => timeTaken,\n dispose: () => {\n var _scene$onBeforePhysic2, _scene$onAfterPhysics2;\n (_scene$onBeforePhysic2 = scene.onBeforePhysicsObservable) === null || _scene$onBeforePhysic2 === void 0 || _scene$onBeforePhysic2.remove(onBeforePhysicsObserver);\n (_scene$onAfterPhysics2 = scene.onAfterPhysicsObservable) === null || _scene$onAfterPhysics2 === void 0 || _scene$onAfterPhysics2.remove(onAfterPhysicsObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of render time metrics.\n * @returns the initializer for the render time strategy\n */\n static RenderStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Render\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total frame time metrics.\n * @returns the initializer for the total frame time strategy\n */\n static FrameTotalStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Frame Total\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\n * @returns the initializer for the inter-frame time strategy\n */\n static InterFrameStrategy() {\n return scene => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n return {\n id: \"Inter-frame\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n }\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\n * @returns the initializer for the gpu frame time strategy\n */\n static GpuFrameTimeStrategy() {\n return scene => {\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\n engineInstrumentation.captureGPUFrameTime = true;\n return {\n id: \"GPU frame time\",\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\n dispose: () => {\n engineInstrumentation.dispose();\n }\n };\n };\n }\n}","map":{"version":3,"names":["EngineInstrumentation","PrecisionDate","SceneInstrumentation","PressureObserverWrapper","defaultDisposeImpl","PerfCollectionStrategy","FpsStrategy","scene","engine","getEngine","id","getData","getFps","dispose","ThermalStrategy","_PressureStrategy","PowerSupplyStrategy","PressureStrategy","name","factor","value","wrapper","observe","onPressureChanged","add","update","record","_record$factors$lengt","_record$factors","factors","includes","length","state","TotalMeshesStrategy","meshes","ActiveMeshesStrategy","getActiveMeshes","ActiveIndicesStrategy","getActiveIndices","ActiveFacesStrategy","ActiveBonesStrategy","getActiveBones","ActiveParticlesStrategy","getActiveParticles","DrawCallsStrategy","drawCalls","onBeforeAnimationsObserver","onBeforeAnimationsObservable","_drawCalls","fetchNewFrame","onAfterRenderObserver","onAfterRenderObservable","current","remove","TotalLightsStrategy","lights","TotalVerticesStrategy","getTotalVertices","TotalMaterialsStrategy","materials","TotalTexturesStrategy","textures","AbsoluteFpsStrategy","sceneInstrumentation","captureFrameTime","frameTimeCounter","lastSecAverage","MeshesSelectionStrategy","startTime","Now","timeTaken","onBeforeActiveMeshesObserver","onBeforeActiveMeshesEvaluationObservable","onAfterActiveMeshesObserver","onAfterActiveMeshesEvaluationObservable","RenderTargetsStrategy","onBeforeRenderTargetsObserver","onBeforeRenderTargetsRenderObservable","onAfterRenderTargetsObserver","onAfterRenderTargetsRenderObservable","ParticlesStrategy","onBeforeParticlesObserver","onBeforeParticlesRenderingObservable","onAfterParticlesObserver","onAfterParticlesRenderingObservable","SpritesStrategy","_scene$onBeforeSprite","_scene$onAfterSprites","onBeforeSpritesObserver","onBeforeSpritesRenderingObservable","onAfterSpritesObserver","onAfterSpritesRenderingObservable","_scene$onBeforeSprite2","_scene$onAfterSprites2","AnimationsStrategy","onAfterAnimationsObserver","onAfterAnimationsObservable","PhysicsStrategy","_scene$onBeforePhysic","_scene$onAfterPhysics","onBeforePhysicsObserver","onBeforePhysicsObservable","onAfterPhysicsObserver","onAfterPhysicsObservable","_scene$onBeforePhysic2","_scene$onAfterPhysics2","RenderStrategy","onBeforeDrawPhaseObserver","onBeforeDrawPhaseObservable","onAfterDrawPhaseObserver","onAfterDrawPhaseObservable","FrameTotalStrategy","InterFrameStrategy","GpuFrameTimeStrategy","engineInstrumentation","captureGPUFrameTime","Math","max","gpuFrameTimeCounter"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js"],"sourcesContent":["import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation.js\";\nimport { PrecisionDate } from \"../precisionDate.js\";\nimport { SceneInstrumentation } from \"../../Instrumentation/sceneInstrumentation.js\";\nimport { PressureObserverWrapper } from \"../pressureObserverWrapper.js\";\n// Dispose which does nothing.\nconst defaultDisposeImpl = () => { };\n/**\n * Defines the predefined strategies used in the performance viewer.\n */\nexport class PerfCollectionStrategy {\n /**\n * Gets the initializer for the strategy used for collection of fps metrics\n * @returns the initializer for the fps strategy\n */\n static FpsStrategy() {\n return (scene) => {\n const engine = scene.getEngine();\n return {\n id: \"FPS\",\n getData: () => engine.getFps(),\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of thermal utilization metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the thermal utilization strategy\n */\n static ThermalStrategy() {\n return this._PressureStrategy(\"Thermal utilization\", \"thermal\");\n }\n /**\n * Gets the initializer for the strategy used for collection of power supply utilization metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the power supply utilization strategy\n */\n static PowerSupplyStrategy() {\n return this._PressureStrategy(\"Power supply utilization\", \"power-supply\");\n }\n /**\n * Gets the initializer for the strategy used for collection of pressure metrics.\n * Needs the experimental pressure API.\n * @returns the initializer for the pressure strategy\n */\n static PressureStrategy() {\n return this._PressureStrategy(\"Pressure\");\n }\n static _PressureStrategy(name, factor = null) {\n return () => {\n let value = 0;\n const wrapper = new PressureObserverWrapper();\n wrapper.observe(\"cpu\");\n wrapper.onPressureChanged.add((update) => {\n for (const record of update) {\n if ((factor && record.factors.includes(factor)) || (!factor && (record.factors?.length ?? 0) === 0)) {\n // Let s consider each step being 25% of the total pressure.\n switch (record.state) {\n case \"nominal\":\n value = 0;\n break;\n case \"fair\":\n value = 0.25;\n break;\n case \"serious\":\n value = 0.5;\n break;\n case \"critical\":\n value = 1;\n break;\n }\n }\n }\n });\n return {\n id: name,\n getData: () => value,\n dispose: () => wrapper.dispose(),\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total meshes metrics.\n * @returns the initializer for the total meshes strategy\n */\n static TotalMeshesStrategy() {\n return (scene) => {\n return {\n id: \"Total meshes\",\n getData: () => scene.meshes.length,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active meshes metrics.\n * @returns the initializer for the active meshes strategy\n */\n static ActiveMeshesStrategy() {\n return (scene) => {\n return {\n id: \"Active meshes\",\n getData: () => scene.getActiveMeshes().length,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active indices metrics.\n * @returns the initializer for the active indices strategy\n */\n static ActiveIndicesStrategy() {\n return (scene) => {\n return {\n id: \"Active indices\",\n getData: () => scene.getActiveIndices(),\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active faces metrics.\n * @returns the initializer for the active faces strategy\n */\n static ActiveFacesStrategy() {\n return (scene) => {\n return {\n id: \"Active faces\",\n getData: () => scene.getActiveIndices() / 3,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active bones metrics.\n * @returns the initializer for the active bones strategy\n */\n static ActiveBonesStrategy() {\n return (scene) => {\n return {\n id: \"Active bones\",\n getData: () => scene.getActiveBones(),\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of active particles metrics.\n * @returns the initializer for the active particles strategy\n */\n static ActiveParticlesStrategy() {\n return (scene) => {\n return {\n id: \"Active particles\",\n getData: () => scene.getActiveParticles(),\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of draw calls metrics.\n * @returns the initializer for the draw calls strategy\n */\n static DrawCallsStrategy() {\n return (scene) => {\n let drawCalls = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n scene.getEngine()._drawCalls.fetchNewFrame();\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n drawCalls = scene.getEngine()._drawCalls.current;\n });\n return {\n id: \"Draw calls\",\n getData: () => drawCalls,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total lights metrics.\n * @returns the initializer for the total lights strategy\n */\n static TotalLightsStrategy() {\n return (scene) => {\n return {\n id: \"Total lights\",\n getData: () => scene.lights.length,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total vertices metrics.\n * @returns the initializer for the total vertices strategy\n */\n static TotalVerticesStrategy() {\n return (scene) => {\n return {\n id: \"Total vertices\",\n getData: () => scene.getTotalVertices(),\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total materials metrics.\n * @returns the initializer for the total materials strategy\n */\n static TotalMaterialsStrategy() {\n return (scene) => {\n return {\n id: \"Total materials\",\n getData: () => scene.materials.length,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total textures metrics.\n * @returns the initializer for the total textures strategy\n */\n static TotalTexturesStrategy() {\n return (scene) => {\n return {\n id: \"Total textures\",\n getData: () => scene.textures.length,\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\n * @returns the initializer for the absolute fps strategy\n */\n static AbsoluteFpsStrategy() {\n return (scene) => {\n const sceneInstrumentation = new SceneInstrumentation(scene);\n sceneInstrumentation.captureFrameTime = true;\n return {\n id: \"Absolute FPS\",\n getData: () => {\n return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;\n },\n dispose: defaultDisposeImpl,\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\n * @returns the initializer for the meshes selection time strategy\n */\n static MeshesSelectionStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Meshes Selection\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of render targets time metrics.\n * @returns the initializer for the render targets time strategy\n */\n static RenderTargetsStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Render Targets\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of particles time metrics.\n * @returns the initializer for the particles time strategy\n */\n static ParticlesStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Particles\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of sprites time metrics.\n * @returns the initializer for the sprites time strategy\n */\n static SpritesStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeSpritesObserver = scene.onBeforeSpritesRenderingObservable?.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterSpritesObserver = scene.onAfterSpritesRenderingObservable?.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Sprites\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeSpritesRenderingObservable?.remove(onBeforeSpritesObserver);\n scene.onAfterSpritesRenderingObservable?.remove(onAfterSpritesObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of animations time metrics.\n * @returns the initializer for the animations time strategy\n */\n static AnimationsStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Animations\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of physics time metrics.\n * @returns the initializer for the physics time strategy\n */\n static PhysicsStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforePhysicsObserver = scene.onBeforePhysicsObservable?.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterPhysicsObserver = scene.onAfterPhysicsObservable?.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Physics\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforePhysicsObservable?.remove(onBeforePhysicsObserver);\n scene.onAfterPhysicsObservable?.remove(onAfterPhysicsObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of render time metrics.\n * @returns the initializer for the render time strategy\n */\n static RenderStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Render\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of total frame time metrics.\n * @returns the initializer for the total frame time strategy\n */\n static FrameTotalStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n return {\n id: \"Frame Total\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\n * @returns the initializer for the inter-frame time strategy\n */\n static InterFrameStrategy() {\n return (scene) => {\n let startTime = PrecisionDate.Now;\n let timeTaken = 0;\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\n timeTaken = PrecisionDate.Now - startTime;\n });\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\n startTime = PrecisionDate.Now;\n });\n return {\n id: \"Inter-frame\",\n getData: () => timeTaken,\n dispose: () => {\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\n },\n };\n };\n }\n /**\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\n * @returns the initializer for the gpu frame time strategy\n */\n static GpuFrameTimeStrategy() {\n return (scene) => {\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\n engineInstrumentation.captureGPUFrameTime = true;\n return {\n id: \"GPU frame time\",\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\n dispose: () => {\n engineInstrumentation.dispose();\n },\n };\n };\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}