15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import time 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import browser_finder 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import browser_options 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Main(args): 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options = browser_options.BrowserOptions() 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser = options.CreateParser('telemetry_perf_test.py') 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options, args = parser.parse_args(args) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_to_create = browser_finder.FindBrowser(options) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert browser_to_create 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) with browser_to_create.Create() as b: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab = b.tabs[0] 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Measure round-trip-time for evaluate 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times = [] 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for i in range(1000): 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start = time.time() 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab.EvaluateJavaScript('%i * 2' % i) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times.append(time.time() - start) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) N = float(len(times)) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) avg = sum(times, 0.0) / N 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) squared_diffs = [(t - avg) * (t - avg) for t in times] 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stdev = sum(squared_diffs, 0.0) / (N - 1) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times.sort() 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) percentile_75 = times[int(0.75 * N)] 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) print "%s: avg=%f; stdev=%f; min=%f; 75th percentile = %f" % ( 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Round trip time (seconds)", 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) avg, stdev, min(times), percentile_75) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(Main(sys.argv[1:])) 45