Back to home page

EIC code displayed by LXR

 
 

    


Warning, /firebird/firebird-ng/src/app/services/perf.service.ts is written in an unsupported language. File is not indexed.

0001 // perf.service.ts (optimized snippet)
0002 import { Injectable } from '@angular/core';
0003 import { BehaviorSubject } from 'rxjs';
0004 import {WebGLRenderer} from "three";
0005 export interface PerfLog {
0006   fps: number;
0007   frameTime: number;  // Changed from 'cpu' to 'frameTime'
0008   calls: number;
0009   triangles: number;
0010 }
0011 
0012 @Injectable({
0013   providedIn: 'root',
0014 })
0015 export class PerfService {
0016   private perfSubject = new BehaviorSubject<PerfLog>({
0017     fps: 0,
0018     frameTime: 0,
0019     calls: 0,
0020     triangles: 0,
0021   });
0022   public perf$ = this.perfSubject.asObservable();
0023 
0024   private lastUpdateTime = performance.now();
0025   private frameCount = 0;
0026   private frameTimes: number[] = [];
0027   private readonly updateInterval = 250; // milliseconds
0028 
0029   public updateStats(renderer: WebGLRenderer, frameStartTime: number) {
0030     const now = performance.now();
0031     const thisFrameTime = now - frameStartTime;
0032 
0033     this.frameCount++;
0034     this.frameTimes.push(thisFrameTime);
0035 
0036     // Check if the interval has elapsed
0037     if (now - this.lastUpdateTime >= this.updateInterval) {
0038       const deltaSeconds = (now - this.lastUpdateTime) / 1000;
0039       const fps = this.frameCount / deltaSeconds;
0040 
0041       // Calculate average frame time
0042       const avgFrameTime = this.frameTimes.reduce((a, b) => a + b, 0) / this.frameTimes.length;
0043 
0044       // Read renderer info only once
0045       const info = renderer.info.render;
0046 
0047       // Update the metrics object
0048       const log: PerfLog = {
0049         fps: fps,
0050         frameTime: avgFrameTime,  // Now shows actual frame render time in ms
0051         calls: info.calls,
0052         triangles: info.triangles,
0053       };
0054 
0055       this.perfSubject.next(log);
0056 
0057       // Reset counters
0058       this.lastUpdateTime = now;
0059       this.frameCount = 0;
0060       this.frameTimes = [];
0061     }
0062   }
0063 }