| OLD | NEW |
| 1 // CanvasRunner is a wrapper of PerformanceTests/resources/runner.js for canvas
tests. | 1 // CanvasRunner is a wrapper of PerformanceTests/resources/runner.js for canvas
tests. |
| 2 (function () { | 2 (function () { |
| 3 var MEASURE_DRAW_TIMES = 50; | 3 var MEASURE_DRAW_TIMES = 50; |
| 4 var MAX_MEASURE_DRAW_TIMES = 1000; | 4 var MAX_MEASURE_DRAW_TIMES = 1000; |
| 5 var MAX_MEASURE_TIME_PER_FRAME = 1000; // 1 sec | 5 var MAX_MEASURE_TIME_PER_FRAME = 1000; // 1 sec |
| 6 var currentTest = null; | 6 var currentTest = null; |
| 7 var isTestDone = false; | 7 var isTestDone = false; |
| 8 | 8 |
| 9 var CanvasRunner = {}; | 9 var CanvasRunner = {}; |
| 10 | 10 |
| 11 CanvasRunner.start = function (test) { | 11 CanvasRunner.start = function (test) { |
| 12 PerfTestRunner.prepareToMeasureValuesAsync({unit: 'runs/s', | 12 PerfTestRunner.prepareToMeasureValuesAsync({unit: 'runs/s', |
| 13 description: test.description, done: testDone}); | 13 description: test.description, done: testDone}); |
| 14 if (!test.doRun) { | 14 if (!test.doRun) { |
| 15 CanvasRunner.logFatalError("\ndoRun must be set.\n"); | 15 CanvasRunner.logFatalError("doRun must be set."); |
| 16 return; | 16 return; |
| 17 } | 17 } |
| 18 currentTest = test; | 18 currentTest = test; |
| 19 runTest(); | 19 runTest(); |
| 20 } | 20 } |
| 21 | 21 |
| 22 function runTest() { | 22 function runTest() { |
| 23 try { | 23 try { |
| 24 if (currentTest.preRun) | 24 if (currentTest.preRun) |
| 25 currentTest.preRun(); | 25 currentTest.preRun(); |
| 26 | 26 |
| 27 var start = PerfTestRunner.now(); | 27 var start = PerfTestRunner.now(); |
| 28 var count = 0; | 28 var count = 0; |
| 29 while ((PerfTestRunner.now() - start <= MAX_MEASURE_TIME_PER_FRAME)
&& (count * MEASURE_DRAW_TIMES < MAX_MEASURE_DRAW_TIMES)) { | 29 while ((PerfTestRunner.now() - start <= MAX_MEASURE_TIME_PER_FRAME)
&& (count * MEASURE_DRAW_TIMES < MAX_MEASURE_DRAW_TIMES)) { |
| 30 for (var i = 0; i < MEASURE_DRAW_TIMES; i++) { | 30 for (var i = 0; i < MEASURE_DRAW_TIMES; i++) { |
| 31 currentTest.doRun(); | 31 currentTest.doRun(); |
| 32 } | 32 } |
| 33 count++; | 33 count++; |
| 34 } | 34 } |
| 35 if (currentTest.ensureComplete) | 35 if (currentTest.ensureComplete) |
| 36 currentTest.ensureComplete(); | 36 currentTest.ensureComplete(); |
| 37 var elapsedTime = PerfTestRunner.now() - start; | 37 var elapsedTime = PerfTestRunner.now() - start; |
| 38 if (currentTest.postRun) | 38 if (currentTest.postRun) |
| 39 currentTest.postRun(); | 39 currentTest.postRun(); |
| 40 | 40 |
| 41 PerfTestRunner.measureValueAsync(MEASURE_DRAW_TIMES * count * 1000 /
elapsedTime); | 41 PerfTestRunner.measureValueAsync(MEASURE_DRAW_TIMES * count * 1000 /
elapsedTime); |
| 42 } catch(err) { | 42 } catch(err) { |
| 43 CanvasRunner.logFatalError("\ntest fails due to GPU issue. " + err +
"\n"); | 43 CanvasRunner.logFatalError("test fails due to GPU issue. " + err); |
| 44 return; | 44 return; |
| 45 } | 45 } |
| 46 | 46 |
| 47 if (!isTestDone) | 47 if (!isTestDone) |
| 48 requestAnimationFrame(runTest); | 48 requestAnimationFrame(runTest); |
| 49 } | 49 } |
| 50 | 50 |
| 51 function testDone() { | 51 function testDone() { |
| 52 isTestDone = true; | 52 isTestDone = true; |
| 53 } | 53 } |
| 54 | 54 |
| 55 CanvasRunner.logFatalError = function (text) { | 55 CanvasRunner.logFatalError = function (text) { |
| 56 PerfTestRunner.logFatalError(text); | 56 PerfTestRunner.logFatalError(text); |
| 57 } | 57 } |
| 58 | 58 |
| 59 CanvasRunner.startPlayingAndWaitForVideo = function (video, callback) { |
| 60 var gotPlaying = false; |
| 61 var gotTimeUpdate = false; |
| 62 |
| 63 var maybeCallCallback = function() { |
| 64 if (gotPlaying && gotTimeUpdate && callback) { |
| 65 callback(video); |
| 66 callback = undefined; |
| 67 video.removeEventListener('playing', playingListener, true); |
| 68 video.removeEventListener('timeupdate', timeupdateListener, true
); |
| 69 } |
| 70 }; |
| 71 |
| 72 var playingListener = function() { |
| 73 gotPlaying = true; |
| 74 maybeCallCallback(); |
| 75 }; |
| 76 |
| 77 var timeupdateListener = function() { |
| 78 // Checking to make sure the current time has advanced beyond |
| 79 // the start time seems to be a reliable heuristic that the |
| 80 // video element has data that can be consumed. |
| 81 if (video.currentTime > 0.0) { |
| 82 gotTimeUpdate = true; |
| 83 maybeCallCallback(); |
| 84 } |
| 85 }; |
| 86 |
| 87 video.addEventListener('playing', playingListener, true); |
| 88 video.addEventListener('timeupdate', timeupdateListener, true); |
| 89 video.loop = true; |
| 90 video.play(); |
| 91 } |
| 92 |
| 59 window.CanvasRunner = CanvasRunner; | 93 window.CanvasRunner = CanvasRunner; |
| 60 })(); | 94 })(); |
| OLD | NEW |