| Index: tools/playback_benchmark/playback_driver.py
|
| diff --git a/tools/playback_benchmark/playback_driver.py b/tools/playback_benchmark/playback_driver.py
|
| deleted file mode 100644
|
| index ef6c7b4e4ef2ca05de29c1bdec8986287fc90adb..0000000000000000000000000000000000000000
|
| --- a/tools/playback_benchmark/playback_driver.py
|
| +++ /dev/null
|
| @@ -1,195 +0,0 @@
|
| -# Copyright (c) 2011 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.
|
| -"""Playback driver."""
|
| -
|
| -import cgi
|
| -import simplejson as json
|
| -import os
|
| -import string
|
| -import sys
|
| -import threading
|
| -import urlparse
|
| -
|
| -START_PAGE = """<html>
|
| - <script type="text/javascript">
|
| -var runCount = $run_count;
|
| -var results = [];
|
| -
|
| -function run() {
|
| - var wnd = window.open('?resource=start_page_popup', '',
|
| - 'width=$width, height=$height');
|
| - var timerId = setInterval(function() {
|
| - wnd.postMessage('ping', '$target_origin');
|
| - }, 300);
|
| - var handleMessage = function(event) {
|
| - clearInterval(timerId);
|
| - wnd.close();
|
| - document.writeln('<div>' + event.data + '</div>');
|
| - results.push(event.data);
|
| - runCount -= 1;
|
| - window.removeEventListener('message', handleMessage);
|
| - if (runCount > 0) {
|
| - run();
|
| - } else {
|
| - var xmlHttpRequest = new XMLHttpRequest();
|
| - xmlHttpRequest.open("POST", '/benchmark/', true);
|
| - xmlHttpRequest.setRequestHeader("Content-type", "application/json");
|
| - xmlHttpRequest.send(JSON.stringify({results: results}));
|
| - }
|
| - }
|
| - window.addEventListener('message', handleMessage, false);
|
| -}
|
| -
|
| -run();
|
| - </script>
|
| -</html>
|
| -"""
|
| -
|
| -START_PAGE_POPUP = """<html>
|
| - <script type="text/javascript">
|
| -window.setTimeout(function() {
|
| - console.log(window.innerWidth, window.innerHeight);
|
| - if (window.innerWidth == $width && window.innerHeight == $height) {
|
| - window.location = '$start_url';
|
| - } else {
|
| - window.resizeBy($width - window.innerWidth, $height - window.innerHeight);
|
| - window.location = window.location;
|
| - }
|
| -}, 200);
|
| - </script>
|
| -</html>
|
| -"""
|
| -
|
| -DATA_JS = 'Benchmark.data = $data;'
|
| -
|
| -
|
| -def ReadFile(file_name, mode='r'):
|
| - f = open(file_name, mode)
|
| - data = f.read()
|
| - f.close()
|
| - return data
|
| -
|
| -
|
| -def ReadJSON(file_name):
|
| - f = open(file_name, 'r')
|
| - data = json.load(f)
|
| - f.close()
|
| - return data
|
| -
|
| -
|
| -class PlaybackRequestHandler(object):
|
| - """This class is used to process HTTP requests during test playback.
|
| -
|
| - Attributes:
|
| - test_dir: directory containing test files.
|
| - test_callback: function to be called when the test is finished.
|
| - script_dir: directory where javascript files are located.
|
| - """
|
| -
|
| - def __init__(self, test_dir, test_callback=None, script_dir=os.getcwd()):
|
| - self.test_dir = test_dir
|
| - self.test_callback = test_callback
|
| - self.script_dir = script_dir
|
| -
|
| - def ProcessRequest(self, handler):
|
| - "Processes single HTTP request."
|
| -
|
| - parse_result = urlparse.urlparse(handler.path)
|
| - if parse_result.path.endswith('/benchmark/'):
|
| - query = cgi.parse_qs(parse_result.query)
|
| - if 'run_test' in query:
|
| - run_count = 1
|
| - if 'run_count' in query:
|
| - run_count = query['run_count'][0]
|
| - self._StartTest(handler, self.test_dir, run_count)
|
| - elif 'resource' in query:
|
| - self._GetBenchmarkResource(query['resource'][0], handler)
|
| - else:
|
| - self._ProcessBenchmarkReport(handler.body, handler)
|
| - else:
|
| - self._GetApplicationResource(handler)
|
| -
|
| - def _StartTest(self, handler, test_dir, run_count):
|
| - "Sends test start page to browser."
|
| -
|
| - cache_data = ReadJSON(os.path.join(test_dir, 'cache.json'))
|
| -
|
| - # Load cached responses.
|
| - self.cache = {}
|
| - responses_dir = os.path.join(test_dir, 'responses')
|
| - for request in cache_data['requests']:
|
| - response_file = os.path.join(responses_dir, request['response_file'])
|
| - response = ReadFile(response_file, 'rb')
|
| - key = (request['method'], request['path'])
|
| - self.cache[key] = {'response': response, 'headers': request['headers']}
|
| -
|
| - # Load benchmark scripts.
|
| - self.benchmark_resources = {}
|
| - data = ReadFile(os.path.join(test_dir, 'data.json'))
|
| - data = string.Template(DATA_JS).substitute(data=data)
|
| - self.benchmark_resources['data.js'] = {'data': data,
|
| - 'type': 'application/javascript'}
|
| - for resource in ('common.js', 'playback.js'):
|
| - resource_file = os.path.join(self.script_dir, resource)
|
| - self.benchmark_resources[resource] = {'data': ReadFile(resource_file),
|
| - 'type': 'application/javascript'}
|
| -
|
| - # Format start page.
|
| - parse_result = urlparse.urlparse(cache_data['start_url'])
|
| - target_origin = '%s://%s' % (parse_result.scheme, parse_result.netloc)
|
| - start_page = string.Template(START_PAGE).substitute(
|
| - run_count=run_count, target_origin=target_origin,
|
| - width=cache_data['width'], height=cache_data['height'])
|
| - self.benchmark_resources['start_page'] = {
|
| - 'data': start_page,
|
| - 'type': 'text/html; charset=UTF-8'
|
| - }
|
| -
|
| - start_page_popup = string.Template(START_PAGE_POPUP).substitute(
|
| - start_url=cache_data['start_url'],
|
| - width=cache_data['width'], height=cache_data['height'])
|
| - self.benchmark_resources['start_page_popup'] = {
|
| - 'data': start_page_popup,
|
| - 'type': 'text/html; charset=UTF-8'
|
| - }
|
| -
|
| - self._GetBenchmarkResource('start_page', handler)
|
| -
|
| - def _GetBenchmarkResource(self, resource, handler):
|
| - "Sends requested resource to browser."
|
| -
|
| - if resource in self.benchmark_resources:
|
| - resource = self.benchmark_resources[resource]
|
| - handler.send_response(200)
|
| - handler.send_header('content-length', len(resource['data']))
|
| - handler.send_header('content-type', resource['type'])
|
| - handler.end_headers()
|
| - handler.wfile.write(resource['data'])
|
| - else:
|
| - handler.send_response(404)
|
| - handler.end_headers()
|
| -
|
| - def _ProcessBenchmarkReport(self, content, handler):
|
| - "Reads benchmark score from report content and invokes callback."
|
| -
|
| - handler.send_response(204)
|
| - handler.end_headers()
|
| - content = json.loads(content)
|
| - if 'results' in content:
|
| - results = content['results']
|
| - sys.stdout.write('Results: %s\n' % results)
|
| - if self.test_callback: self.test_callback(results)
|
| - elif 'error' in content:
|
| - sys.stderr.write('Error: %s\n' % content['error'])
|
| -
|
| - def _GetApplicationResource(self, handler):
|
| - "Searches for response in cache. If not found, responds with 204."
|
| - key = (handler.command, handler.path)
|
| - if key in self.cache:
|
| - sys.stdout.write('%s %s -> found\n' % key)
|
| - handler.wfile.write(self.cache[key]['response'])
|
| - else:
|
| - sys.stderr.write('%s %s -> not found\n' % key)
|
| - handler.send_response(204, "not in cache")
|
| - handler.end_headers()
|
|
|