# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Runs Browsermark CSS, DOM, WebGL, JS, resize and page load benchmarks.

Browsermark benchmark suite have five test groups:
a) CSS group: measures your browsers 2D and 3D performance, and finally executes
  CSS Crunch test
b) DOM group: measures variety of areas, like how well your browser traverse in
  Document Object Model Tree or how fast your browser can create dynamic content
c) General group: measures areas like resize and page load times
d) Graphics group: tests browsers Graphics Processing Unit power by measuring
  WebGL and Canvas performance
e) Javascript group: executes number crunching by doing selected Array and
  String operations
Additionally Browsermark will test your browsers conformance, but conformance
tests are not included in this suite.
"""

import os

from telemetry import benchmark
from telemetry.page import page_set
from telemetry.page import page_test
from telemetry.value import scalar

class _BrowsermarkMeasurement(page_test.PageTest):

  def ValidateAndMeasurePage(self, _, tab, results):
    # Select nearest server(North America=1) and start test.
    js_start_test =  """
        for (var i=0; i < $('#continent a').length; i++) {
          if (($('#continent a')[i]).getAttribute('data-id') == '1') {
            $('#continent a')[i].click();
            $('.start_test.enabled').click();
          }
        }
        """
    tab.ExecuteJavaScript(js_start_test)
    tab.WaitForJavaScriptExpression(
      'window.location.pathname.indexOf("results") != -1', 600)
    result = int(tab.EvaluateJavaScript(
        'document.getElementsByClassName("score")[0].innerHTML'))
    results.AddValue(
        scalar.ScalarValue(results.current_page, 'Score', 'score', result))


class Browsermark(benchmark.Benchmark):
  """Browsermark suite tests CSS, DOM, resize, page load, WebGL and JS."""
  test = _BrowsermarkMeasurement
  def CreatePageSet(self, options):
    ps = page_set.PageSet(
      file_path=os.path.abspath(__file__),
      archive_data_file='../page_sets/data/browsermark.json',
      make_javascript_deterministic=False)
    ps.AddPageWithDefaultRunNavigate('http://browsermark.rightware.com/tests/')
    return ps

# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Runs Browsermark CSS, DOM, WebGL, JS, resize and page load benchmarks.

Browsermark benchmark suite have five test groups:
a) CSS group: measures your browsers 2D and 3D performance, and finally executes
  CSS Crunch test
b) DOM group: measures variety of areas, like how well your browser traverse in
  Document Object Model Tree or how fast your browser can create dynamic content
c) General group: measures areas like resize and page load times
d) Graphics group: tests browsers Graphics Processing Unit power by measuring
  WebGL and Canvas performance
e) Javascript group: executes number crunching by doing selected Array and
  String operations
Additionally Browsermark will test your browsers conformance, but conformance
tests are not included in this suite.
"""

import os

from telemetry import benchmark
from telemetry.page import page_set
from telemetry.page import page_test
from telemetry.value import scalar

class _BrowsermarkMeasurement(page_test.PageTest):

  def ValidateAndMeasurePage(self, _, tab, results):
    # Select nearest server(North America=1) and start test.
    js_start_test =  """
        for (var i=0; i < $('#continent a').length; i++) {
          if (($('#continent a')[i]).getAttribute('data-id') == '1') {
            $('#continent a')[i].click();
            $('.start_test.enabled').click();
          }
        }
        """
    tab.ExecuteJavaScript(js_start_test)
    tab.WaitForJavaScriptExpression(
      'window.location.pathname.indexOf("results") != -1', 600)
    result = int(tab.EvaluateJavaScript(
        'document.getElementsByClassName("score")[0].innerHTML'))
    results.AddValue(
        scalar.ScalarValue(results.current_page, 'Score', 'score', result))


@benchmark.Disabled
class Browsermark(benchmark.Benchmark):
  """Browsermark suite tests CSS, DOM, resize, page load, WebGL and JS."""
  test = _BrowsermarkMeasurement
  def CreatePageSet(self, options):
    ps = page_set.PageSet(
      file_path=os.path.abspath(__file__),
      archive_data_file='../page_sets/data/browsermark.json',
      make_javascript_deterministic=False)
    ps.AddPageWithDefaultRunNavigate('http://browsermark.rightware.com/tests/')
    return ps

Revert of Enable the Rightware Browsermark benchmark (patchset #1 id:1 of https://codereview.chromium.org/649283002/)