<!DOCTYPE HTML> <html> <!-- Bug 1171489 - Tests if the framerate actor does not record timestamps from multiple frames. --> <head> <meta charset="utf-8"> <title>Framerate actor test</title> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"> </head> <body> <pre id="test"> <script> window.onload = function() { SimpleTest.waitForExplicitFinish(); var {FramerateFront} = require("devtools/shared/fronts/framerate"); var {TargetFactory} = require("devtools/client/framework/target"); var url = document.getElementById("testContent").href; attachURL(url, onTab); function onTab(_, client, form, contentDoc) { var contentWin = contentDoc.defaultView; var chromeWin = Services.wm.getMostRecentWindow("navigator:browser"); var selectedTab = chromeWin.gBrowser.selectedTab; var target = TargetFactory.forTab(selectedTab); var front = FramerateFront(client, form); front.startRecording().then(() => { window.setTimeout(() => { // Wait for the iframe to be loaded again window.addEventListener("message", function loaded (event) { if (event.data === "ready") { window.removeEventListener("message", loaded); window.setTimeout(() => { front.stopRecording().then(ticks => { onRecordingStopped(client, ticks); }); }, 1000); } }); contentWin.location.reload(); }, 1000); }); } function onRecordingStopped(client, ticks) { var diffs = []; info(`Got ${ticks.length} ticks.`); for (var i = 1; i < ticks.length; i++) { var prev = ticks[i - 1]; var curr = ticks[i]; diffs.push(curr - prev); info(curr + " - " + (curr - prev)); } // 1000 / 60 => 16.666... so we shouldn't get more than diffs of 16.66.. but // when we get ticks from other frames they're usually at diffs of < 1. Sometimes // ticks can still be less than 16ms even on one frame (usually following a very slow // frame), so use a low number (2) to be our threshold var THRESHOLD = 2; ok(ticks.length >= 20, "we should have atleast 20 ticks over the course of two seconds."); var belowThreshold = diffs.filter(v => v <= THRESHOLD); ok(belowThreshold.length <= 10, "we should have very few frames less than the threshold"); client.close().then(() => { DebuggerServer.destroy(); SimpleTest.finish() }); } } </script> </pre> <a id="testContent" target="_blank" href="inspector-traversal-data.html">Test Document</a> </body> </html>