import ListWalker from 'Player/common/ListWalker'; import type { IosPerformanceEvent } from 'Player/web/messages'; const performanceEvTypes = { MemoryUsage: 'memoryUsage', MainThreadCPU: 'mainThreadCPU', Background: 'background', }; export type PerformanceChartPoint = { time: number; cpu: number | null; memory: number | null; isBackground: boolean; }; export default class IOSPerformanceTrackManager extends ListWalker { private chart: Array = []; private isInBg = false; lastData: { cpu: number | null; memory: number | null } = { cpu: null, memory: null, }; append(msg: IosPerformanceEvent): void { if (!Object.values(performanceEvTypes).includes(msg.name)) { return console.log('Unsupported performance event type', msg.name); } let cpu: number | null = null; let memory: number | null = null; if (msg.time < 0) msg.time = 1; if (msg.name === performanceEvTypes.Background) { // @ts-ignore const isBackground = msg.value === 1; if (isBackground === this.isInBg) return; this.isInBg = isBackground; this.chart.push({ time: msg.time, cpu: null, memory: null, isBackground, }); return super.append(msg); } if (msg.name === performanceEvTypes.MemoryUsage) { memory = msg.value; cpu = this.lastData.cpu; this.lastData.memory = memory; } if (msg.name === performanceEvTypes.MainThreadCPU) { cpu = msg.value; memory = this.lastData.memory; this.lastData.cpu = cpu; } this.chart.push({ time: msg.time, cpu, memory, isBackground: false, }); super.append(msg); } get chartData(): Array { return this.chart; } }