Chromium Code Reviews| Index: tools/telemetry/examples/gpu_mapsgl_endurance_browsertest.py |
| diff --git a/tools/telemetry/examples/gpu_mapsgl_endurance_browsertest.py b/tools/telemetry/examples/gpu_mapsgl_endurance_browsertest.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..2e3af398b9b03fee80c549142d2c4c17f458778b |
| --- /dev/null |
| +++ b/tools/telemetry/examples/gpu_mapsgl_endurance_browsertest.py |
| @@ -0,0 +1,101 @@ |
| +#!/usr/bin/env python |
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +import os |
| +import sys |
| +import time |
| +import json |
| + |
| +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
| +import telemetry |
| + |
| +def ReadTestExpectations(json_test_expectations_path): |
| + f = open(json_test_expectations_path, 'r') |
| + json_contents = json.load(f) |
| + return json_contents |
| + |
| +def CompareToExpectedResults(snapshot, expectations): |
| + result = True |
| + for expectation in expectations: |
| + location = expectation["location"] |
| + iter_result = snapshot.CheckPixelColor(location[0], location[1], |
| + expectation["color"], expectation["tolerance"]) |
| + if not iter_result: |
| + print("FAILURE: Expected", location, "to be", expectation["color"], |
| + "but got", snapshot.GetPixel(location[0], location[1])) |
| + result &= iter_result |
| + return result |
| + |
| +def RunSingleTest(browser, |
| + url, |
| + json_test_expectations_filename, |
| + failure_filename_prefix): |
| + expectations = ReadTestExpectations(json_test_expectations_filename) |
| + |
| + #TODO: BringBrowserWindowToFront? |
|
Ken Russell (switch to Gerrit)
2012/11/09 20:26:28
TODOs require a contact person. http://google-styl
|
| + #TODO: browser.window.SetBounds? |
| + |
| + with browser.ConnectToNthTab(0) as tab: |
| + tab.page.Navigate(url) |
| + time.sleep(2) # Why is this needed? |
| + tab.WaitForDocumentReadyStateToBeComplete() |
| + |
| + if tab.runtime.Evaluate('window.chrome.gpuBenchmarking === undefined'): |
| + print 'Browser does not support gpu benchmarks API.' |
| + return 255 |
| + |
| + if tab.runtime.Evaluate( |
| + 'window.chrome.gpuBenchmarking.windowSnapshot === undefined'): |
| + print 'Browser does not support window snapshot API.' |
| + return 255 |
| + |
| + # Mock up the message queue functionality used by the mapping test |
|
Ken Russell (switch to Gerrit)
2012/11/09 20:26:28
Please use periods after comments. It makes them e
|
| + tab.runtime.Evaluate(""" |
| + if(!window.domAutomationController) { |
| + window.domAutomationController = {}; |
| + } |
| + window.domAutomationController.message_queue = []; |
| + window.domAutomationController.setAutomationId = function(id) {} |
| + window.domAutomationController.send = function(val) { |
| + window.domAutomationController.message_queue.push(val); |
| + } |
| + """) |
| + |
| + def CheckMessages(): |
| + message = tab.runtime.Evaluate( |
| + "window.domAutomationController.message_queue.shift();") |
| + return message == "FINISHED" |
| + |
| + telemetry.WaitFor(CheckMessages, 1000, 0.5) |
| + |
| + snapshot = tab.SnapshotContent() |
| + if not snapshot: |
| + print "Failed to capture snapshot" |
| + return 255 |
| + |
| + all_pixels_match = CompareToExpectedResults(snapshot, expectations) |
| + |
| + if not all_pixels_match: |
| + print "Color check failed at end of test" |
| + snapshot.WriteFile(failure_filename_prefix + "-output.png") |
| + return 1 |
| + |
| + return 0 |
| + |
| +def Main(args): |
| + options = telemetry.BrowserOptions() |
| + parser = options.CreateParser('snapshot_test.py') |
| + options, args = parser.parse_args(args) |
| + |
| + options.extra_browser_args.append('--enable-gpu-benchmarking') |
| + browser_to_create = telemetry.FindBrowser(options) |
| + assert browser_to_create |
| + with browser_to_create.Create() as browser: |
| + return RunSingleTest(browser, |
| + "http://localhost:8000/basic.html", |
| + "mapsgl_single_run_basic_expectations.json", |
| + "single-run-basic") |
| + |
| +if __name__ == '__main__': |
| + sys.exit(Main(sys.argv[1:])) |