browser/metro/base/tests/mochiperf/browser_apzc.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/metro/base/tests/mochiperf/browser_apzc.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,225 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +"use strict";
     1.8 +
     1.9 +function test() {
    1.10 +  requestLongerTimeout(2);
    1.11 +  runTests();
    1.12 +}
    1.13 +
    1.14 +function setup() {
    1.15 +  PanelUI.hide();
    1.16 +
    1.17 +  if (!BrowserUI.isStartTabVisible) {
    1.18 +    let tab = yield addTab("about:start");
    1.19 +
    1.20 +    yield waitForCondition(() => BrowserUI.isStartTabVisible);
    1.21 +
    1.22 +    yield hideContextUI();
    1.23 +  }
    1.24 +
    1.25 +  BookmarksTestHelper.setup();
    1.26 +  HistoryTestHelper.setup();
    1.27 +}
    1.28 +
    1.29 +function tearDown() {
    1.30 +  PanelUI.hide();
    1.31 +  BookmarksTestHelper.restore();
    1.32 +  HistoryTestHelper.restore();
    1.33 +  Browser.selectedTab
    1.34 +         .browser
    1.35 +         .contentWindow
    1.36 +         .QueryInterface(Ci.nsIInterfaceRequestor)
    1.37 +         .getInterface(Ci.nsIDOMWindowUtils).clearNativeTouchSequence();
    1.38 +}
    1.39 +
    1.40 +/*
    1.41 + * short up/down touch scroll. This test isn't affected by
    1.42 + * skate or stationary apzc prefs provided the display port
    1.43 + * is twice the height of the screen. Measures apzc/composition
    1.44 + * perf since the display port (should) only render once.
    1.45 + */
    1.46 +gTests.push({
    1.47 +  desc: "short up/down touch scroll",
    1.48 +  run: function run() {
    1.49 +    yield addTab(chromeRoot + "res/scroll_test.html");
    1.50 +    yield hideContextUI();
    1.51 +    yield hideNavBar();
    1.52 +
    1.53 +    let stopwatch = new StopWatch();
    1.54 +    let win = Browser.selectedTab.browser.contentWindow;
    1.55 +    let domUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
    1.56 +    var touchdrag = new TouchDragAndHold();
    1.57 +    touchdrag.useNativeEvents = true;
    1.58 +    touchdrag.stepTimeout = 5;
    1.59 +    touchdrag.numSteps = 20;
    1.60 +
    1.61 +    stopwatch.start();
    1.62 +    let recordingHandle = domUtils.startFrameTimeRecording();
    1.63 +    for (let count = 0; count < 5; count++) {
    1.64 +      yield touchdrag.start(win, 100, (win.innerHeight - 50), 100, 50);
    1.65 +      touchdrag.end();
    1.66 +      yield touchdrag.start(win, 100, 50, 100, (win.innerHeight - 50));
    1.67 +      touchdrag.end();
    1.68 +    }
    1.69 +    let intervals = domUtils.stopFrameTimeRecording(recordingHandle);
    1.70 +    let msec = stopwatch.stop();
    1.71 +
    1.72 +
    1.73 +    PerfTest.declareTest("14C693E5-3ED3-4A5D-93BC-A31F130A8CDE",
    1.74 +                          "touch scroll window", "graphics", "apzc",
    1.75 +                          "Measures performance of up/down apzc scrolling within a window using FTR.");
    1.76 +    PerfTest.declareFrameRateResult(intervals.length, msec, "fps");
    1.77 +  }
    1.78 +});
    1.79 +
    1.80 +/*
    1.81 + * Long scroll a page of text, which will include repainting
    1.82 + * content.
    1.83 + */
    1.84 +gTests.push({
    1.85 +  desc: "touch scroll",
    1.86 +  run: function run() {
    1.87 +    yield addTab(chromeRoot + "res/scroll_test_tall.html");
    1.88 +    yield hideContextUI();
    1.89 +    yield hideNavBar();
    1.90 +
    1.91 +    let stopwatch = new StopWatch();
    1.92 +    let win = Browser.selectedTab.browser.contentWindow;
    1.93 +    let domUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
    1.94 +    var touchdrag = new TouchDragAndHold();
    1.95 +    touchdrag.useNativeEvents = true;
    1.96 +    touchdrag.stepTimeout = 5;
    1.97 +    touchdrag.numSteps = 20;
    1.98 +
    1.99 +    stopwatch.start();
   1.100 +    let recordingHandle = domUtils.startFrameTimeRecording();
   1.101 +    for (let count = 0; count < 5; count++) {
   1.102 +      yield touchdrag.start(win, 100, (win.innerHeight - 50), 100, 50);
   1.103 +      touchdrag.end();
   1.104 +    }
   1.105 +    let intervals = domUtils.stopFrameTimeRecording(recordingHandle);
   1.106 +    let msec = stopwatch.stop();
   1.107 +
   1.108 +
   1.109 +    PerfTest.declareTest("4546F318-DC1B-4225-9196-D5196C87982A",
   1.110 +                          "touch scroll text", "graphics", "apzc",
   1.111 +                          "Measures performance of apzc scrolling for a large page of text using FTR.");
   1.112 +    PerfTest.declareFrameRateResult(intervals.length, msec, "fps");
   1.113 +  }
   1.114 +});
   1.115 +
   1.116 +/*
   1.117 + * Fling a page of text downward over a set of iterations
   1.118 + * taking measurements for each fling. Content will repaint
   1.119 + * and includes measurements that cover fling logic/prefs.
   1.120 + */
   1.121 +gTests.push({
   1.122 +  desc: "fling scroll",
   1.123 +  run: function run() {
   1.124 +    yield addTab(chromeRoot + "res/scroll_test_tall.html");
   1.125 +    yield hideContextUI();
   1.126 +    yield hideNavBar();
   1.127 +
   1.128 +    let stopwatch = new StopWatch();
   1.129 +    let win = Browser.selectedTab.browser.contentWindow;
   1.130 +    let domUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
   1.131 +    var touchdrag = new TouchDragAndHold();
   1.132 +    touchdrag.useNativeEvents = true;
   1.133 +    touchdrag.stepTimeout = 5;
   1.134 +    touchdrag.numSteps = 10;
   1.135 +
   1.136 +    let iterations = 3;
   1.137 +    let sets = [];
   1.138 +    for (let count = 0; count < iterations; count++) {
   1.139 +      let obsPromise = waitForObserver("apzc-transform-end", 30000);
   1.140 +      stopwatch.start();
   1.141 +      let recordingHandle = domUtils.startFrameTimeRecording();
   1.142 +      yield touchdrag.start(win, 100, (win.innerHeight - 50), 100, 50);
   1.143 +      touchdrag.end();
   1.144 +      yield obsPromise;
   1.145 +      let intervals = domUtils.stopFrameTimeRecording(recordingHandle);
   1.146 +      let msec = stopwatch.stop();
   1.147 +      sets[count] = {
   1.148 +        bands: PerfTest.computeHighLowBands(intervals, .1),
   1.149 +        frameRate: intervals.length / (msec / 1000.0)
   1.150 +      };
   1.151 +      yield waitForMs(300);
   1.152 +    }
   1.153 +
   1.154 +    let frameRate = 0, low = 0, ave = 0, high = 0;
   1.155 +    for (let count = 0; count < iterations; count++) {
   1.156 +      frameRate += sets[count].frameRate;
   1.157 +      low += sets[count].bands.low;
   1.158 +      ave += sets[count].bands.ave;
   1.159 +      high += sets[count].bands.high;
   1.160 +
   1.161 +    }
   1.162 +    frameRate /= iterations;
   1.163 +    low /= iterations;
   1.164 +    ave /= iterations;
   1.165 +    high /= iterations;
   1.166 +
   1.167 +    PerfTest.declareTest("A8EDF0D6-562B-4C4A-AC6B-1E4900FE0EE9",
   1.168 +                          "fling text", "graphics", "apzc",
   1.169 +                          "Measures frame rate of apzc fling for a large page of text using FTR.");
   1.170 +    PerfTest.declareNumericalResult(frameRate, "fps");
   1.171 +
   1.172 +    PerfTest.declareTest("F5E83238-383F-4665-8415-878AA027B4A3",
   1.173 +                          "fling jank", "graphics", "apzc",
   1.174 +                          "Displays the low, high, and average FTR frame intervals when flinging a page of text.");
   1.175 +    PerfTest.declareNumericalResults([
   1.176 +      { value: low, desc: "low" },
   1.177 +      { value: high, desc: "high", shareAxis: 0 },
   1.178 +      { value: ave, desc: "average", shareAxis: 0 }
   1.179 +    ]);
   1.180 +  }
   1.181 +});
   1.182 +
   1.183 +/*
   1.184 + * touch scroll the about:start page back and forth averaging
   1.185 + * values across the entire set. Generally about:start should
   1.186 + * only need to be painted once. Exercises composition and apzc.
   1.187 + */
   1.188 +gTests.push({
   1.189 +  desc: "touch scroll start",
   1.190 +  setUp: setup,
   1.191 +  tearDown: tearDown,
   1.192 +  run: function run() {
   1.193 +    let stopwatch = new StopWatch();
   1.194 +    let win = Browser.selectedTab.browser.contentWindow;
   1.195 +    let domUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
   1.196 +
   1.197 +    var touchdrag = new TouchDragAndHold();
   1.198 +    touchdrag.useNativeEvents = true;
   1.199 +    touchdrag.stepTimeout = 5;
   1.200 +    touchdrag.numSteps = 20;
   1.201 +
   1.202 +    stopwatch.start();
   1.203 +    let recordingHandle = domUtils.startFrameTimeRecording();
   1.204 +    for (let count = 0; count < 5; count++) {
   1.205 +      yield touchdrag.start(win, (win.innerWidth - 50), (win.innerHeight - 50), 50, (win.innerHeight - 50));
   1.206 +      touchdrag.end();
   1.207 +      yield touchdrag.start(win, 50, (win.innerHeight - 50), (win.innerWidth - 50), (win.innerHeight - 50));
   1.208 +      touchdrag.end();
   1.209 +    }
   1.210 +    let intervals = domUtils.stopFrameTimeRecording(recordingHandle);
   1.211 +    let msec = stopwatch.stop();
   1.212 +
   1.213 +    PerfTest.declareTest("24C693E5-3ED3-4A5D-93BC-A31F130A8CDE",
   1.214 +                          "touch scroll about:start", "graphics", "apzc",
   1.215 +                          "Measures performance of apzc scrolling for about:start using FTR.");
   1.216 +    PerfTest.declareFrameRateResult(intervals.length, msec, "fps");
   1.217 +
   1.218 +    let results = PerfTest.computeHighLowBands(intervals, .1);
   1.219 +    PerfTest.declareTest("2E60F8B5-8925-4628-988E-E4C0BC6B34C7",
   1.220 +                          "about:start jank", "graphics", "apzc",
   1.221 +                          "Displays the low, high, and average FTR frame intervals for about:start.");
   1.222 +    PerfTest.declareNumericalResults([
   1.223 +      { value: results.low, desc: "low" },
   1.224 +      { value: results.high, desc: "high", shareAxis: 0 },
   1.225 +      { value: results.ave, desc: "average", shareAxis: 0 }
   1.226 +    ]);
   1.227 +  }
   1.228 +});

mercurial