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