| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (function () { |
| var MEASURE_DRAW_TIMES = 50; |
| var MAX_MEASURE_DRAW_TIMES = 1000; |
| var MAX_MEASURE_TIME_PER_FRAME = 1000; // 1 sec |
| var currentTest = null; |
| var isTestDone = false; |
| |
| var CanvasRunner = {}; |
| |
| CanvasRunner.startPlayingAndWaitForVideo = function (video, callback) { |
| var gotPlaying = false; |
| var gotTimeUpdate = false; |
| |
| var maybeCallCallback = function() { |
| if (gotPlaying && gotTimeUpdate && callback) { |
| callback(video); |
| callback = undefined; |
| video.removeEventListener('playing', playingListener, true); |
| video.removeEventListener('timeupdate', timeupdateListener, true); |
| } |
| }; |
| |
| var playingListener = function() { |
| gotPlaying = true; |
| maybeCallCallback(); |
| }; |
| |
| var timeupdateListener = function() { |
| // Checking to make sure the current time has advanced beyond |
| // the start time seems to be a reliable heuristic that the |
| // video element has data that can be consumed. |
| if (video.currentTime > 0.0) { |
| gotTimeUpdate = true; |
| maybeCallCallback(); |
| } |
| }; |
| |
| video.addEventListener('playing', playingListener, true); |
| video.addEventListener('timeupdate', timeupdateListener, true); |
| video.loop = true; |
| video.play(); |
| } |
| |
| CanvasRunner.gc = function () { |
| if (window.GCController) |
| window.GCController.collectAll(); |
| else { |
| function gcRec(n) { |
| if (n < 1) |
| return {}; |
| var temp = {i: "ab" + i + (i / 100000)}; |
| temp += "foo"; |
| gcRec(n-1); |
| } |
| for (var i = 0; i < 1000; i++) |
| gcRec(10); |
| } |
| }; |
| window.CanvasRunner = CanvasRunner; |
| })(); |