| Index: tools/perf/benchmarks/blink_perf.py | 
| diff --git a/tools/perf/benchmarks/blink_perf.py b/tools/perf/benchmarks/blink_perf.py | 
| index d1a31780b3656d5d62278a345ca204f0725cea3e..979f60bf3cd26a8b0c09a7981fc8da43d0c97745 100644 | 
| --- a/tools/perf/benchmarks/blink_perf.py | 
| +++ b/tools/perf/benchmarks/blink_perf.py | 
| @@ -3,40 +3,134 @@ | 
| # found in the LICENSE file. | 
|  | 
| import os | 
| +import sys | 
|  | 
| from telemetry import test | 
| from telemetry.core import util | 
| +from telemetry.page import page_measurement | 
| +from telemetry.page import page_set | 
|  | 
| -from measurements import blink_perf | 
| + | 
| +def _CreatePageSetFromPath(path): | 
| +  assert os.path.exists(path) | 
| + | 
| +  page_set_dict = {'pages': []} | 
| + | 
| +  def _AddPage(path): | 
| +    if not path.endswith('.html'): | 
| +      return | 
| +    if '../' in open(path, 'r').read(): | 
| +      # If the page looks like it references its parent dir, include it. | 
| +      page_set_dict['serving_dirs'] = [os.path.dirname(os.path.dirname(path))] | 
| +    page_set_dict['pages'].append({'url': | 
| +                                   'file://' + path.replace('\\', '/')}) | 
| + | 
| +  def _AddDir(dir_path, skipped): | 
| +    for candidate_path in os.listdir(dir_path): | 
| +      if candidate_path == 'resources': | 
| +        continue | 
| +      candidate_path = os.path.join(dir_path, candidate_path) | 
| +      if candidate_path.startswith(tuple([os.path.join(path, s) | 
| +                                          for s in skipped])): | 
| +        continue | 
| +      if os.path.isdir(candidate_path): | 
| +        _AddDir(candidate_path, skipped) | 
| +      else: | 
| +        _AddPage(candidate_path) | 
| + | 
| +  if os.path.isdir(path): | 
| +    skipped = [] | 
| +    skipped_file = os.path.join(path, 'Skipped') | 
| +    if os.path.exists(skipped_file): | 
| +      for line in open(skipped_file, 'r').readlines(): | 
| +        line = line.strip() | 
| +        if line and not line.startswith('#'): | 
| +          skipped.append(line.replace('/', os.sep)) | 
| +    _AddDir(path, skipped) | 
| +  else: | 
| +    _AddPage(path) | 
| +  return page_set.PageSet.FromDict(page_set_dict, os.getcwd() + os.sep) | 
| + | 
| + | 
| +class _BlinkPerfMeasurement(page_measurement.PageMeasurement): | 
| +  """Tuns a blink performance test and reports the results.""" | 
| +  def __init__(self): | 
| +    super(_BlinkPerfMeasurement, self).__init__('') | 
| +    with open(os.path.join(os.path.dirname(__file__), | 
| +                           'blink_perf.js'), 'r') as f: | 
| +      self._blink_perf_js = f.read() | 
| + | 
| +  def CreatePageSet(self, args, options): | 
| +    if len(args) < 2: | 
| +      print 'Must specify a file or directory to run.' | 
| +      sys.exit(1) | 
| + | 
| +    page_set_arg = args[1] | 
| + | 
| +    if not os.path.exists(page_set_arg): | 
| +      print '%s does not exist.' % page_set_arg | 
| +      sys.exit(1) | 
| + | 
| +    return _CreatePageSetFromPath(page_set_arg) | 
| + | 
| +  @property | 
| +  def results_are_the_same_on_every_page(self): | 
| +    return False | 
| + | 
| +  def WillNavigateToPage(self, page, tab): | 
| +    page.script_to_evaluate_on_commit = self._blink_perf_js | 
| + | 
| +  def CustomizeBrowserOptions(self, options): | 
| +    options.AppendExtraBrowserArgs([ | 
| +        '--js-flags=--expose_gc', | 
| +        '--enable-experimental-web-platform-features' | 
| +    ]) | 
| + | 
| +  def MeasurePage(self, page, tab, results): | 
| +    tab.WaitForJavaScriptExpression('testRunner.isDone', 600) | 
| + | 
| +    log = tab.EvaluateJavaScript('document.getElementById("log").innerHTML') | 
| + | 
| +    for line in log.splitlines(): | 
| +      if not line.startswith('values '): | 
| +        continue | 
| +      parts = line.split() | 
| +      values = [float(v.replace(',', '')) for v in parts[1:-1]] | 
| +      units = parts[-1] | 
| +      metric = page.display_name.split('.')[0].replace('/', '_') | 
| +      results.Add(metric, units, values) | 
| +      break | 
| + | 
| +    print log | 
|  | 
|  | 
| class BlinkPerfAll(test.Test): | 
| tag = 'all' | 
| -  test = blink_perf.BlinkPerf | 
| +  test = _BlinkPerfMeasurement | 
|  | 
| def CreatePageSet(self, options): | 
| path = os.path.join( | 
| util.GetChromiumSrcDir(), 'third_party', 'WebKit', 'PerformanceTests') | 
| -    return blink_perf.CreatePageSetFromPath(path) | 
| +    return _CreatePageSetFromPath(path) | 
|  | 
| class BlinkPerfAnimation(test.Test): | 
| tag = 'animation' | 
| -  test = blink_perf.BlinkPerf | 
| +  test = _BlinkPerfMeasurement | 
|  | 
| def CreatePageSet(self, options): | 
| path = os.path.join(util.GetChromiumSrcDir(), | 
| 'third_party', 'WebKit', 'PerformanceTests', 'Animation') | 
| -    return blink_perf.CreatePageSetFromPath(path) | 
| +    return _CreatePageSetFromPath(path) | 
|  | 
| class BlinkPerfWebAnimations(test.Test): | 
| tag = 'web_animations' | 
| -  test = blink_perf.BlinkPerf | 
| +  test = _BlinkPerfMeasurement | 
| enabled = False | 
|  | 
| def CreatePageSet(self, options): | 
| path = os.path.join(util.GetChromiumSrcDir(), | 
| 'third_party', 'WebKit', 'PerformanceTests', 'Animation') | 
| -    return blink_perf.CreatePageSetFromPath(path) | 
| +    return _CreatePageSetFromPath(path) | 
|  | 
| def CustomizeBrowserOptions(self, options): | 
| options.AppendExtraBrowserArgs('--enable-web-animations-css') | 
|  |