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