openreplay/frontend/app/player/ios/PerformanceList.js
2021-05-01 15:12:01 +05:30

73 lines
No EOL
1.7 KiB
JavaScript

import {
createListState,
} from './lists';
const MIN_INTERVAL = 500;
const NAME_MAP = {
"mainThreadCPU": "cpu",
"batteryLevel": "battery",
"memoryUsage": "memory",
}
export default class PerformanceList {
_list = createListState()
availability = {
cpu: false,
memory: false,
battery: false,
}
get list() {
return this._list.list;
}
get count() {
return this._list.count;
}
moveToLast(t) {
this._list.moveToLast(t);
}
append(m) {
if (!["mainThreadCPU", "memoryUsage", "batteryLevel", "thermalState", "activeProcessorCount", "isLowPowerModeEnabled"].includes(m.name)) {
return;
}
let lastPoint = Object.assign({ time: 0, cpu: null, battery: null, memory: null }, this._list.last);
if (this._list.length === 0) {
this._list.append(lastPoint);
}
if (NAME_MAP[m.name] != null) {
this.availability[ NAME_MAP[m.name] ] = true;
if (lastPoint[NAME_MAP[m.name]] === null) {
this._list.forEach(p => p[NAME_MAP[m.name]] = m.value);
lastPoint[NAME_MAP[m.name]] = m.value;
}
}
const newPoint = Object.assign({}, lastPoint, {
time: m.time,
[ NAME_MAP[m.name] || m.name ]: m.value,
});
const dif = m.time - lastPoint.time;
const insertCount = Math.floor(dif/MIN_INTERVAL);
for (let i = 0; i < insertCount; i++){
const evalValue = (key) => lastPoint[key] + Math.floor((newPoint[key]-lastPoint[key])/insertCount*(i + 1))
this._list.append({
...lastPoint,
time: evalValue("time"),
cpu: evalValue("cpu") + (Math.floor(5*Math.random())-2),
battery: evalValue("battery"),
memory: evalValue("memory")*(1 + (0.1*Math.random() - 0.05)),
});
}
this._list.append(newPoint);
}
}