| # Copyright (c) 2012 The Chromium OS 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 logging, os, shutil, time, urllib |
| from autotest_lib.client.bin import utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros import cros_ui, cros_ui_test, graphics_ui_test |
| from autotest_lib.client.cros import httpd |
| |
| class graphics_WebGLPerformance(graphics_ui_test.GraphicsUITest): |
| version = 1 |
| |
| def initialize(self, creds='$default'): |
| self._test_url = 'http://localhost:8000/webgl-performance-tests.html' |
| self._testServer = httpd.HTTPListener(8000, docroot=self.srcdir) |
| self._testServer.run() |
| graphics_ui_test.GraphicsUITest.initialize(self, creds, |
| extra_chrome_flags=['--enable-webgl']) |
| |
| def setup(self, tarball='webgl-performance-0.0.1.tar.bz2'): |
| shutil.rmtree(self.srcdir, ignore_errors=True) |
| tarball_path = os.path.join(self.bindir, tarball) |
| if not os.path.exists(self.srcdir): |
| if not os.path.exists(tarball_path): |
| utils.get_file( |
| 'http://commondatastorage.googleapis.com/' |
| 'chromeos-localmirror/distfiles/' + tarball, |
| tarball_path) |
| os.mkdir(self.srcdir) |
| utils.extract_tarball_to_dir(tarball_path, self.srcdir) |
| os.chdir(self.srcdir) |
| utils.system('patch -p2 < ../webgl-performance-0.0.1.patch') |
| shutil.copy('../favicon.ico', self.srcdir) |
| |
| def cleanup(self): |
| self._testServer.stop() |
| graphics_ui_test.GraphicsUITest.cleanup(self) |
| |
| def run_once(self, timeout=600): |
| # TODO(ihf): Remove when stable. For now we have to expect crashes. |
| self.crash_blacklist.append('chrome') |
| self.crash_blacklist.append('chromium') |
| |
| latch = self._testServer.add_wait_url('/WebGL/results') |
| # Loading the url might take longer than pyauto automation timeout. |
| # Temporarily increment pyauto timeout. |
| pyauto_timeout_changer = self.pyauto.ActionTimeoutChanger( |
| self.pyauto, timeout * 1000) |
| logging.info('Going to %s' % self._test_url) |
| # TODO(ihf): Use the pyauto perf mechanisms to calm the system down. |
| utils.system('sync') |
| time.sleep(10.0) |
| self.pyauto.NavigateToURL(self._test_url) |
| del pyauto_timeout_changer |
| latch.wait(timeout) |
| |
| if not latch.is_set(): |
| raise error.TestFail('Timeout after ' + str(timeout) + |
| ' seconds - never received callback from browser.') |
| |
| # Receive data from webgl-performance-tests.html::postFinalResults. |
| results = self._testServer.get_form_entries() |
| time_ms_geom_mean = float(results['time_ms_geom_mean']) |
| |
| # Output numbers for plotting by harness. |
| keyvals = {} |
| keyvals['time_ms_geom_mean'] = time_ms_geom_mean |
| logging.info('WebGLPerformance: time_ms_geom_mean = %f'\ |
| % time_ms_geom_mean) |
| self.write_perf_keyval(keyvals) |
| |
| # Write transmitted summary to graphics_WebGLPerformance/summary.html. |
| summary = urllib.unquote_plus(results['summary']) |
| logging.info('\n' + summary) |
| results_path = os.path.join(self.bindir, |
| "../../results/default/graphics_WebGLPerformance/summary.html") |
| f = open(results_path, 'w+') |
| f.write(summary) |
| f.close() |
| # Allow somebody to take a look at the screen. |
| time.sleep(10.0) |
| |