Skip to content

Commit 35e8801

Browse files
committed
perf stuff
1 parent 3202565 commit 35e8801

File tree

2 files changed

+148
-134
lines changed

2 files changed

+148
-134
lines changed

js/perf-harness.js

Lines changed: 63 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
var PerfHarness = (function(undefined) {
1+
const PerfHarness = (function(undefined) {
22

33
const g = {
44
count: 1,
55
elapsedTime: 0,
66
targetFPS: 50,
77
targetTime: 1,
8-
velocity: 1,
8+
velocity: 200,
99
direction: 1,
1010
frames: [],
1111
};
1212

13-
var countHistory = [];
14-
var totalCount = 0;
15-
var countIndex = 0;
16-
var skipFrames = 0;
17-
var framesToAverage;
18-
var then;
19-
var callback;
20-
var canvas;
21-
22-
var getNow = (function() {
23-
var fn;
24-
var obj;
13+
const countHistory = [];
14+
let totalCount = 0;
15+
let countIndex = 0;
16+
let skipFrames = 0;
17+
let framesToAverage;
18+
let then;
19+
let callback;
20+
let canvas;
21+
22+
const getNow = (function() {
23+
let fn;
24+
let obj;
2525
if (window.performance) {
2626
obj = window.performance;
2727
fn = window.performance.now ||
@@ -38,62 +38,86 @@ var PerfHarness = (function(undefined) {
3838
};
3939
}());
4040

41-
var test = function() {
42-
var now = getNow();
41+
const elapsedTimes = [0, 0, 0, 0, 0, 0];
42+
let totalElapsedTime = 0;
43+
let elapsedTimeCursor = 0;
44+
let averageElapsedTime = 0;
45+
let highestElapsedTime = 0;
46+
const recordElapsedTime = function() {
47+
totalElapsedTime -= elapsedTimes[elapsedTimeCursor] + g.elapsedTime;
48+
elapsedTimes[elapsedTimeCursor] = g.elapsedTime;
49+
elapsedTimeCursor = (elapsedTimeCursor + 1) % elapsedTimes.length;
50+
averageElapsedTime = totalElapsedTime / elapsedTimes.length;
51+
highestElapsedTime = 0;
52+
for (let i = 0; i < elapsedTimes.length; ++i) {
53+
highestElapsedTime = Math.max(highestElapsedTime, elapsedTimes[i]);
54+
}
55+
};
56+
57+
const accelerating = function() {
58+
if (highestElapsedTime > g.targetTime) {
59+
g.count -= g.velocity * 2;
60+
//g.velocity = 100;//Math.max(1, g.velocity / 4 | 0);
61+
g.waitFrameCount = elapsedTimes.length * 2;
62+
state = waitingForStableFramerate;
63+
return;
64+
}
65+
//g.velocity = 100;//g.velocity * 1.01 + 1 | 0;
66+
g.count += g.velocity;
67+
};
68+
69+
const waitingForStableFramerate = function() {
70+
--g.waitFrameCount;
71+
if (g.waitFrameCount < 0) {
72+
state = accelerating;
73+
}
74+
};
75+
76+
let state = accelerating;
77+
78+
const test = function() {
79+
const now = getNow();
4380
g.elapsedTime = now - then;
4481
then = now;
45-
var desiredDirection = (g.elapsedTime < g.targetTime) ? 1 : -1;
46-
if (g.direction != desiredDirection) {
47-
g.direction = desiredDirection;
48-
g.velocity = Math.max(Math.abs(Math.floor(g.velocity / 4)), 1) * g.direction;
49-
if (g.direction < 0) {
50-
skipFrames = 3;
51-
}
52-
} else if (skipFrames) {
53-
--skipFrames;
54-
} else {
55-
g.velocity *= 2;
56-
}
82+
recordElapsedTime();
83+
state();
5784

5885
if (g.frames.length < 1000) {
5986
g.frames.push(g.elapsedTime);
6087
}
6188

62-
g.count += g.velocity;
63-
g.count = Math.max(1, g.count);
64-
6589
totalCount -= countHistory[countIndex];
6690
totalCount += g.count;
6791
countHistory[countIndex] = g.count;
6892
countIndex = (countIndex + 1) % framesToAverage;
6993

70-
callback(g.count, Math.floor(totalCount / framesToAverage), g.elapsedTime);
94+
callback(g.count, Math.floor(totalCount / framesToAverage), g.elapsedTime, g.velocity);
7195

7296
requestAnimationFrame(test, canvas);
7397
};
7498

75-
var getTargetFPS = function() {
76-
return targetFPS;
99+
const getTargetFPS = function() {
100+
return g.targetFPS;
77101
};
78102

79-
var setTargetFPS = function(_targetFPS) {
103+
const setTargetFPS = function(_targetFPS) {
80104
g.targetFPS = _targetFPS;
81105
g.targetTime = 1 / g.targetFPS;
82106
};
83107

84-
var start = function(_canvas, _callback, opt_framesToAverage, opt_targetFPS) {
108+
const start = function(_canvas, _callback, opt_framesToAverage, opt_targetFPS) {
85109
canvas = _canvas;
86110
callback = _callback;
87111

88112
framesToAverage = opt_framesToAverage || 60;
89113

90-
for (var ii = 0; ii < framesToAverage; ++ii) {
114+
for (let ii = 0; ii < framesToAverage; ++ii) {
91115
countHistory.push(0);
92116
}
93117

94118
if (opt_targetFPS || !g.targetTime) {
95119
opt_targetFPS = opt_targetFPS || 50; // we use 50 instead of 60 since timing is bad.
96-
setTargetFPS(opt_targetFPS)
120+
setTargetFPS(opt_targetFPS);
97121
}
98122

99123
then = getNow();
@@ -109,6 +133,6 @@ var PerfHarness = (function(undefined) {
109133
// This is here for debugging
110134
g: g,
111135

112-
endMarker: undefined
136+
endMarker: undefined,
113137
};
114138
}());

0 commit comments

Comments
 (0)