146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)"""Runs Microsoft's RoboHornet Pro benchmark."""
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import os
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from metrics import power
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochfrom telemetry import test
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from telemetry.page import page_measurement
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)from telemetry.page import page_set
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class _RobohornetProMeasurement(page_measurement.PageMeasurement):
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def __init__(self):
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    super(_RobohornetProMeasurement, self).__init__()
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._power_metric = power.PowerMetric()
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def CustomizeBrowserOptions(self, options):
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    power.PowerMetric.CustomizeBrowserOptions(options)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def DidNavigateToPage(self, page, tab):
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._power_metric.Start(page, tab)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def MeasurePage(self, page, tab, results):
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab.ExecuteJavaScript('ToggleRoboHornet()')
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    tab.WaitForJavaScriptExpression(
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        'document.getElementById("results").innerHTML.indexOf("Total") != -1',
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        600)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._power_metric.Stop(page, tab)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._power_metric.AddResults(tab, results)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    result = int(tab.EvaluateJavaScript('stopTime - startTime'))
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    results.Add('Total', 'ms', result)
379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass RobohornetPro(test.Test):
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  test = _RobohornetProMeasurement
419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  def CreatePageSet(self, options):
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ps = page_set.PageSet(
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      archive_data_file='../page_sets/data/robohornet_pro.json',
455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      # Measurement require use of real Date.now() for measurement.
465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      make_javascript_deterministic=False,
475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      file_path=os.path.abspath(__file__))
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ps.AddPageWithDefaultRunNavigate(
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      'http://ie.microsoft.com/testdrive/performance/robohornetpro/')
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return ps
51