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 +});