Skip to content

Commit e3a3573

Browse files
committed
rewrite slighly
1 parent a03402e commit e3a3573

File tree

2 files changed

+37
-18
lines changed

2 files changed

+37
-18
lines changed

addons/fps/userscript.js

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,49 @@
11
import addSmallStageClass from "../../libraries/common/cs/small-stage.js";
22

33
export default async function ({ addon, console, msg }) {
4-
await new Promise((resolve) => {
5-
if (addon.tab.traps.vm.editingTarget) return resolve();
6-
addon.tab.traps.vm.runtime.once("PROJECT_LOADED", resolve);
7-
});
8-
9-
const renderer = addon.tab.traps.vm.runtime.renderer;
4+
const { vm } = addon.tab.traps;
5+
const { runtime } = vm;
6+
if (!vm.editingTarget) {
7+
await new Promise((resolve) => runtime.once("PROJECT_LOADED", resolve));
8+
}
109

1110
let fpsCounterElement = document.createElement("span");
1211
fpsCounterElement.className = "fps-counter";
13-
1412
addon.tab.displayNoneWhileDisabled(fpsCounterElement);
1513
addSmallStageClass();
1614

1715
const renderTimes = [];
18-
var fps = "?";
19-
var lastFps = 0;
20-
var firstTime = -1;
16+
let lastFps = 0;
17+
let wasRunning = false;
2118

22-
renderer.ogDraw = renderer.draw;
19+
const { renderer } = runtime;
20+
const _draw = renderer.draw;
2321
renderer.draw = function () {
24-
const now = Date.now();
25-
while (renderTimes.length > 0 && renderTimes[0] <= now - 2000) renderTimes.shift();
22+
_draw.call(this);
23+
24+
// Every time this function is ran, store the current time and remove times from half a second ago
25+
const now = runtime.currentMSecs;
26+
while (renderTimes.length > 0 && renderTimes[0] <= now - 500) renderTimes.shift();
27+
// Calculate FPS times of each render frame.
28+
const allFps = renderTimes.map((time, i) => 1000 / ((renderTimes[i + 1] ?? now) - time));
2629
renderTimes.push(now);
27-
fps = Math.floor(renderTimes.length / 2);
28-
if (firstTime === -1) firstTime = now;
29-
if (now - firstTime <= 2500) fps = "?";
30+
let fps = 0;
31+
if (allFps.length !== 0) {
32+
// Average FPS times.
33+
fps = Math.round(allFps.reduce((prev, curr) => prev + curr, 0) / allFps.length);
34+
}
35+
36+
// Show/Hide the element based on if there are any threads running
37+
if (runtime.threads.length === 0) {
38+
if (wasRunning) fpsCounterElement.classList.remove("show");
39+
wasRunning = false;
40+
return;
41+
}
42+
if (!wasRunning) fpsCounterElement.classList.add("show");
43+
wasRunning = true;
44+
45+
// Update element text
3046
if (fps !== lastFps) fpsCounterElement.innerText = msg("fpsCounter", { fps: (lastFps = fps) });
31-
renderer.ogDraw();
3247
};
3348

3449
while (true) {

addons/fps/userstyle.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66
padding: 0.25rem;
77
user-select: none;
88
color: #0fbd8c;
9-
display: flex;
9+
display: none;
1010
align-items: center;
1111
}
1212

13+
.fps-counter.show {
14+
display: flex;
15+
}
16+
1317
.sa-small-stage .fps-counter {
1418
display: none;
1519
}

0 commit comments

Comments
 (0)