Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8873)

Unified Diff: chrome/test/data/perf/latency_suite.html

Issue 8883005: Input latency performance test that uses tracing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cmp, nduca feedback Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/perf/latency_suite.html
diff --git a/chrome/test/data/perf/latency_suite.html b/chrome/test/data/perf/latency_suite.html
new file mode 100644
index 0000000000000000000000000000000000000000..e4ecedc1c7cf710ccc6867f71fa1f29ed231a249
--- /dev/null
+++ b/chrome/test/data/perf/latency_suite.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<script type="text/javascript">
+var frameCountWarmup = 5;
nduca 2011/12/21 20:24:23 You might want a /** * @fileoverview Blahblahblah
jbates 2011/12/22 02:41:17 Done.
+var frameCount = 0;
+var numFrames = 0;
+var inputDirty = false;
+var inputHeavy = false;
+var rafHeavy = false;
+var paintHeavy = false;
+var mode = "webgl";
nduca 2011/12/21 20:24:23 single quotes in js
jbates 2011/12/22 02:41:17 Done.
+var delayTimeMS = 0;
+var canvasWidth = 0;
+var clearColorGreen = 0;
+var gl = null;
+var mouse_x = 0;
nduca 2011/12/21 20:24:23 mouseX, expect_y
jbates 2011/12/22 02:41:17 Done.
+var expect_y = 0;
+
+function getParam(key) {
nduca 2011/12/21 20:24:23 You'd be better served having this return a dictio
jbates 2011/12/22 02:41:17 Done.
+ var query = window.location.href.split('?')[1];
nduca 2011/12/21 20:24:23 window.location.query.substring(1)?
jbates 2011/12/22 02:41:17 Done.
+ if(!query)
nduca 2011/12/21 20:24:23 On your linux box, run gjslint --strict --check_ht
jbates 2011/12/22 02:41:17 Done.
+ return "";
+ var params = query.split('&');
+ for(var i = 0, len = params.length; i < len; i++) {
+ var pair = params[i].split('=');
+ if (key == pair[0])
+ return pair[1];
+ }
+ return "";
+}
+
+function parseParams() {
+ numFrames = parseInt(getParam("numFrames"));
+ expect_y = parseInt(getParam("y"));
+ inputDirty = (getParam("inputDirty") == "true");
+ inputHeavy = (getParam("inputHeavy") == "true");
+ rafHeavy = (getParam("rafHeavy") == "true");
+ paintHeavy = (getParam("paintHeavy") == "true");
nduca 2011/12/21 20:24:23 So you have to put &paintHeavy=true in the uri? Wh
jbates 2011/12/22 02:41:17 Done.
+ mode = getParam("mode");
+ delayTimeMS = parseInt(getParam("delayTimeMS"));
+ canvasWidth = parseInt(getParam("canvasWidth"));
+ clearColorGreen = parseInt(getParam("clearColorGreen"));
+}
+
+function setCoordinates(e) {
+ // Ignore mouse events with wrong Y coordinate.
+ if (e.clientY != expect_y)
+ return;
+
+ mouse_x = e.clientX;
+ if (inputDirty) {
+ document.getElementById("text").firstChild.nodeValue =
nduca 2011/12/21 20:24:23 nodeValue -> textContent
jbates 2011/12/22 02:41:17 Done.
+ mouse_x.toString();
+ }
+ if (inputHeavy) {
+ delay(delayTimeMS);
+ }
+}
+
+function init() {
+ parseParams();
+
+ if (mode == "webgl") {
+ var canvas = document.getElementById("canvas");
+ if (!canvas)
+ return false;
+ canvas.width = canvasWidth;
+ canvas.height = canvasWidth;
+ try {
+ gl = canvas.getContext("webgl", { antialias: true });
+ } catch(e) {}
+ if (!gl) {
+ try {
+ gl = canvas.getContext("experimental-webgl");
+ } catch(e) {
+ return false;
+ }
+ }
+ return true;
+ } else if (mode == "software") {
+ var table = document.getElementById("table");
+ table.style.backgroundColor = '#ff00ff';
+ return true;
+ }
+}
+
+function runTest() {
nduca 2011/12/21 20:24:23 by the name, i assumed this was called by dom auto
jbates 2011/12/22 02:41:17 Done.
+ if (init())
+ window.webkitRequestAnimationFrame(draw);
+ else
+ endTest();
+}
+
+function delay(milliseconds) {
nduca 2011/12/21 20:24:23 s/delay/sleep/?
jbates 2011/12/22 02:41:17 Done.
+ var start = new Date();
+ var now = null;
+ do { now = new Date(); }
nduca 2011/12/21 20:24:23 I think you can do this as two lines: var start =
jbates 2011/12/22 02:41:17 Done.
+ while (now - start < milliseconds);
+}
+
+function xColorString() {
nduca 2011/12/21 20:24:23 pass in x_ instead and give this a sane name? Or j
jbates 2011/12/22 02:41:17 Done.
+ var hexColor = mouse_x.toString(16);
+ var color = "#000000";
+ return color.substring(0, 7 - hexColor.length) + hexColor;
+}
+
+function draw() {
+ frameCount++;
+ if (frameCount == numFrames) {
+ endTest();
+ }
+
+ if (rafHeavy) {
+ delay(delayTimeMS);
+ }
+
+ if (mode == "webgl") {
+ gl.viewport(0, 0, canvasWidth, canvasWidth);
+ if (paintHeavy) {
+ gl.clearColor(0, 0, 0.0, 1.0);
+ for (var i = 0; i < 1000; ++i)
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ }
+ gl.clearColor(mouse_x, clearColorGreen, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ } else if (mode == "software") {
+ var table = document.getElementById("table");
+ table.style.backgroundColor = xColorString();
+ // When no inputs are coming in, the first table won't change. Since we
+ // still need to cause a paint, toggle the color of another element:
+ var table2 = document.getElementById("table2");
+ table2.style.backgroundColor = (frameCount & 1) ? 'red' : 'black';
+ if (paintHeavy) {
+ var body = document.getElementById("body");
+ body.style.backgroundColor = (frameCount & 1) ? 'black' : 'red';
+ }
+ }
+
+ window.webkitRequestAnimationFrame(draw);
+}
+
+function endTest() {
+ domAutomationController.setAutomationId(1);
+ domAutomationController.send("FINISHED");
+}
+</script>
+</head>
+<body id="body" style="margin:0px" onload="runTest()"
+ onmousemove="setCoordinates(event)">
+<table id="table" width="10" height="10"><tr/></table>
nduca 2011/12/21 20:24:23 Any reason you're using a table rather than just a
jbates 2011/12/22 02:41:17 div didn't maintain its size for some reason, so I
+<table id="table2" width="10" height="10"><tr/></table>
+<canvas id="canvas" width="10" height="10"></canvas>
nduca 2011/12/21 20:24:23 why initialize widths here if you initialize it up
jbates 2011/12/22 02:41:17 Done.
+<p><b id="text">x</b></p>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698