@babylonjs/core 6.41.0 → 6.41.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.js +1 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +4 -6
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +3 -3
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +3 -5
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +48 -74
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +6 -12
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -2
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +2 -4
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -2
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Bones/bone.js +4 -6
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +2 -3
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.js +5 -8
- package/Buffers/buffer.align.js.map +1 -1
- package/Buffers/buffer.js +6 -8
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +3 -4
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -5
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +1 -2
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +5 -0
- package/Cameras/camera.js +18 -11
- package/Cameras/camera.js.map +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.js +5 -8
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +12 -9
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +1 -2
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.js +2 -3
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/ray.d.ts +6 -1
- package/Culling/ray.js +9 -4
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.js +4 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +7 -9
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/physicsViewer.js +5 -7
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/rayHelper.js +1 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +26 -31
- package/Debug/skeletonViewer.js.map +1 -1
- package/Decorators/nodeDecorator.js +1 -1
- package/Decorators/nodeDecorator.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +3 -5
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/eventFactory.js +1 -1
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +1 -2
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +9 -12
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +6 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -4
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.js +2 -3
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +9 -5
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js +9 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Extensions/engine.views.js +1 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.js +6 -7
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +6 -11
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +1 -2
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +3 -5
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +9 -2
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -6
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +2 -4
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +11 -5
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +11 -3
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +2 -3
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +1 -2
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -7
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +15 -20
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +10 -5
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +2 -3
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -2
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +1 -2
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +4 -6
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +2 -3
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +3 -5
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +2 -4
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +5 -4
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -2
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +40 -43
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +12 -7
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +4 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.js +4 -7
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +16 -22
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +9 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +11 -16
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +32 -44
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +77 -95
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +2 -3
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +3 -6
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +2 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
- package/FlowGraph/flowGraph.js +1 -2
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +2 -4
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.js +1 -2
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.js +4 -7
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js +1 -2
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/FlowGraph/serialization.js +2 -3
- package/FlowGraph/serialization.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +2 -4
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +5 -8
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +1 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.js +2 -3
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +4 -7
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +3 -4
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +2 -4
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +2 -4
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +8 -2
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/videoDome.js +1 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.js +8 -10
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.js +16 -10
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +16 -6
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +12 -3
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +1 -2
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +1 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +21 -25
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +18 -21
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +2 -4
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -2
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +26 -32
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +22 -27
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -7
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +10 -16
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -3
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -4
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +1 -2
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +24 -26
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +45 -49
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -28
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +43 -33
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.js +1 -2
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +2 -3
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +4 -6
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js +2 -4
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +14 -23
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +16 -11
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +3 -4
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +25 -28
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +6 -9
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +4 -7
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +4 -7
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +13 -14
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -2
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +19 -11
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js +2 -4
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +7 -13
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -2
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +2 -4
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +5 -3
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +3 -5
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +3 -6
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +5 -8
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +22 -34
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +16 -21
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +2 -4
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +1 -1
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +12 -10
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +18 -21
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/drawWrapper.js +2 -4
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +4 -0
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +2 -3
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.decalMapConfiguration.js +3 -3
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +1 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +7 -4
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.js +5 -6
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.d.ts +1 -1
- package/Materials/materialHelper.js +3 -4
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -5
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.js +13 -14
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Materials/multiMaterial.js +1 -2
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +64 -32
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +24 -23
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +10 -12
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.js +1 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +26 -29
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.js +16 -16
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +5 -1
- package/Meshes/Builders/groundBuilder.js +13 -2
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.js +2 -3
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +9 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +141 -12
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +8 -11
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +3 -5
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +13 -18
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +6 -3
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +1 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -2
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -2
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.js +6 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -2
- package/Meshes/csg.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/instancedMesh.js +5 -10
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.js +13 -22
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.js +18 -15
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/subMesh.js +8 -14
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +12 -18
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/trailMesh.js +2 -3
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +9 -14
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -3
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/basis.js +2 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dataStorage.js +1 -1
- package/Misc/dataStorage.js.map +1 -1
- package/Misc/deepCopier.js +1 -1
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/environmentTextureTools.js +3 -4
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/equirectangularCapture.js +2 -3
- package/Misc/equirectangularCapture.js.map +1 -1
- package/Misc/fileTools.js +4 -4
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.js +3 -5
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/logger.js +1 -2
- package/Misc/logger.js.map +1 -1
- package/Misc/minMaxReducer.js +2 -3
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/pressureObserverWrapper.js +5 -8
- package/Misc/pressureObserverWrapper.js.map +1 -1
- package/Misc/sceneRecorder.js +1 -1
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.js +5 -5
- package/Misc/textureTools.js.map +1 -1
- package/Misc/timer.js +3 -5
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +3 -2
- package/Misc/tools.js +6 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/trajectoryClassifier.js +3 -3
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +6 -4
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +4 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -2
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +1 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +4 -0
- package/Particles/baseParticleSystem.js +4 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +3 -6
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +2 -2
- package/Particles/gpuParticleSystem.js +30 -20
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +3 -2
- package/Particles/particleSystem.js +33 -30
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -3
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +5 -8
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +1 -2
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +2 -2
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.js +19 -21
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +48 -35
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +10 -12
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.js +2 -4
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsShape.js +1 -2
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.js +6 -8
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -8
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +14 -22
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +28 -34
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +4 -6
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +4 -7
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +2 -4
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js +22 -19
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +2 -3
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -4
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.js +2 -4
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.js +10 -13
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +8 -11
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +6 -11
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -5
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -4
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +30 -36
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +5 -7
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +3 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +5 -4
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -6
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/reflectiveShadowMap.d.ts +1 -0
- package/Rendering/reflectiveShadowMap.js +5 -5
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Shaders/color.fragment.d.ts +2 -0
- package/Shaders/color.fragment.js +4 -0
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.d.ts +2 -0
- package/Shaders/color.vertex.js +7 -0
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
- package/Shaders/gpuRenderParticles.fragment.js +4 -0
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
- package/Shaders/gpuRenderParticles.vertex.js +5 -1
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +2 -0
- package/Shaders/particles.fragment.js +4 -0
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +2 -0
- package/Shaders/particles.vertex.js +5 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Sprites/spriteManager.js +1 -2
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +5 -7
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/stencilStateComposer.js +2 -4
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAbstractFeature.js +6 -2
- package/XR/features/WebXRAbstractFeature.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +1 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +6 -7
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +17 -10
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +1 -2
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.d.ts +1 -0
- package/XR/features/WebXRControllerTeleportation.js +6 -3
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +3 -5
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -0
- package/XR/features/WebXRHandTracking.js +31 -28
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +9 -11
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +3 -6
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -4
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +21 -18
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js +1 -2
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js +2 -3
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +4 -1
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/native/nativeXRFrame.js +1 -2
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRCamera.js +1 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +28 -6
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +5 -7
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.js +4 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +6 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +1 -2
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.js +16 -29
- package/XR/webXRSessionManager.js.map +1 -1
- package/assetContainer.js +4 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +18 -17
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceViewerCollectionStrategies.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollectionStrategies.ts"],"names":[],"mappings":"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","sourcesContent":["import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { SceneInstrumentation } from \"../../Instrumentation/sceneInstrumentation\";\r\nimport { PressureObserverWrapper } from \"../pressureObserverWrapper\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Defines the general structure of what is necessary for a collection strategy.\r\n */\r\nexport interface IPerfViewerCollectionStrategy {\r\n /**\r\n * The id of the strategy.\r\n */\r\n id: string;\r\n /**\r\n * Function which gets the data for the strategy.\r\n */\r\n getData: () => number;\r\n /**\r\n * Function which does any necessary cleanup. Called when performanceViewerCollector.dispose() is called.\r\n */\r\n dispose: () => void;\r\n}\r\n// Dispose which does nothing.\r\nconst defaultDisposeImpl = () => {};\r\n\r\n/**\r\n * Initializer callback for a strategy\r\n */\r\nexport type PerfStrategyInitialization = (scene: Scene) => IPerfViewerCollectionStrategy;\r\n/**\r\n * Defines the predefined strategies used in the performance viewer.\r\n */\r\nexport class PerfCollectionStrategy {\r\n /**\r\n * Gets the initializer for the strategy used for collection of fps metrics\r\n * @returns the initializer for the fps strategy\r\n */\r\n public static FpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engine = scene.getEngine();\r\n return {\r\n id: \"FPS\",\r\n getData: () => engine.getFps(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of thermal utilization metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the thermal utilization strategy\r\n */\r\n public static ThermalStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Thermal utilization\", \"thermal\");\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of power supply utilization metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the power supply utilization strategy\r\n */\r\n public static PowerSupplyStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Power supply utilization\", \"power-supply\");\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of pressure metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the pressure strategy\r\n */\r\n public static PressureStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Pressure\");\r\n }\r\n\r\n private static _PressureStrategy(name: string, factor: Nullable<PressureFactor> = null): PerfStrategyInitialization {\r\n return () => {\r\n let value = 0;\r\n\r\n const wrapper = new PressureObserverWrapper();\r\n wrapper.observe(\"cpu\");\r\n\r\n wrapper.onPressureChanged.add((update) => {\r\n for (const record of update) {\r\n if ((factor && record.factors.includes(factor)) || (!factor && (record.factors?.length ?? 0) === 0)) {\r\n // Let s consider each step being 25% of the total pressure.\r\n switch (record.state) {\r\n case \"nominal\":\r\n value = 0;\r\n break;\r\n case \"fair\":\r\n value = 0.25;\r\n break;\r\n case \"serious\":\r\n value = 0.5;\r\n break;\r\n case \"critical\":\r\n value = 1;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => wrapper.dispose(),\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total meshes metrics.\r\n * @returns the initializer for the total meshes strategy\r\n */\r\n public static TotalMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total meshes\",\r\n getData: () => scene.meshes.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active meshes metrics.\r\n * @returns the initializer for the active meshes strategy\r\n */\r\n public static ActiveMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active meshes\",\r\n getData: () => scene.getActiveMeshes().length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active indices metrics.\r\n * @returns the initializer for the active indices strategy\r\n */\r\n public static ActiveIndicesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active indices\",\r\n getData: () => scene.getActiveIndices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active faces metrics.\r\n * @returns the initializer for the active faces strategy\r\n */\r\n public static ActiveFacesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active faces\",\r\n getData: () => scene.getActiveIndices() / 3,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active bones metrics.\r\n * @returns the initializer for the active bones strategy\r\n */\r\n public static ActiveBonesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active bones\",\r\n getData: () => scene.getActiveBones(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active particles metrics.\r\n * @returns the initializer for the active particles strategy\r\n */\r\n public static ActiveParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active particles\",\r\n getData: () => scene.getActiveParticles(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of draw calls metrics.\r\n * @returns the initializer for the draw calls strategy\r\n */\r\n public static DrawCallsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let drawCalls = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n scene.getEngine()._drawCalls.fetchNewFrame();\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n drawCalls = scene.getEngine()._drawCalls.current;\r\n });\r\n\r\n return {\r\n id: \"Draw calls\",\r\n getData: () => drawCalls,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total lights metrics.\r\n * @returns the initializer for the total lights strategy\r\n */\r\n public static TotalLightsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total lights\",\r\n getData: () => scene.lights.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total vertices metrics.\r\n * @returns the initializer for the total vertices strategy\r\n */\r\n public static TotalVerticesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total vertices\",\r\n getData: () => scene.getTotalVertices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total materials metrics.\r\n * @returns the initializer for the total materials strategy\r\n */\r\n public static TotalMaterialsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total materials\",\r\n getData: () => scene.materials.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total textures metrics.\r\n * @returns the initializer for the total textures strategy\r\n */\r\n public static TotalTexturesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total textures\",\r\n getData: () => scene.textures.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\r\n * @returns the initializer for the absolute fps strategy\r\n */\r\n public static AbsoluteFpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const sceneInstrumentation = new SceneInstrumentation(scene);\r\n sceneInstrumentation.captureFrameTime = true;\r\n\r\n return {\r\n id: \"Absolute FPS\",\r\n getData: () => {\r\n return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;\r\n },\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\r\n * @returns the initializer for the meshes selection time strategy\r\n */\r\n public static MeshesSelectionStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Meshes Selection\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\r\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render targets time metrics.\r\n * @returns the initializer for the render targets time strategy\r\n */\r\n public static RenderTargetsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render Targets\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\r\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of particles time metrics.\r\n * @returns the initializer for the particles time strategy\r\n */\r\n public static ParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Particles\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\r\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of sprites time metrics.\r\n * @returns the initializer for the sprites time strategy\r\n */\r\n public static SpritesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeSpritesObserver = scene.onBeforeSpritesRenderingObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterSpritesObserver = scene.onAfterSpritesRenderingObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Sprites\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeSpritesRenderingObservable?.remove(onBeforeSpritesObserver);\r\n scene.onAfterSpritesRenderingObservable?.remove(onAfterSpritesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of animations time metrics.\r\n * @returns the initializer for the animations time strategy\r\n */\r\n public static AnimationsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Animations\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of physics time metrics.\r\n * @returns the initializer for the physics time strategy\r\n */\r\n public static PhysicsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforePhysicsObserver = scene.onBeforePhysicsObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterPhysicsObserver = scene.onAfterPhysicsObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Physics\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforePhysicsObservable?.remove(onBeforePhysicsObserver);\r\n scene.onAfterPhysicsObservable?.remove(onAfterPhysicsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render time metrics.\r\n * @returns the initializer for the render time strategy\r\n */\r\n public static RenderStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\r\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total frame time metrics.\r\n * @returns the initializer for the total frame time strategy\r\n */\r\n public static FrameTotalStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Frame Total\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\r\n * @returns the initializer for the inter-frame time strategy\r\n */\r\n public static InterFrameStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n return {\r\n id: \"Inter-frame\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\r\n * @returns the initializer for the gpu frame time strategy\r\n */\r\n public static GpuFrameTimeStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\r\n engineInstrumentation.captureGPUFrameTime = true;\r\n return {\r\n id: \"GPU frame time\",\r\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\r\n dispose: () => {\r\n engineInstrumentation.dispose();\r\n },\r\n };\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"performanceViewerCollectionStrategies.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollectionStrategies.ts"],"names":[],"mappings":"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","sourcesContent":["import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { SceneInstrumentation } from \"../../Instrumentation/sceneInstrumentation\";\r\nimport { PressureObserverWrapper } from \"../pressureObserverWrapper\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Defines the general structure of what is necessary for a collection strategy.\r\n */\r\nexport interface IPerfViewerCollectionStrategy {\r\n /**\r\n * The id of the strategy.\r\n */\r\n id: string;\r\n /**\r\n * Function which gets the data for the strategy.\r\n */\r\n getData: () => number;\r\n /**\r\n * Function which does any necessary cleanup. Called when performanceViewerCollector.dispose() is called.\r\n */\r\n dispose: () => void;\r\n}\r\n// Dispose which does nothing.\r\nconst defaultDisposeImpl = () => {};\r\n\r\n/**\r\n * Initializer callback for a strategy\r\n */\r\nexport type PerfStrategyInitialization = (scene: Scene) => IPerfViewerCollectionStrategy;\r\n/**\r\n * Defines the predefined strategies used in the performance viewer.\r\n */\r\nexport class PerfCollectionStrategy {\r\n /**\r\n * Gets the initializer for the strategy used for collection of fps metrics\r\n * @returns the initializer for the fps strategy\r\n */\r\n public static FpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engine = scene.getEngine();\r\n return {\r\n id: \"FPS\",\r\n getData: () => engine.getFps(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of thermal utilization metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the thermal utilization strategy\r\n */\r\n public static ThermalStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Thermal utilization\", \"thermal\");\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of power supply utilization metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the power supply utilization strategy\r\n */\r\n public static PowerSupplyStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Power supply utilization\", \"power-supply\");\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of pressure metrics.\r\n * Needs the experimental pressure API.\r\n * @returns the initializer for the pressure strategy\r\n */\r\n public static PressureStrategy(): PerfStrategyInitialization {\r\n return this._PressureStrategy(\"Pressure\");\r\n }\r\n\r\n private static _PressureStrategy(name: string, factor: Nullable<PressureFactor> = null): PerfStrategyInitialization {\r\n return () => {\r\n let value = 0;\r\n\r\n const wrapper = new PressureObserverWrapper();\r\n wrapper.observe(\"cpu\");\r\n\r\n wrapper.onPressureChanged.add((update) => {\r\n for (const record of update) {\r\n if ((factor && record.factors.includes(factor)) || (!factor && (record.factors?.length ?? 0) === 0)) {\r\n // Let s consider each step being 25% of the total pressure.\r\n switch (record.state) {\r\n case \"nominal\":\r\n value = 0;\r\n break;\r\n case \"fair\":\r\n value = 0.25;\r\n break;\r\n case \"serious\":\r\n value = 0.5;\r\n break;\r\n case \"critical\":\r\n value = 1;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => wrapper.dispose(),\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total meshes metrics.\r\n * @returns the initializer for the total meshes strategy\r\n */\r\n public static TotalMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total meshes\",\r\n getData: () => scene.meshes.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active meshes metrics.\r\n * @returns the initializer for the active meshes strategy\r\n */\r\n public static ActiveMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active meshes\",\r\n getData: () => scene.getActiveMeshes().length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active indices metrics.\r\n * @returns the initializer for the active indices strategy\r\n */\r\n public static ActiveIndicesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active indices\",\r\n getData: () => scene.getActiveIndices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active faces metrics.\r\n * @returns the initializer for the active faces strategy\r\n */\r\n public static ActiveFacesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active faces\",\r\n getData: () => scene.getActiveIndices() / 3,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active bones metrics.\r\n * @returns the initializer for the active bones strategy\r\n */\r\n public static ActiveBonesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active bones\",\r\n getData: () => scene.getActiveBones(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active particles metrics.\r\n * @returns the initializer for the active particles strategy\r\n */\r\n public static ActiveParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active particles\",\r\n getData: () => scene.getActiveParticles(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of draw calls metrics.\r\n * @returns the initializer for the draw calls strategy\r\n */\r\n public static DrawCallsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let drawCalls = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n scene.getEngine()._drawCalls.fetchNewFrame();\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n drawCalls = scene.getEngine()._drawCalls.current;\r\n });\r\n\r\n return {\r\n id: \"Draw calls\",\r\n getData: () => drawCalls,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total lights metrics.\r\n * @returns the initializer for the total lights strategy\r\n */\r\n public static TotalLightsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total lights\",\r\n getData: () => scene.lights.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total vertices metrics.\r\n * @returns the initializer for the total vertices strategy\r\n */\r\n public static TotalVerticesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total vertices\",\r\n getData: () => scene.getTotalVertices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total materials metrics.\r\n * @returns the initializer for the total materials strategy\r\n */\r\n public static TotalMaterialsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total materials\",\r\n getData: () => scene.materials.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total textures metrics.\r\n * @returns the initializer for the total textures strategy\r\n */\r\n public static TotalTexturesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total textures\",\r\n getData: () => scene.textures.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\r\n * @returns the initializer for the absolute fps strategy\r\n */\r\n public static AbsoluteFpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const sceneInstrumentation = new SceneInstrumentation(scene);\r\n sceneInstrumentation.captureFrameTime = true;\r\n\r\n return {\r\n id: \"Absolute FPS\",\r\n getData: () => {\r\n return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;\r\n },\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\r\n * @returns the initializer for the meshes selection time strategy\r\n */\r\n public static MeshesSelectionStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Meshes Selection\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\r\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render targets time metrics.\r\n * @returns the initializer for the render targets time strategy\r\n */\r\n public static RenderTargetsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render Targets\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\r\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of particles time metrics.\r\n * @returns the initializer for the particles time strategy\r\n */\r\n public static ParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Particles\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\r\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of sprites time metrics.\r\n * @returns the initializer for the sprites time strategy\r\n */\r\n public static SpritesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeSpritesObserver = scene.onBeforeSpritesRenderingObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterSpritesObserver = scene.onAfterSpritesRenderingObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Sprites\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeSpritesRenderingObservable?.remove(onBeforeSpritesObserver);\r\n scene.onAfterSpritesRenderingObservable?.remove(onAfterSpritesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of animations time metrics.\r\n * @returns the initializer for the animations time strategy\r\n */\r\n public static AnimationsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Animations\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of physics time metrics.\r\n * @returns the initializer for the physics time strategy\r\n */\r\n public static PhysicsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforePhysicsObserver = scene.onBeforePhysicsObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterPhysicsObserver = scene.onAfterPhysicsObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Physics\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforePhysicsObservable?.remove(onBeforePhysicsObserver);\r\n scene.onAfterPhysicsObservable?.remove(onAfterPhysicsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render time metrics.\r\n * @returns the initializer for the render time strategy\r\n */\r\n public static RenderStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\r\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total frame time metrics.\r\n * @returns the initializer for the total frame time strategy\r\n */\r\n public static FrameTotalStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Frame Total\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\r\n * @returns the initializer for the inter-frame time strategy\r\n */\r\n public static InterFrameStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n return {\r\n id: \"Inter-frame\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\r\n * @returns the initializer for the gpu frame time strategy\r\n */\r\n public static GpuFrameTimeStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\r\n engineInstrumentation.captureGPUFrameTime = true;\r\n return {\r\n id: \"GPU frame time\",\r\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\r\n dispose: () => {\r\n engineInstrumentation.dispose();\r\n },\r\n };\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -100,12 +100,11 @@ export class PerformanceViewerCollector {
|
|
|
100
100
|
* @returns The event registered, used in sendEvent
|
|
101
101
|
*/
|
|
102
102
|
registerEvent(name, forceUpdate, category) {
|
|
103
|
-
var _a;
|
|
104
103
|
if (this._strategies.has(name) && !forceUpdate) {
|
|
105
104
|
return;
|
|
106
105
|
}
|
|
107
106
|
if (this._strategies.has(name) && forceUpdate) {
|
|
108
|
-
|
|
107
|
+
this._strategies.get(name)?.dispose();
|
|
109
108
|
this._strategies.delete(name);
|
|
110
109
|
}
|
|
111
110
|
const strategy = (scene) => {
|
|
@@ -356,7 +355,7 @@ export class PerformanceViewerCollector {
|
|
|
356
355
|
csvContent += `,${this.datasets.ids[i]}`;
|
|
357
356
|
if (this._datasetMeta) {
|
|
358
357
|
const meta = this._datasetMeta.get(this.datasets.ids[i]);
|
|
359
|
-
if (meta
|
|
358
|
+
if (meta?.category) {
|
|
360
359
|
csvContent += `${ExportedDataSeparator}${meta.category}`;
|
|
361
360
|
}
|
|
362
361
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceViewerCollector.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { IPerfCustomEvent, IPerfDatasets, IPerfMetadata } from \"../interfaces/iPerfViewer\";\r\nimport { EventState, Observable } from \"../observable\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { Tools } from \"../tools\";\r\nimport { DynamicFloat32Array } from \"./dynamicFloat32Array\";\r\nimport type { IPerfViewerCollectionStrategy, PerfStrategyInitialization } from \"./performanceViewerCollectionStrategies\";\r\n\r\n// the initial size of our array, should be a multiple of two!\r\nconst InitialArraySize = 1800;\r\n\r\n// three octets in a hexcode. #[AA][BB][CC], i.e. 24 bits of data.\r\nconst NumberOfBitsInHexcode = 24;\r\n\r\n// Allows single numeral hex numbers to be appended by a 0.\r\nconst HexPadding = \"0\";\r\n\r\n// header for the timestamp column\r\nconst TimestampColHeader = \"timestamp\";\r\n\r\n// header for the numPoints column\r\nconst NumPointsColHeader = \"numPoints\";\r\n\r\n// regex to capture all carriage returns in the string.\r\nconst CarriageReturnRegex = /\\r/g;\r\n\r\n// string to use as separator when exporting extra information along with the dataset id\r\nconst ExportedDataSeparator = \"@\";\r\n\r\n/**\r\n * Callback strategy and optional category for data collection\r\n */\r\ninterface IPerformanceViewerStrategyParameter {\r\n /**\r\n * The strategy for collecting data. Available strategies are located on the PerfCollectionStrategy class\r\n */\r\n strategyCallback: PerfStrategyInitialization;\r\n /**\r\n * Category for displaying this strategy on the viewer. Can be undefined or an empty string, in which case the strategy will be displayed on top\r\n */\r\n category?: string;\r\n /**\r\n * Starts hidden\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * The collector class handles the collection and storage of data into the appropriate array.\r\n * The collector also handles notifying any observers of any updates.\r\n */\r\nexport class PerformanceViewerCollector {\r\n private _datasetMeta: Map<string, IPerfMetadata>;\r\n private _strategies: Map<string, IPerfViewerCollectionStrategy>;\r\n private _startingTimestamp: number;\r\n private _hasLoadedData: boolean;\r\n private _isStarted: boolean;\r\n private readonly _customEventObservable: Observable<IPerfCustomEvent>;\r\n private readonly _eventRestoreSet: Set<string>;\r\n\r\n /**\r\n * Datastructure containing the collected datasets. Warning: you should not modify the values in here, data will be of the form [timestamp, numberOfPoints, value1, value2..., timestamp, etc...]\r\n */\r\n public readonly datasets: IPerfDatasets;\r\n /**\r\n * An observable you can attach to get deltas in the dataset. Subscribing to this will increase memory consumption slightly, and may hurt performance due to increased garbage collection needed.\r\n * Updates of slices will be of the form [timestamp, numberOfPoints, value1, value2...].\r\n */\r\n public readonly datasetObservable: Observable<number[]>;\r\n /**\r\n * An observable you can attach to get the most updated map of metadatas.\r\n */\r\n public readonly metadataObservable: Observable<Map<string, IPerfMetadata>>;\r\n\r\n /**\r\n * The offset for when actual data values start appearing inside a slice.\r\n */\r\n public static get SliceDataOffset() {\r\n return 2;\r\n }\r\n\r\n /**\r\n * The offset for the value of the number of points inside a slice.\r\n */\r\n public static get NumberOfPointsOffset() {\r\n return 1;\r\n }\r\n\r\n /**\r\n * Handles the creation of a performance viewer collector.\r\n * @param _scene the scene to collect on.\r\n * @param _enabledStrategyCallbacks the list of data to collect with callbacks for initialization purposes.\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n _enabledStrategyCallbacks?: IPerformanceViewerStrategyParameter[]\r\n ) {\r\n this.datasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n this._strategies = new Map<string, IPerfViewerCollectionStrategy>();\r\n this._datasetMeta = new Map<string, IPerfMetadata>();\r\n this._eventRestoreSet = new Set();\r\n this._customEventObservable = new Observable();\r\n this.datasetObservable = new Observable();\r\n this.metadataObservable = new Observable((observer) => observer.callback(this._datasetMeta, new EventState(0)));\r\n if (_enabledStrategyCallbacks) {\r\n this.addCollectionStrategies(..._enabledStrategyCallbacks);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a custom string event which will be callable via sendEvent. This method returns an event object which will contain the id of the event.\r\n * The user can set a value optionally, which will be used in the sendEvent method. If the value is set, we will record this value at the end of each frame,\r\n * if not we will increment our counter and record the value of the counter at the end of each frame. The value recorded is 0 if no sendEvent method is called, within a frame.\r\n * @param name The name of the event to register\r\n * @param forceUpdate if the code should force add an event, and replace the last one.\r\n * @param category the category for that event\r\n * @returns The event registered, used in sendEvent\r\n */\r\n public registerEvent(name: string, forceUpdate?: boolean, category?: string): IPerfCustomEvent | undefined {\r\n if (this._strategies.has(name) && !forceUpdate) {\r\n return;\r\n }\r\n\r\n if (this._strategies.has(name) && forceUpdate) {\r\n this._strategies.get(name)?.dispose();\r\n this._strategies.delete(name);\r\n }\r\n\r\n const strategy: PerfStrategyInitialization = (scene) => {\r\n let counter: number = 0;\r\n let value: number = 0;\r\n\r\n const afterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n value = counter;\r\n counter = 0;\r\n });\r\n\r\n const stringObserver = this._customEventObservable.add((eventVal) => {\r\n if (name !== eventVal.name) {\r\n return;\r\n }\r\n\r\n if (eventVal.value !== undefined) {\r\n counter = eventVal.value;\r\n } else {\r\n counter++;\r\n }\r\n });\r\n\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => {\r\n scene.onAfterRenderObservable.remove(afterRenderObserver);\r\n this._customEventObservable.remove(stringObserver);\r\n },\r\n };\r\n };\r\n const event: IPerfCustomEvent = {\r\n name,\r\n };\r\n\r\n this._eventRestoreSet.add(name);\r\n this.addCollectionStrategies({ strategyCallback: strategy, category });\r\n\r\n return event;\r\n }\r\n\r\n /**\r\n * Lets the perf collector handle an event, occurences or event value depending on if the event.value params is set.\r\n * @param event the event to handle an occurence for\r\n */\r\n public sendEvent(event: IPerfCustomEvent) {\r\n this._customEventObservable.notifyObservers(event);\r\n }\r\n\r\n /**\r\n * This event restores all custom string events if necessary.\r\n */\r\n private _restoreStringEvents() {\r\n if (this._eventRestoreSet.size !== this._customEventObservable.observers.length) {\r\n this._eventRestoreSet.forEach((event) => {\r\n this.registerEvent(event, true);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This method adds additional collection strategies for data collection purposes.\r\n * @param strategyCallbacks the list of data to collect with callbacks.\r\n */\r\n public addCollectionStrategies(...strategyCallbacks: IPerformanceViewerStrategyParameter[]) {\r\n // eslint-disable-next-line prefer-const\r\n for (let { strategyCallback, category, hidden } of strategyCallbacks) {\r\n const strategy = strategyCallback(this._scene);\r\n if (this._strategies.has(strategy.id)) {\r\n strategy.dispose();\r\n continue;\r\n }\r\n\r\n this.datasets.ids.push(strategy.id);\r\n\r\n if (category) {\r\n category = category.replace(new RegExp(ExportedDataSeparator, \"g\"), \"\");\r\n }\r\n\r\n this._datasetMeta.set(strategy.id, {\r\n color: this._getHexColorFromId(strategy.id),\r\n category,\r\n hidden,\r\n });\r\n\r\n this._strategies.set(strategy.id, strategy);\r\n }\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Gets a 6 character hexcode representing the colour from a passed in string.\r\n * @param id the string to get a hex code for.\r\n * @returns a hexcode hashed from the id.\r\n */\r\n private _getHexColorFromId(id: string) {\r\n // this first bit is just a known way of hashing a string.\r\n let hash = 0;\r\n for (let i = 0; i < id.length; i++) {\r\n // (hash << 5) - hash is the same as hash * 31\r\n hash = id.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n\r\n // then we build the string octet by octet.\r\n let hex = \"#\";\r\n for (let i = 0; i < NumberOfBitsInHexcode; i += 8) {\r\n const octet = (hash >> i) & 0xff;\r\n hex += (HexPadding + octet.toString(16)).substr(-2);\r\n }\r\n\r\n return hex;\r\n }\r\n\r\n /**\r\n * Collects data for every dataset by using the appropriate strategy. This is called every frame.\r\n * This method will then notify all observers with the latest slice.\r\n */\r\n private _collectDataAtFrame = () => {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n\r\n // add the starting index for the slice\r\n const numberOfIndices = this.datasets.startingIndices.itemLength;\r\n let startingIndex = 0;\r\n\r\n if (numberOfIndices > 0) {\r\n const previousStartingIndex = this.datasets.startingIndices.at(numberOfIndices - 1);\r\n startingIndex =\r\n previousStartingIndex + this.datasets.data.at(previousStartingIndex + PerformanceViewerCollector.NumberOfPointsOffset) + PerformanceViewerCollector.SliceDataOffset;\r\n }\r\n\r\n this.datasets.startingIndices.push(startingIndex);\r\n\r\n // add the first 2 items in our slice.\r\n this.datasets.data.push(timestamp);\r\n this.datasets.data.push(numPoints);\r\n\r\n // add the values inside the slice.\r\n this.datasets.ids.forEach((id: string) => {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n this.datasets.data.push(strategy.getData());\r\n });\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n slice.push(this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + i));\r\n }\r\n\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n };\r\n\r\n /**\r\n * Collects and then sends the latest slice to any observers by using the appropriate strategy when the user wants.\r\n * The slice will be of the form [timestamp, numberOfPoints, value1, value2...]\r\n * This method does not add onto the collected data accessible via the datasets variable.\r\n */\r\n public getCurrentSlice() {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n // add the values inside the slice.\r\n this.datasets.ids.forEach((id: string) => {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n slice.push(strategy.getData());\r\n }\r\n });\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n }\r\n\r\n /**\r\n * Updates a property for a dataset's metadata with the value provided.\r\n * @param id the id of the dataset which needs its metadata updated.\r\n * @param prop the property to update.\r\n * @param value the value to update the property with.\r\n */\r\n public updateMetadata<T extends keyof IPerfMetadata>(id: string, prop: T, value: IPerfMetadata[T]) {\r\n const meta = this._datasetMeta.get(id);\r\n\r\n if (!meta) {\r\n return;\r\n }\r\n\r\n meta[prop] = value;\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Completely clear, data, ids, and strategies saved to this performance collector.\r\n * @param preserveStringEventsRestore if it should preserve the string events, by default will clear string events registered when called.\r\n */\r\n public clear(preserveStringEventsRestore?: boolean) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.ids.length = 0;\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n if (!preserveStringEventsRestore) {\r\n this._eventRestoreSet.clear();\r\n }\r\n this._hasLoadedData = false;\r\n }\r\n\r\n /**\r\n * Accessor which lets the caller know if the performance collector has data loaded from a file or not!\r\n * Call clear() to reset this value.\r\n * @returns true if the data is loaded from a file, false otherwise.\r\n */\r\n public get hasLoadedData(): boolean {\r\n return this._hasLoadedData;\r\n }\r\n\r\n /**\r\n * Given a string containing file data, this function parses the file data into the datasets object.\r\n * It returns a boolean to indicate if this object was successfully loaded with the data.\r\n * @param data string content representing the file data.\r\n * @param keepDatasetMeta if it should use reuse the existing dataset metadata\r\n * @returns true if the data was successfully loaded, false otherwise.\r\n */\r\n public loadFromFileData(data: string, keepDatasetMeta?: boolean): boolean {\r\n const lines = data\r\n .replace(CarriageReturnRegex, \"\")\r\n .split(\"\\n\")\r\n .map((line) => line.split(\",\").filter((s) => s.length > 0))\r\n .filter((line) => line.length > 0);\r\n const timestampIndex = 0;\r\n const numPointsIndex = PerformanceViewerCollector.NumberOfPointsOffset;\r\n if (lines.length < 2) {\r\n return false;\r\n }\r\n\r\n const parsedDatasets: IPerfDatasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n\r\n // parse first line separately to populate ids!\r\n const [firstLine, ...dataLines] = lines;\r\n // make sure we have the correct beginning headers\r\n if (firstLine.length < 2 || firstLine[timestampIndex] !== TimestampColHeader || firstLine[numPointsIndex] !== NumPointsColHeader) {\r\n return false;\r\n }\r\n\r\n const idCategoryMap: Map<string, string> = new Map<string, string>();\r\n\r\n // populate the ids.\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < firstLine.length; i++) {\r\n const [id, category] = firstLine[i].split(ExportedDataSeparator);\r\n parsedDatasets.ids.push(id);\r\n idCategoryMap.set(id, category);\r\n }\r\n\r\n let startingIndex = 0;\r\n for (const line of dataLines) {\r\n if (line.length < 2) {\r\n return false;\r\n }\r\n\r\n const timestamp = parseFloat(line[timestampIndex]);\r\n const numPoints = parseInt(line[numPointsIndex]);\r\n\r\n if (isNaN(numPoints) || isNaN(timestamp)) {\r\n return false;\r\n }\r\n\r\n parsedDatasets.data.push(timestamp);\r\n parsedDatasets.data.push(numPoints);\r\n\r\n if (numPoints + PerformanceViewerCollector.SliceDataOffset !== line.length) {\r\n return false;\r\n }\r\n\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < line.length; i++) {\r\n const val = parseFloat(line[i]);\r\n if (isNaN(val)) {\r\n return false;\r\n }\r\n parsedDatasets.data.push(val);\r\n }\r\n\r\n parsedDatasets.startingIndices.push(startingIndex);\r\n startingIndex += line.length;\r\n }\r\n\r\n this.datasets.ids = parsedDatasets.ids;\r\n this.datasets.data = parsedDatasets.data;\r\n this.datasets.startingIndices = parsedDatasets.startingIndices;\r\n if (!keepDatasetMeta) {\r\n this._datasetMeta.clear();\r\n }\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n // populate metadata.\r\n if (!keepDatasetMeta) {\r\n for (const id of this.datasets.ids) {\r\n const category = idCategoryMap.get(id);\r\n\r\n this._datasetMeta.set(id, { category, color: this._getHexColorFromId(id) });\r\n }\r\n }\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n this._hasLoadedData = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Exports the datasets inside of the collector to a csv.\r\n */\r\n public exportDataToCsv() {\r\n let csvContent = \"\";\r\n // create the header line.\r\n csvContent += `${TimestampColHeader},${NumPointsColHeader}`;\r\n for (let i = 0; i < this.datasets.ids.length; i++) {\r\n csvContent += `,${this.datasets.ids[i]}`;\r\n if (this._datasetMeta) {\r\n const meta = this._datasetMeta.get(this.datasets.ids[i]);\r\n if (meta?.category) {\r\n csvContent += `${ExportedDataSeparator}${meta.category}`;\r\n }\r\n }\r\n }\r\n csvContent += \"\\n\";\r\n // create the data lines\r\n for (let i = 0; i < this.datasets.startingIndices.itemLength; i++) {\r\n const startingIndex = this.datasets.startingIndices.at(i);\r\n const timestamp = this.datasets.data.at(startingIndex);\r\n const numPoints = this.datasets.data.at(startingIndex + PerformanceViewerCollector.NumberOfPointsOffset);\r\n\r\n csvContent += `${timestamp},${numPoints}`;\r\n\r\n for (let offset = 0; offset < numPoints; offset++) {\r\n csvContent += `,${this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + offset)}`;\r\n }\r\n\r\n // add extra commas.\r\n for (let diff = 0; diff < this.datasets.ids.length - numPoints; diff++) {\r\n csvContent += \",\";\r\n }\r\n\r\n csvContent += \"\\n\";\r\n }\r\n\r\n const fileName = `${new Date().toISOString()}-perfdata.csv`;\r\n Tools.Download(new Blob([csvContent], { type: \"text/csv\" }), fileName);\r\n }\r\n /**\r\n * Starts the realtime collection of data.\r\n * @param shouldPreserve optional boolean param, if set will preserve the dataset between calls of start.\r\n */\r\n public start(shouldPreserve?: boolean) {\r\n if (!shouldPreserve) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._startingTimestamp = PrecisionDate.Now;\r\n } else if (this._startingTimestamp === undefined) {\r\n this._startingTimestamp = PrecisionDate.Now;\r\n }\r\n this._scene.onAfterRenderObservable.add(this._collectDataAtFrame);\r\n this._restoreStringEvents();\r\n this._isStarted = true;\r\n }\r\n\r\n /**\r\n * Stops the collection of data.\r\n */\r\n public stop() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._isStarted = false;\r\n }\r\n\r\n /**\r\n * Returns if the perf collector has been started or not.\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => {\r\n strategy.dispose();\r\n });\r\n this.datasetObservable.clear();\r\n this.metadataObservable.clear();\r\n this._isStarted = false;\r\n (<any>this.datasets) = null;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"performanceViewerCollector.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { IPerfCustomEvent, IPerfDatasets, IPerfMetadata } from \"../interfaces/iPerfViewer\";\r\nimport { EventState, Observable } from \"../observable\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { Tools } from \"../tools\";\r\nimport { DynamicFloat32Array } from \"./dynamicFloat32Array\";\r\nimport type { IPerfViewerCollectionStrategy, PerfStrategyInitialization } from \"./performanceViewerCollectionStrategies\";\r\n\r\n// the initial size of our array, should be a multiple of two!\r\nconst InitialArraySize = 1800;\r\n\r\n// three octets in a hexcode. #[AA][BB][CC], i.e. 24 bits of data.\r\nconst NumberOfBitsInHexcode = 24;\r\n\r\n// Allows single numeral hex numbers to be appended by a 0.\r\nconst HexPadding = \"0\";\r\n\r\n// header for the timestamp column\r\nconst TimestampColHeader = \"timestamp\";\r\n\r\n// header for the numPoints column\r\nconst NumPointsColHeader = \"numPoints\";\r\n\r\n// regex to capture all carriage returns in the string.\r\nconst CarriageReturnRegex = /\\r/g;\r\n\r\n// string to use as separator when exporting extra information along with the dataset id\r\nconst ExportedDataSeparator = \"@\";\r\n\r\n/**\r\n * Callback strategy and optional category for data collection\r\n */\r\ninterface IPerformanceViewerStrategyParameter {\r\n /**\r\n * The strategy for collecting data. Available strategies are located on the PerfCollectionStrategy class\r\n */\r\n strategyCallback: PerfStrategyInitialization;\r\n /**\r\n * Category for displaying this strategy on the viewer. Can be undefined or an empty string, in which case the strategy will be displayed on top\r\n */\r\n category?: string;\r\n /**\r\n * Starts hidden\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * The collector class handles the collection and storage of data into the appropriate array.\r\n * The collector also handles notifying any observers of any updates.\r\n */\r\nexport class PerformanceViewerCollector {\r\n private _datasetMeta: Map<string, IPerfMetadata>;\r\n private _strategies: Map<string, IPerfViewerCollectionStrategy>;\r\n private _startingTimestamp: number;\r\n private _hasLoadedData: boolean;\r\n private _isStarted: boolean;\r\n private readonly _customEventObservable: Observable<IPerfCustomEvent>;\r\n private readonly _eventRestoreSet: Set<string>;\r\n\r\n /**\r\n * Datastructure containing the collected datasets. Warning: you should not modify the values in here, data will be of the form [timestamp, numberOfPoints, value1, value2..., timestamp, etc...]\r\n */\r\n public readonly datasets: IPerfDatasets;\r\n /**\r\n * An observable you can attach to get deltas in the dataset. Subscribing to this will increase memory consumption slightly, and may hurt performance due to increased garbage collection needed.\r\n * Updates of slices will be of the form [timestamp, numberOfPoints, value1, value2...].\r\n */\r\n public readonly datasetObservable: Observable<number[]>;\r\n /**\r\n * An observable you can attach to get the most updated map of metadatas.\r\n */\r\n public readonly metadataObservable: Observable<Map<string, IPerfMetadata>>;\r\n\r\n /**\r\n * The offset for when actual data values start appearing inside a slice.\r\n */\r\n public static get SliceDataOffset() {\r\n return 2;\r\n }\r\n\r\n /**\r\n * The offset for the value of the number of points inside a slice.\r\n */\r\n public static get NumberOfPointsOffset() {\r\n return 1;\r\n }\r\n\r\n /**\r\n * Handles the creation of a performance viewer collector.\r\n * @param _scene the scene to collect on.\r\n * @param _enabledStrategyCallbacks the list of data to collect with callbacks for initialization purposes.\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n _enabledStrategyCallbacks?: IPerformanceViewerStrategyParameter[]\r\n ) {\r\n this.datasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n this._strategies = new Map<string, IPerfViewerCollectionStrategy>();\r\n this._datasetMeta = new Map<string, IPerfMetadata>();\r\n this._eventRestoreSet = new Set();\r\n this._customEventObservable = new Observable();\r\n this.datasetObservable = new Observable();\r\n this.metadataObservable = new Observable((observer) => observer.callback(this._datasetMeta, new EventState(0)));\r\n if (_enabledStrategyCallbacks) {\r\n this.addCollectionStrategies(..._enabledStrategyCallbacks);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a custom string event which will be callable via sendEvent. This method returns an event object which will contain the id of the event.\r\n * The user can set a value optionally, which will be used in the sendEvent method. If the value is set, we will record this value at the end of each frame,\r\n * if not we will increment our counter and record the value of the counter at the end of each frame. The value recorded is 0 if no sendEvent method is called, within a frame.\r\n * @param name The name of the event to register\r\n * @param forceUpdate if the code should force add an event, and replace the last one.\r\n * @param category the category for that event\r\n * @returns The event registered, used in sendEvent\r\n */\r\n public registerEvent(name: string, forceUpdate?: boolean, category?: string): IPerfCustomEvent | undefined {\r\n if (this._strategies.has(name) && !forceUpdate) {\r\n return;\r\n }\r\n\r\n if (this._strategies.has(name) && forceUpdate) {\r\n this._strategies.get(name)?.dispose();\r\n this._strategies.delete(name);\r\n }\r\n\r\n const strategy: PerfStrategyInitialization = (scene) => {\r\n let counter: number = 0;\r\n let value: number = 0;\r\n\r\n const afterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n value = counter;\r\n counter = 0;\r\n });\r\n\r\n const stringObserver = this._customEventObservable.add((eventVal) => {\r\n if (name !== eventVal.name) {\r\n return;\r\n }\r\n\r\n if (eventVal.value !== undefined) {\r\n counter = eventVal.value;\r\n } else {\r\n counter++;\r\n }\r\n });\r\n\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => {\r\n scene.onAfterRenderObservable.remove(afterRenderObserver);\r\n this._customEventObservable.remove(stringObserver);\r\n },\r\n };\r\n };\r\n const event: IPerfCustomEvent = {\r\n name,\r\n };\r\n\r\n this._eventRestoreSet.add(name);\r\n this.addCollectionStrategies({ strategyCallback: strategy, category });\r\n\r\n return event;\r\n }\r\n\r\n /**\r\n * Lets the perf collector handle an event, occurences or event value depending on if the event.value params is set.\r\n * @param event the event to handle an occurence for\r\n */\r\n public sendEvent(event: IPerfCustomEvent) {\r\n this._customEventObservable.notifyObservers(event);\r\n }\r\n\r\n /**\r\n * This event restores all custom string events if necessary.\r\n */\r\n private _restoreStringEvents() {\r\n if (this._eventRestoreSet.size !== this._customEventObservable.observers.length) {\r\n this._eventRestoreSet.forEach((event) => {\r\n this.registerEvent(event, true);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This method adds additional collection strategies for data collection purposes.\r\n * @param strategyCallbacks the list of data to collect with callbacks.\r\n */\r\n public addCollectionStrategies(...strategyCallbacks: IPerformanceViewerStrategyParameter[]) {\r\n // eslint-disable-next-line prefer-const\r\n for (let { strategyCallback, category, hidden } of strategyCallbacks) {\r\n const strategy = strategyCallback(this._scene);\r\n if (this._strategies.has(strategy.id)) {\r\n strategy.dispose();\r\n continue;\r\n }\r\n\r\n this.datasets.ids.push(strategy.id);\r\n\r\n if (category) {\r\n category = category.replace(new RegExp(ExportedDataSeparator, \"g\"), \"\");\r\n }\r\n\r\n this._datasetMeta.set(strategy.id, {\r\n color: this._getHexColorFromId(strategy.id),\r\n category,\r\n hidden,\r\n });\r\n\r\n this._strategies.set(strategy.id, strategy);\r\n }\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Gets a 6 character hexcode representing the colour from a passed in string.\r\n * @param id the string to get a hex code for.\r\n * @returns a hexcode hashed from the id.\r\n */\r\n private _getHexColorFromId(id: string) {\r\n // this first bit is just a known way of hashing a string.\r\n let hash = 0;\r\n for (let i = 0; i < id.length; i++) {\r\n // (hash << 5) - hash is the same as hash * 31\r\n hash = id.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n\r\n // then we build the string octet by octet.\r\n let hex = \"#\";\r\n for (let i = 0; i < NumberOfBitsInHexcode; i += 8) {\r\n const octet = (hash >> i) & 0xff;\r\n hex += (HexPadding + octet.toString(16)).substr(-2);\r\n }\r\n\r\n return hex;\r\n }\r\n\r\n /**\r\n * Collects data for every dataset by using the appropriate strategy. This is called every frame.\r\n * This method will then notify all observers with the latest slice.\r\n */\r\n private _collectDataAtFrame = () => {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n\r\n // add the starting index for the slice\r\n const numberOfIndices = this.datasets.startingIndices.itemLength;\r\n let startingIndex = 0;\r\n\r\n if (numberOfIndices > 0) {\r\n const previousStartingIndex = this.datasets.startingIndices.at(numberOfIndices - 1);\r\n startingIndex =\r\n previousStartingIndex + this.datasets.data.at(previousStartingIndex + PerformanceViewerCollector.NumberOfPointsOffset) + PerformanceViewerCollector.SliceDataOffset;\r\n }\r\n\r\n this.datasets.startingIndices.push(startingIndex);\r\n\r\n // add the first 2 items in our slice.\r\n this.datasets.data.push(timestamp);\r\n this.datasets.data.push(numPoints);\r\n\r\n // add the values inside the slice.\r\n this.datasets.ids.forEach((id: string) => {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n this.datasets.data.push(strategy.getData());\r\n });\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n slice.push(this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + i));\r\n }\r\n\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n };\r\n\r\n /**\r\n * Collects and then sends the latest slice to any observers by using the appropriate strategy when the user wants.\r\n * The slice will be of the form [timestamp, numberOfPoints, value1, value2...]\r\n * This method does not add onto the collected data accessible via the datasets variable.\r\n */\r\n public getCurrentSlice() {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n // add the values inside the slice.\r\n this.datasets.ids.forEach((id: string) => {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n slice.push(strategy.getData());\r\n }\r\n });\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n }\r\n\r\n /**\r\n * Updates a property for a dataset's metadata with the value provided.\r\n * @param id the id of the dataset which needs its metadata updated.\r\n * @param prop the property to update.\r\n * @param value the value to update the property with.\r\n */\r\n public updateMetadata<T extends keyof IPerfMetadata>(id: string, prop: T, value: IPerfMetadata[T]) {\r\n const meta = this._datasetMeta.get(id);\r\n\r\n if (!meta) {\r\n return;\r\n }\r\n\r\n meta[prop] = value;\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Completely clear, data, ids, and strategies saved to this performance collector.\r\n * @param preserveStringEventsRestore if it should preserve the string events, by default will clear string events registered when called.\r\n */\r\n public clear(preserveStringEventsRestore?: boolean) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.ids.length = 0;\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n if (!preserveStringEventsRestore) {\r\n this._eventRestoreSet.clear();\r\n }\r\n this._hasLoadedData = false;\r\n }\r\n\r\n /**\r\n * Accessor which lets the caller know if the performance collector has data loaded from a file or not!\r\n * Call clear() to reset this value.\r\n * @returns true if the data is loaded from a file, false otherwise.\r\n */\r\n public get hasLoadedData(): boolean {\r\n return this._hasLoadedData;\r\n }\r\n\r\n /**\r\n * Given a string containing file data, this function parses the file data into the datasets object.\r\n * It returns a boolean to indicate if this object was successfully loaded with the data.\r\n * @param data string content representing the file data.\r\n * @param keepDatasetMeta if it should use reuse the existing dataset metadata\r\n * @returns true if the data was successfully loaded, false otherwise.\r\n */\r\n public loadFromFileData(data: string, keepDatasetMeta?: boolean): boolean {\r\n const lines = data\r\n .replace(CarriageReturnRegex, \"\")\r\n .split(\"\\n\")\r\n .map((line) => line.split(\",\").filter((s) => s.length > 0))\r\n .filter((line) => line.length > 0);\r\n const timestampIndex = 0;\r\n const numPointsIndex = PerformanceViewerCollector.NumberOfPointsOffset;\r\n if (lines.length < 2) {\r\n return false;\r\n }\r\n\r\n const parsedDatasets: IPerfDatasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n\r\n // parse first line separately to populate ids!\r\n const [firstLine, ...dataLines] = lines;\r\n // make sure we have the correct beginning headers\r\n if (firstLine.length < 2 || firstLine[timestampIndex] !== TimestampColHeader || firstLine[numPointsIndex] !== NumPointsColHeader) {\r\n return false;\r\n }\r\n\r\n const idCategoryMap: Map<string, string> = new Map<string, string>();\r\n\r\n // populate the ids.\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < firstLine.length; i++) {\r\n const [id, category] = firstLine[i].split(ExportedDataSeparator);\r\n parsedDatasets.ids.push(id);\r\n idCategoryMap.set(id, category);\r\n }\r\n\r\n let startingIndex = 0;\r\n for (const line of dataLines) {\r\n if (line.length < 2) {\r\n return false;\r\n }\r\n\r\n const timestamp = parseFloat(line[timestampIndex]);\r\n const numPoints = parseInt(line[numPointsIndex]);\r\n\r\n if (isNaN(numPoints) || isNaN(timestamp)) {\r\n return false;\r\n }\r\n\r\n parsedDatasets.data.push(timestamp);\r\n parsedDatasets.data.push(numPoints);\r\n\r\n if (numPoints + PerformanceViewerCollector.SliceDataOffset !== line.length) {\r\n return false;\r\n }\r\n\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < line.length; i++) {\r\n const val = parseFloat(line[i]);\r\n if (isNaN(val)) {\r\n return false;\r\n }\r\n parsedDatasets.data.push(val);\r\n }\r\n\r\n parsedDatasets.startingIndices.push(startingIndex);\r\n startingIndex += line.length;\r\n }\r\n\r\n this.datasets.ids = parsedDatasets.ids;\r\n this.datasets.data = parsedDatasets.data;\r\n this.datasets.startingIndices = parsedDatasets.startingIndices;\r\n if (!keepDatasetMeta) {\r\n this._datasetMeta.clear();\r\n }\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n // populate metadata.\r\n if (!keepDatasetMeta) {\r\n for (const id of this.datasets.ids) {\r\n const category = idCategoryMap.get(id);\r\n\r\n this._datasetMeta.set(id, { category, color: this._getHexColorFromId(id) });\r\n }\r\n }\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n this._hasLoadedData = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Exports the datasets inside of the collector to a csv.\r\n */\r\n public exportDataToCsv() {\r\n let csvContent = \"\";\r\n // create the header line.\r\n csvContent += `${TimestampColHeader},${NumPointsColHeader}`;\r\n for (let i = 0; i < this.datasets.ids.length; i++) {\r\n csvContent += `,${this.datasets.ids[i]}`;\r\n if (this._datasetMeta) {\r\n const meta = this._datasetMeta.get(this.datasets.ids[i]);\r\n if (meta?.category) {\r\n csvContent += `${ExportedDataSeparator}${meta.category}`;\r\n }\r\n }\r\n }\r\n csvContent += \"\\n\";\r\n // create the data lines\r\n for (let i = 0; i < this.datasets.startingIndices.itemLength; i++) {\r\n const startingIndex = this.datasets.startingIndices.at(i);\r\n const timestamp = this.datasets.data.at(startingIndex);\r\n const numPoints = this.datasets.data.at(startingIndex + PerformanceViewerCollector.NumberOfPointsOffset);\r\n\r\n csvContent += `${timestamp},${numPoints}`;\r\n\r\n for (let offset = 0; offset < numPoints; offset++) {\r\n csvContent += `,${this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + offset)}`;\r\n }\r\n\r\n // add extra commas.\r\n for (let diff = 0; diff < this.datasets.ids.length - numPoints; diff++) {\r\n csvContent += \",\";\r\n }\r\n\r\n csvContent += \"\\n\";\r\n }\r\n\r\n const fileName = `${new Date().toISOString()}-perfdata.csv`;\r\n Tools.Download(new Blob([csvContent], { type: \"text/csv\" }), fileName);\r\n }\r\n /**\r\n * Starts the realtime collection of data.\r\n * @param shouldPreserve optional boolean param, if set will preserve the dataset between calls of start.\r\n */\r\n public start(shouldPreserve?: boolean) {\r\n if (!shouldPreserve) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._startingTimestamp = PrecisionDate.Now;\r\n } else if (this._startingTimestamp === undefined) {\r\n this._startingTimestamp = PrecisionDate.Now;\r\n }\r\n this._scene.onAfterRenderObservable.add(this._collectDataAtFrame);\r\n this._restoreStringEvents();\r\n this._isStarted = true;\r\n }\r\n\r\n /**\r\n * Stops the collection of data.\r\n */\r\n public stop() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._isStarted = false;\r\n }\r\n\r\n /**\r\n * Returns if the perf collector has been started or not.\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => {\r\n strategy.dispose();\r\n });\r\n this.datasetObservable.clear();\r\n this.metadataObservable.clear();\r\n this._isStarted = false;\r\n (<any>this.datasets) = null;\r\n }\r\n}\r\n"]}
|
package/Misc/arrayTools.js
CHANGED
|
@@ -96,7 +96,7 @@ export function _ObserveArray(array, callback) {
|
|
|
96
96
|
// Returns a function that unhook all the observed functions
|
|
97
97
|
return () => {
|
|
98
98
|
unObserveFunctions.forEach((unObserveFunction) => {
|
|
99
|
-
unObserveFunction
|
|
99
|
+
unObserveFunction?.();
|
|
100
100
|
});
|
|
101
101
|
};
|
|
102
102
|
}
|
package/Misc/arrayTools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrayTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/arrayTools.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAsBzD;;GAEG;AACH,MAAM,OAAO,UAAU;IACnB;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAI,IAAY,EAAE,WAAoB;QAC1D,MAAM,CAAC,GAAQ,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;SACzB;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAyC,IAAO,EAAE,WAAoB;QAC1F,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAQ,CAAC;IAC3D,CAAC;CACJ;AAQD;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,MAA8B,EAAE,YAAoB,EAAE,QAA0B;IAC3G,gCAAgC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;IAED,sEAAsE;IACtE,MAAM,WAAW,GAAG;QAChB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClE,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACvC,OAAO,WAAW,CAAC;IACvB,CAAQ,CAAC;IAET,yDAAyD;IACzD,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC;IAC/B,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;IAEnC,kDAAkD;IAClD,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;IAEnC,yCAAyC;IACzC,OAAO,GAAG,EAAE;QACR,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,kDAAkD;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,sEAAsE;QACtE,IAAI,IAAI,EAAE;YACN,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;QACD,4EAA4E;QAC5E,oCAAoC;aAC/B;YACD,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;YAC1B,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;SACnC;QAED,oDAAoD;QACpD,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC;QAC7B,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC;IACrC,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAI,KAAU,EAAE,QAA0B;IACnE,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3D,OAAO,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,OAAO,GAAG,EAAE;QACR,kBAAkB,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC7C,iBAAiB,
|
|
1
|
+
{"version":3,"file":"arrayTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/arrayTools.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAsBzD;;GAEG;AACH,MAAM,OAAO,UAAU;IACnB;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAI,IAAY,EAAE,WAAoB;QAC1D,MAAM,CAAC,GAAQ,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;SACzB;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAyC,IAAO,EAAE,WAAoB;QAC1F,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAQ,CAAC;IAC3D,CAAC;CACJ;AAQD;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,MAA8B,EAAE,YAAoB,EAAE,QAA0B;IAC3G,gCAAgC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;IAED,sEAAsE;IACtE,MAAM,WAAW,GAAG;QAChB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClE,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACvC,OAAO,WAAW,CAAC;IACvB,CAAQ,CAAC;IAET,yDAAyD;IACzD,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC;IAC/B,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;IAEnC,kDAAkD;IAClD,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;IAEnC,yCAAyC;IACzC,OAAO,GAAG,EAAE;QACR,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,kDAAkD;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,sEAAsE;QACtE,IAAI,IAAI,EAAE;YACN,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;QACD,4EAA4E;QAC5E,oCAAoC;aAC/B;YACD,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;YAC1B,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;SACnC;QAED,oDAAoD;QACpD,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC;QAC7B,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC;IACrC,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAI,KAAU,EAAE,QAA0B;IACnE,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3D,OAAO,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,OAAO,GAAG,EAAE;QACR,kBAAkB,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC7C,iBAAiB,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport type { Nullable } from \"../types\";\r\n\r\n/** @internal */\r\ninterface TupleTypes<T> {\r\n 2: [T, T];\r\n 3: [T, T, T];\r\n 4: [T, T, T, T];\r\n 5: [T, T, T, T, T];\r\n 6: [T, T, T, T, T, T];\r\n 7: [T, T, T, T, T, T, T];\r\n 8: [T, T, T, T, T, T, T, T];\r\n 9: [T, T, T, T, T, T, T, T, T];\r\n 10: [T, T, T, T, T, T, T, T, T, T];\r\n 11: [T, T, T, T, T, T, T, T, T, T, T];\r\n 12: [T, T, T, T, T, T, T, T, T, T, T, T];\r\n 13: [T, T, T, T, T, T, T, T, T, T, T, T, T];\r\n 14: [T, T, T, T, T, T, T, T, T, T, T, T, T, T];\r\n 15: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T];\r\n}\r\n\r\n/**\r\n * Class containing a set of static utilities functions for arrays.\r\n */\r\nexport class ArrayTools {\r\n /**\r\n * Returns an array of the given size filled with elements built from the given constructor and the parameters.\r\n * @param size the number of element to construct and put in the array.\r\n * @param itemBuilder a callback responsible for creating new instance of item. Called once per array entry.\r\n * @returns a new array filled with new objects.\r\n */\r\n public static BuildArray<T>(size: number, itemBuilder: () => T): Array<T> {\r\n const a: T[] = [];\r\n for (let i = 0; i < size; ++i) {\r\n a.push(itemBuilder());\r\n }\r\n return a;\r\n }\r\n\r\n /**\r\n * Returns a tuple of the given size filled with elements built from the given constructor and the parameters.\r\n * @param size he number of element to construct and put in the tuple.\r\n * @param itemBuilder a callback responsible for creating new instance of item. Called once per tuple entry.\r\n * @returns a new tuple filled with new objects.\r\n */\r\n public static BuildTuple<T, N extends keyof TupleTypes<unknown>>(size: N, itemBuilder: () => T): TupleTypes<T>[N] {\r\n return ArrayTools.BuildArray(size, itemBuilder) as any;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the callback type used when an observed array function is triggered.\r\n * @internal\r\n */\r\nexport type _ObserveCallback = (functionName: string, previousLength: number) => void;\r\n\r\n/**\r\n * Observes a function and calls the given callback when it is called.\r\n * @param object Defines the object the function to observe belongs to.\r\n * @param functionName Defines the name of the function to observe.\r\n * @param callback Defines the callback to call when the function is called.\r\n * @returns A function to call to stop observing\r\n */\r\nfunction _observeArrayfunction(object: { [key: string]: any }, functionName: string, callback: _ObserveCallback): Nullable<() => void> {\r\n // Finds the function to observe\r\n const oldFunction = object[functionName];\r\n if (typeof oldFunction !== \"function\") {\r\n return null;\r\n }\r\n\r\n // Creates a new function that calls the callback and the old function\r\n const newFunction = function () {\r\n const previousLength = object.length;\r\n const returnValue = newFunction.previous.apply(object, arguments);\r\n callback(functionName, previousLength);\r\n return returnValue;\r\n } as any;\r\n\r\n // Doublishly links the new function and the old function\r\n oldFunction.next = newFunction;\r\n newFunction.previous = oldFunction;\r\n\r\n // Replaces the old function with the new function\r\n object[functionName] = newFunction;\r\n\r\n // Returns a function to disable the hook\r\n return () => {\r\n // Only unhook if the function is still hooked\r\n const previous = newFunction.previous;\r\n if (!previous) {\r\n return;\r\n }\r\n\r\n // Finds the ref to the next function in the chain\r\n const next = newFunction.next;\r\n\r\n // If in the middle of the chain, link the previous and next functions\r\n if (next) {\r\n previous.next = next;\r\n next.previous = previous;\r\n }\r\n // If at the end of the chain, remove the reference to the previous function\r\n // and restore the previous function\r\n else {\r\n previous.next = undefined;\r\n object[functionName] = previous;\r\n }\r\n\r\n // Lose reference to the previous and next functions\r\n newFunction.next = undefined;\r\n newFunction.previous = undefined;\r\n };\r\n}\r\n\r\n/**\r\n * Defines the list of functions to proxy when observing an array.\r\n * The scope is currently reduced to the common functions used in the render target render list and the scene cameras.\r\n */\r\nconst observedArrayFunctions = [\"push\", \"splice\", \"pop\", \"shift\", \"unshift\"];\r\n\r\n/**\r\n * Observes an array and notifies the given observer when the array is modified.\r\n * @param array Defines the array to observe\r\n * @param callback Defines the function to call when the array is modified (in the limit of the observed array functions)\r\n * @returns A function to call to stop observing the array\r\n * @internal\r\n */\r\nexport function _ObserveArray<T>(array: T[], callback: _ObserveCallback) {\r\n // Observes all the required array functions and stores the unhook functions\r\n const unObserveFunctions = observedArrayFunctions.map((name) => {\r\n return _observeArrayfunction(array, name, callback);\r\n });\r\n\r\n // Returns a function that unhook all the observed functions\r\n return () => {\r\n unObserveFunctions.forEach((unObserveFunction) => {\r\n unObserveFunction?.();\r\n });\r\n };\r\n}\r\n"]}
|
package/Misc/basis.js
CHANGED
|
@@ -170,10 +170,9 @@ export const TranscodeAsync = (data, config) => {
|
|
|
170
170
|
* @param engine the engine to bind the texture in
|
|
171
171
|
*/
|
|
172
172
|
const BindTexture = (texture, engine) => {
|
|
173
|
-
|
|
174
|
-
let target = (_a = engine._gl) === null || _a === void 0 ? void 0 : _a.TEXTURE_2D;
|
|
173
|
+
let target = engine._gl?.TEXTURE_2D;
|
|
175
174
|
if (texture.isCube) {
|
|
176
|
-
target =
|
|
175
|
+
target = engine._gl?.TEXTURE_CUBE_MAP;
|
|
177
176
|
}
|
|
178
177
|
engine._bindTextureDirectly(target, texture, true);
|
|
179
178
|
};
|