15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 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.
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import time
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir))
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import browser_finder
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import browser_options
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Main(args):
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  options = browser_options.BrowserFinderOptions()
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = options.CreateParser('telemetry_perf_test.py')
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  options, args = parser.parse_args(args)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_to_create = browser_finder.FindBrowser(options)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert browser_to_create
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  with browser_to_create.Create() as b:
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab = b.tabs[0]
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # Measure round-trip-time for evaluate
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    times = []
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for i in range(1000):
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      start = time.time()
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab.EvaluateJavaScript('%i * 2' % i)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      times.append(time.time() - start)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    N = float(len(times))
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    avg = sum(times, 0.0) / N
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    squared_diffs = [(t - avg) * (t - avg) for t in times]
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    stdev = sum(squared_diffs, 0.0) / (N - 1)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    times.sort()
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    percentile_75 = times[int(0.75 * N)]
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    print "%s: avg=%f; stdev=%f; min=%f; 75th percentile = %f" % (
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "Round trip time (seconds)",
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      avg, stdev, min(times), percentile_75)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(Main(sys.argv[1:]))
48