forked from NativeScript/NativeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfps-meter.ts
More file actions
92 lines (74 loc) · 1.73 KB
/
fps-meter.ts
File metadata and controls
92 lines (74 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import fpsNative = require("fps-meter/fps-native");
var callbacks = {},
idCounter = 0,
_minFps = 1000,
framesRendered = 0,
frameStartTime = 0;
function doFrame(currentTimeMillis: number) {
var fps = 0;
if (frameStartTime > 0) {
// take the span in milliseconds
var timeSpan = (currentTimeMillis - frameStartTime);
framesRendered++;
if (timeSpan > 1000) {
fps = framesRendered * 1000 / timeSpan;
if (fps < _minFps) {
_minFps = fps;
}
notify(fps);
frameStartTime = currentTimeMillis;
framesRendered = 0;
}
} else {
frameStartTime = currentTimeMillis;
}
}
var native: fpsNative.FPSCallback;
function ensureNative() {
if (!native) {
native = new fpsNative.FPSCallback(doFrame);
}
}
export function reset() {
_minFps = 1000;
frameStartTime = 0;
framesRendered = 0;
}
export function running(): boolean {
if (!native) {
return false;
}
return native.running;
}
export function minFps(): number {
return _minFps;
}
export function start() {
ensureNative();
native.start();
}
export function stop() {
if (!native) {
return;
}
native.stop();
reset();
}
export function addCallback(callback: (fps: number, minFps?: number) => void): number {
var id = idCounter;
callbacks[id] = callback;
idCounter++;
return id;
}
export function removeCallback(id: number) {
if (id in callbacks) {
delete callbacks[id];
}
}
function notify(fps) {
var callback: Function;
for (var id in callbacks) {
callback = callbacks[id];
callback(fps, _minFps);
}
}