123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509 |
- import { Tools } from "../Misc/tools.js";
- import { PerfCounter } from "../Misc/perfCounter.js";
- /**
- * This class can be used to get instrumentation data from a Babylon engine
- * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#sceneinstrumentation
- */
- export class SceneInstrumentation {
- // Properties
- /**
- * Gets the perf counter used for active meshes evaluation time
- */
- get activeMeshesEvaluationTimeCounter() {
- return this._activeMeshesEvaluationTime;
- }
- /**
- * Gets the active meshes evaluation time capture status
- */
- get captureActiveMeshesEvaluationTime() {
- return this._captureActiveMeshesEvaluationTime;
- }
- /**
- * Enable or disable the active meshes evaluation time capture
- */
- set captureActiveMeshesEvaluationTime(value) {
- if (value === this._captureActiveMeshesEvaluationTime) {
- return;
- }
- this._captureActiveMeshesEvaluationTime = value;
- if (value) {
- this._onBeforeActiveMeshesEvaluationObserver = this.scene.onBeforeActiveMeshesEvaluationObservable.add(() => {
- Tools.StartPerformanceCounter("Active meshes evaluation");
- this._activeMeshesEvaluationTime.beginMonitoring();
- });
- this._onAfterActiveMeshesEvaluationObserver = this.scene.onAfterActiveMeshesEvaluationObservable.add(() => {
- Tools.EndPerformanceCounter("Active meshes evaluation");
- this._activeMeshesEvaluationTime.endMonitoring(false);
- });
- }
- else {
- this.scene.onBeforeActiveMeshesEvaluationObservable.remove(this._onBeforeActiveMeshesEvaluationObserver);
- this._onBeforeActiveMeshesEvaluationObserver = null;
- this.scene.onAfterActiveMeshesEvaluationObservable.remove(this._onAfterActiveMeshesEvaluationObserver);
- this._onAfterActiveMeshesEvaluationObserver = null;
- }
- }
- /**
- * Gets the perf counter used for render targets render time
- */
- get renderTargetsRenderTimeCounter() {
- return this._renderTargetsRenderTime;
- }
- /**
- * Gets the render targets render time capture status
- */
- get captureRenderTargetsRenderTime() {
- return this._captureRenderTargetsRenderTime;
- }
- /**
- * Enable or disable the render targets render time capture
- */
- set captureRenderTargetsRenderTime(value) {
- if (value === this._captureRenderTargetsRenderTime) {
- return;
- }
- this._captureRenderTargetsRenderTime = value;
- if (value) {
- this._onBeforeRenderTargetsRenderObserver = this.scene.onBeforeRenderTargetsRenderObservable.add(() => {
- Tools.StartPerformanceCounter("Render targets rendering");
- this._renderTargetsRenderTime.beginMonitoring();
- });
- this._onAfterRenderTargetsRenderObserver = this.scene.onAfterRenderTargetsRenderObservable.add(() => {
- Tools.EndPerformanceCounter("Render targets rendering");
- this._renderTargetsRenderTime.endMonitoring(false);
- });
- }
- else {
- this.scene.onBeforeRenderTargetsRenderObservable.remove(this._onBeforeRenderTargetsRenderObserver);
- this._onBeforeRenderTargetsRenderObserver = null;
- this.scene.onAfterRenderTargetsRenderObservable.remove(this._onAfterRenderTargetsRenderObserver);
- this._onAfterRenderTargetsRenderObserver = null;
- }
- }
- /**
- * Gets the perf counter used for particles render time
- */
- get particlesRenderTimeCounter() {
- return this._particlesRenderTime;
- }
- /**
- * Gets the particles render time capture status
- */
- get captureParticlesRenderTime() {
- return this._captureParticlesRenderTime;
- }
- /**
- * Enable or disable the particles render time capture
- */
- set captureParticlesRenderTime(value) {
- if (value === this._captureParticlesRenderTime) {
- return;
- }
- this._captureParticlesRenderTime = value;
- if (value) {
- this._onBeforeParticlesRenderingObserver = this.scene.onBeforeParticlesRenderingObservable.add(() => {
- Tools.StartPerformanceCounter("Particles");
- this._particlesRenderTime.beginMonitoring();
- });
- this._onAfterParticlesRenderingObserver = this.scene.onAfterParticlesRenderingObservable.add(() => {
- Tools.EndPerformanceCounter("Particles");
- this._particlesRenderTime.endMonitoring(false);
- });
- }
- else {
- this.scene.onBeforeParticlesRenderingObservable.remove(this._onBeforeParticlesRenderingObserver);
- this._onBeforeParticlesRenderingObserver = null;
- this.scene.onAfterParticlesRenderingObservable.remove(this._onAfterParticlesRenderingObserver);
- this._onAfterParticlesRenderingObserver = null;
- }
- }
- /**
- * Gets the perf counter used for sprites render time
- */
- get spritesRenderTimeCounter() {
- return this._spritesRenderTime;
- }
- /**
- * Gets the sprites render time capture status
- */
- get captureSpritesRenderTime() {
- return this._captureSpritesRenderTime;
- }
- /**
- * Enable or disable the sprites render time capture
- */
- set captureSpritesRenderTime(value) {
- if (value === this._captureSpritesRenderTime) {
- return;
- }
- this._captureSpritesRenderTime = value;
- if (!this.scene.spriteManagers) {
- return;
- }
- if (value) {
- this._onBeforeSpritesRenderingObserver = this.scene.onBeforeSpritesRenderingObservable.add(() => {
- Tools.StartPerformanceCounter("Sprites");
- this._spritesRenderTime.beginMonitoring();
- });
- this._onAfterSpritesRenderingObserver = this.scene.onAfterSpritesRenderingObservable.add(() => {
- Tools.EndPerformanceCounter("Sprites");
- this._spritesRenderTime.endMonitoring(false);
- });
- }
- else {
- this.scene.onBeforeSpritesRenderingObservable.remove(this._onBeforeSpritesRenderingObserver);
- this._onBeforeSpritesRenderingObserver = null;
- this.scene.onAfterSpritesRenderingObservable.remove(this._onAfterSpritesRenderingObserver);
- this._onAfterSpritesRenderingObserver = null;
- }
- }
- /**
- * Gets the perf counter used for physics time
- */
- get physicsTimeCounter() {
- return this._physicsTime;
- }
- /**
- * Gets the physics time capture status
- */
- get capturePhysicsTime() {
- return this._capturePhysicsTime;
- }
- /**
- * Enable or disable the physics time capture
- */
- set capturePhysicsTime(value) {
- if (value === this._capturePhysicsTime) {
- return;
- }
- if (!this.scene.onBeforePhysicsObservable) {
- return;
- }
- this._capturePhysicsTime = value;
- if (value) {
- this._onBeforePhysicsObserver = this.scene.onBeforePhysicsObservable.add(() => {
- Tools.StartPerformanceCounter("Physics");
- this._physicsTime.beginMonitoring();
- });
- this._onAfterPhysicsObserver = this.scene.onAfterPhysicsObservable.add(() => {
- Tools.EndPerformanceCounter("Physics");
- this._physicsTime.endMonitoring();
- });
- }
- else {
- this.scene.onBeforePhysicsObservable.remove(this._onBeforePhysicsObserver);
- this._onBeforePhysicsObserver = null;
- this.scene.onAfterPhysicsObservable.remove(this._onAfterPhysicsObserver);
- this._onAfterPhysicsObserver = null;
- }
- }
- /**
- * Gets the perf counter used for animations time
- */
- get animationsTimeCounter() {
- return this._animationsTime;
- }
- /**
- * Gets the animations time capture status
- */
- get captureAnimationsTime() {
- return this._captureAnimationsTime;
- }
- /**
- * Enable or disable the animations time capture
- */
- set captureAnimationsTime(value) {
- if (value === this._captureAnimationsTime) {
- return;
- }
- this._captureAnimationsTime = value;
- if (value) {
- this._onAfterAnimationsObserver = this.scene.onAfterAnimationsObservable.add(() => {
- this._animationsTime.endMonitoring();
- });
- }
- else {
- this.scene.onAfterAnimationsObservable.remove(this._onAfterAnimationsObserver);
- this._onAfterAnimationsObserver = null;
- }
- }
- /**
- * Gets the perf counter used for frame time capture
- */
- get frameTimeCounter() {
- return this._frameTime;
- }
- /**
- * Gets the frame time capture status
- */
- get captureFrameTime() {
- return this._captureFrameTime;
- }
- /**
- * Enable or disable the frame time capture
- */
- set captureFrameTime(value) {
- this._captureFrameTime = value;
- }
- /**
- * Gets the perf counter used for inter-frames time capture
- */
- get interFrameTimeCounter() {
- return this._interFrameTime;
- }
- /**
- * Gets the inter-frames time capture status
- */
- get captureInterFrameTime() {
- return this._captureInterFrameTime;
- }
- /**
- * Enable or disable the inter-frames time capture
- */
- set captureInterFrameTime(value) {
- this._captureInterFrameTime = value;
- }
- /**
- * Gets the perf counter used for render time capture
- */
- get renderTimeCounter() {
- return this._renderTime;
- }
- /**
- * Gets the render time capture status
- */
- get captureRenderTime() {
- return this._captureRenderTime;
- }
- /**
- * Enable or disable the render time capture
- */
- set captureRenderTime(value) {
- if (value === this._captureRenderTime) {
- return;
- }
- this._captureRenderTime = value;
- if (value) {
- this._onBeforeDrawPhaseObserver = this.scene.onBeforeDrawPhaseObservable.add(() => {
- this._renderTime.beginMonitoring();
- Tools.StartPerformanceCounter("Main render");
- });
- this._onAfterDrawPhaseObserver = this.scene.onAfterDrawPhaseObservable.add(() => {
- this._renderTime.endMonitoring(false);
- Tools.EndPerformanceCounter("Main render");
- });
- }
- else {
- this.scene.onBeforeDrawPhaseObservable.remove(this._onBeforeDrawPhaseObserver);
- this._onBeforeDrawPhaseObserver = null;
- this.scene.onAfterDrawPhaseObservable.remove(this._onAfterDrawPhaseObserver);
- this._onAfterDrawPhaseObserver = null;
- }
- }
- /**
- * Gets the perf counter used for camera render time capture
- */
- get cameraRenderTimeCounter() {
- return this._cameraRenderTime;
- }
- /**
- * Gets the camera render time capture status
- */
- get captureCameraRenderTime() {
- return this._captureCameraRenderTime;
- }
- /**
- * Enable or disable the camera render time capture
- */
- set captureCameraRenderTime(value) {
- if (value === this._captureCameraRenderTime) {
- return;
- }
- this._captureCameraRenderTime = value;
- if (value) {
- this._onBeforeCameraRenderObserver = this.scene.onBeforeCameraRenderObservable.add((camera) => {
- this._cameraRenderTime.beginMonitoring();
- Tools.StartPerformanceCounter(`Rendering camera ${camera.name}`);
- });
- this._onAfterCameraRenderObserver = this.scene.onAfterCameraRenderObservable.add((camera) => {
- this._cameraRenderTime.endMonitoring(false);
- Tools.EndPerformanceCounter(`Rendering camera ${camera.name}`);
- });
- }
- else {
- this.scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver);
- this._onBeforeCameraRenderObserver = null;
- this.scene.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver);
- this._onAfterCameraRenderObserver = null;
- }
- }
- /**
- * Gets the perf counter used for draw calls
- */
- get drawCallsCounter() {
- return this.scene.getEngine()._drawCalls;
- }
- /**
- * Instantiates a new scene instrumentation.
- * This class can be used to get instrumentation data from a Babylon engine
- * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#sceneinstrumentation
- * @param scene Defines the scene to instrument
- */
- constructor(
- /**
- * Defines the scene to instrument
- */
- scene) {
- this.scene = scene;
- this._captureActiveMeshesEvaluationTime = false;
- this._activeMeshesEvaluationTime = new PerfCounter();
- this._captureRenderTargetsRenderTime = false;
- this._renderTargetsRenderTime = new PerfCounter();
- this._captureFrameTime = false;
- this._frameTime = new PerfCounter();
- this._captureRenderTime = false;
- this._renderTime = new PerfCounter();
- this._captureInterFrameTime = false;
- this._interFrameTime = new PerfCounter();
- this._captureParticlesRenderTime = false;
- this._particlesRenderTime = new PerfCounter();
- this._captureSpritesRenderTime = false;
- this._spritesRenderTime = new PerfCounter();
- this._capturePhysicsTime = false;
- this._physicsTime = new PerfCounter();
- this._captureAnimationsTime = false;
- this._animationsTime = new PerfCounter();
- this._captureCameraRenderTime = false;
- this._cameraRenderTime = new PerfCounter();
- // Observers
- this._onBeforeActiveMeshesEvaluationObserver = null;
- this._onAfterActiveMeshesEvaluationObserver = null;
- this._onBeforeRenderTargetsRenderObserver = null;
- this._onAfterRenderTargetsRenderObserver = null;
- this._onAfterRenderObserver = null;
- this._onBeforeDrawPhaseObserver = null;
- this._onAfterDrawPhaseObserver = null;
- this._onBeforeAnimationsObserver = null;
- this._onBeforeParticlesRenderingObserver = null;
- this._onAfterParticlesRenderingObserver = null;
- this._onBeforeSpritesRenderingObserver = null;
- this._onAfterSpritesRenderingObserver = null;
- this._onBeforePhysicsObserver = null;
- this._onAfterPhysicsObserver = null;
- this._onAfterAnimationsObserver = null;
- this._onBeforeCameraRenderObserver = null;
- this._onAfterCameraRenderObserver = null;
- // Before render
- this._onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {
- if (this._captureActiveMeshesEvaluationTime) {
- this._activeMeshesEvaluationTime.fetchNewFrame();
- }
- if (this._captureRenderTargetsRenderTime) {
- this._renderTargetsRenderTime.fetchNewFrame();
- }
- if (this._captureFrameTime) {
- Tools.StartPerformanceCounter("Scene rendering");
- this._frameTime.beginMonitoring();
- }
- if (this._captureInterFrameTime) {
- this._interFrameTime.endMonitoring();
- }
- if (this._captureParticlesRenderTime) {
- this._particlesRenderTime.fetchNewFrame();
- }
- if (this._captureSpritesRenderTime) {
- this._spritesRenderTime.fetchNewFrame();
- }
- if (this._captureAnimationsTime) {
- this._animationsTime.beginMonitoring();
- }
- if (this._captureRenderTime) {
- this._renderTime.fetchNewFrame();
- }
- if (this._captureCameraRenderTime) {
- this._cameraRenderTime.fetchNewFrame();
- }
- this.scene.getEngine()._drawCalls.fetchNewFrame();
- });
- // After render
- this._onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {
- if (this._captureFrameTime) {
- Tools.EndPerformanceCounter("Scene rendering");
- this._frameTime.endMonitoring();
- }
- if (this._captureRenderTime) {
- this._renderTime.endMonitoring(false);
- }
- if (this._captureInterFrameTime) {
- this._interFrameTime.beginMonitoring();
- }
- if (this._captureActiveMeshesEvaluationTime) {
- this._activeMeshesEvaluationTime.endFrame();
- }
- if (this._captureRenderTargetsRenderTime) {
- this._renderTargetsRenderTime.endFrame();
- }
- if (this._captureParticlesRenderTime) {
- this._particlesRenderTime.endFrame();
- }
- if (this._captureSpritesRenderTime) {
- this._spritesRenderTime.endFrame();
- }
- if (this._captureRenderTime) {
- this._renderTime.endFrame();
- }
- if (this._captureCameraRenderTime) {
- this._cameraRenderTime.endFrame();
- }
- });
- }
- /**
- * Dispose and release associated resources.
- */
- dispose() {
- this.scene.onAfterRenderObservable.remove(this._onAfterRenderObserver);
- this._onAfterRenderObserver = null;
- this.scene.onBeforeActiveMeshesEvaluationObservable.remove(this._onBeforeActiveMeshesEvaluationObserver);
- this._onBeforeActiveMeshesEvaluationObserver = null;
- this.scene.onAfterActiveMeshesEvaluationObservable.remove(this._onAfterActiveMeshesEvaluationObserver);
- this._onAfterActiveMeshesEvaluationObserver = null;
- this.scene.onBeforeRenderTargetsRenderObservable.remove(this._onBeforeRenderTargetsRenderObserver);
- this._onBeforeRenderTargetsRenderObserver = null;
- this.scene.onAfterRenderTargetsRenderObservable.remove(this._onAfterRenderTargetsRenderObserver);
- this._onAfterRenderTargetsRenderObserver = null;
- this.scene.onBeforeAnimationsObservable.remove(this._onBeforeAnimationsObserver);
- this._onBeforeAnimationsObserver = null;
- this.scene.onBeforeParticlesRenderingObservable.remove(this._onBeforeParticlesRenderingObserver);
- this._onBeforeParticlesRenderingObserver = null;
- this.scene.onAfterParticlesRenderingObservable.remove(this._onAfterParticlesRenderingObserver);
- this._onAfterParticlesRenderingObserver = null;
- if (this._onBeforeSpritesRenderingObserver) {
- this.scene.onBeforeSpritesRenderingObservable.remove(this._onBeforeSpritesRenderingObserver);
- this._onBeforeSpritesRenderingObserver = null;
- }
- if (this._onAfterSpritesRenderingObserver) {
- this.scene.onAfterSpritesRenderingObservable.remove(this._onAfterSpritesRenderingObserver);
- this._onAfterSpritesRenderingObserver = null;
- }
- this.scene.onBeforeDrawPhaseObservable.remove(this._onBeforeDrawPhaseObserver);
- this._onBeforeDrawPhaseObserver = null;
- this.scene.onAfterDrawPhaseObservable.remove(this._onAfterDrawPhaseObserver);
- this._onAfterDrawPhaseObserver = null;
- if (this._onBeforePhysicsObserver) {
- this.scene.onBeforePhysicsObservable.remove(this._onBeforePhysicsObserver);
- this._onBeforePhysicsObserver = null;
- }
- if (this._onAfterPhysicsObserver) {
- this.scene.onAfterPhysicsObservable.remove(this._onAfterPhysicsObserver);
- this._onAfterPhysicsObserver = null;
- }
- this.scene.onAfterAnimationsObservable.remove(this._onAfterAnimationsObserver);
- this._onAfterAnimationsObserver = null;
- this.scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver);
- this._onBeforeCameraRenderObserver = null;
- this.scene.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver);
- this._onAfterCameraRenderObserver = null;
- this.scene = null;
- }
- }
- //# sourceMappingURL=sceneInstrumentation.js.map
|