Bug 1472800 - [ci] Add the raptor unity-webgl benchmark to taskcluster r=rwood
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Tue, 07 Aug 2018 18:22:40 +0000
changeset 430433 ed8b7ca3f5bec194607d09ac74f5a8d3032dee45
parent 430432 acf55a4fc3596dba31b05a809d5a3ac32a57f696
child 430434 6f39c71a8f6ce42ca894c7d609c8016e78b3e6ed
push id34405
push userncsoregi@mozilla.com
push dateWed, 08 Aug 2018 09:57:26 +0000
treeherdermozilla-central@c65991f3fa10 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersrwood
bugs1472800
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1472800 - [ci] Add the raptor unity-webgl benchmark to taskcluster r=rwood Enables the benchmark in CI, uses a fetch task to download the benchmark. Depends on D2307. Differential Revision: https://phabricator.services.mozilla.com/D2469
taskcluster/ci/fetch/benchmarks.yml
taskcluster/ci/fetch/kind.yml
taskcluster/ci/test/raptor.yml
taskcluster/ci/test/test-platforms.yml
taskcluster/ci/test/test-sets.yml
taskcluster/taskgraph/transforms/tests.py
testing/raptor/raptor/benchmark.py
new file mode 100644
--- /dev/null
+++ b/taskcluster/ci/fetch/benchmarks.yml
@@ -0,0 +1,8 @@
+unity-webgl:
+  description: unity-webgl benchmark
+  fetch:
+    type: static-url
+    artifact-name: unity-webgl.zip
+    url: https://github.com/mozilla/perf-automation/releases/download/unity-webgl-v1/unity-webgl-6beb3d3e22ab.zip
+    sha256: f71ee3a3f5b9513f041e1dd01c032d51f2071e1ad130e8ac2cf0c553c468b9ea
+    size: 27062962
--- a/taskcluster/ci/fetch/kind.yml
+++ b/taskcluster/ci/fetch/kind.yml
@@ -6,9 +6,10 @@ loader: taskgraph.loader.transform:loade
 
 transforms:
     - taskgraph.transforms.fetch:transforms
     - taskgraph.transforms.try_job:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 jobs-from:
+    - benchmarks.yml
     - toolchains.yml
--- a/taskcluster/ci/test/raptor.yml
+++ b/taskcluster/ci/test/raptor.yml
@@ -187,8 +187,37 @@ raptor-sunspider-chrome:
     try-name: raptor-sunspider-chrome
     treeherder-symbol: Rap-C(ss)
     run-on-projects: ['try', 'mozilla-central']
     max-run-time: 1800
     mozharness:
         extra-options:
             - --test=raptor-sunspider
             - --app=chrome
+
+raptor-unity-webgl-firefox:
+    description: "Raptor Unity WebGL on Firefox"
+    try-name: raptor-unity-webgl-firefox
+    treeherder-symbol: Rap(ugl)
+    run-on-projects: ['try', 'mozilla-central']
+    tier: 3
+    max-run-time: 3600
+    mozharness:
+        extra-options:
+            - --test=raptor-unity-webgl
+    fetches:
+        fetch:
+            - unity-webgl
+
+raptor-unity-webgl-chrome:
+    description: "Raptor Unity WebGL on Chrome"
+    try-name: raptor-unity-webgl-chrome
+    treeherder-symbol: Rap-C(ugl)
+    run-on-projects: ['try', 'mozilla-central']
+    tier: 3
+    max-run-time: 3600
+    mozharness:
+        extra-options:
+            - --test=raptor-unity-webgl
+            - --app=chrome
+    fetches:
+        fetch:
+            - unity-webgl
--- a/taskcluster/ci/test/test-platforms.yml
+++ b/taskcluster/ci/test/test-platforms.yml
@@ -49,17 +49,18 @@ linux64/opt:
         - opt-only-tests
         - desktop-screenshot-capture
         - talos
         - awsy
         - mochitest-headless
         - linux-talos-flex
         - raptor-firefox
         - raptor-chrome
-
+        - raptor-fetch-firefox
+        - raptor-fetch-chrome
 linux64-nightly/opt:
     build-platform: linux64-nightly/opt
     test-sets:
         - common-tests
         - web-platform-tests
         - opt-only-tests
         - desktop-screenshot-capture
         - awsy
@@ -75,16 +76,17 @@ linux64-devedition/opt:
 # TODO: use 'pgo' and 'asan' labels here, instead of -pgo/opt
 linux64-pgo/opt:
     build-platform: linux64-pgo/opt
     test-sets:
         - common-tests
         - web-platform-tests
         - talos
         - raptor-firefox
+        - raptor-fetch-firefox
 
 linux64-asan/opt:
     build-platform: linux64-asan/opt
     test-sets:
         - common-tests
         - web-platform-tests
 
 # Stylo sequential runs check memory and performance when using a single thread.
@@ -97,17 +99,17 @@ linux64-stylo-sequential/opt:
 linux64-qr/opt:
     build-platform: linux64/opt
     test-sets:
         - linux-qr-tests
         - talos
         - awsy
         - web-platform-tests
         - raptor-firefox
-
+        - raptor-fetch-firefox
 linux64-qr/debug:
     build-platform: linux64/debug
     test-sets:
         - linux-qr-tests
         - web-platform-tests
 
 linux64-ccov/debug:
     build-platform: linux64-ccov/debug
--- a/taskcluster/ci/test/test-sets.yml
+++ b/taskcluster/ci/test/test-sets.yml
@@ -96,16 +96,24 @@ raptor-chrome:
     - raptor-speedometer-chrome
     - raptor-stylebench-chrome
     - raptor-motionmark-htmlsuite-chrome
     - raptor-motionmark-animometer-chrome
     - raptor-webaudio-chrome
     - raptor-gdocs-chrome
     - raptor-sunspider-chrome
 
+# Fetch tasks are only supported on Linux for now,
+# so these need to be separate sets.
+raptor-fetch-firefox:
+    - raptor-unity-webgl-firefox
+
+raptor-fetch-chrome:
+    - raptor-unity-webgl-chrome
+
 awsy:
     - awsy
     - awsy-base
 
 awsy-stylo-sequential:
     - awsy-stylo-sequential
 
 ##
--- a/taskcluster/taskgraph/transforms/tests.py
+++ b/taskcluster/taskgraph/transforms/tests.py
@@ -1033,16 +1033,19 @@ def make_job_description(config, tests):
         name = '{}-{}'.format(test['test-platform'], test['test-name'])
         jobdesc['name'] = name
         jobdesc['label'] = label
         jobdesc['description'] = test['description']
         jobdesc['attributes'] = attributes
         jobdesc['dependencies'] = {'build': build_label}
         jobdesc['job-from'] = test['job-from']
 
+        if test.get('fetches'):
+            jobdesc['fetches'] = test['fetches']
+
         if test['mozharness']['requires-signed-builds'] is True:
             jobdesc['dependencies']['build-signing'] = test['build-signing-label']
 
         jobdesc['expires-after'] = test['expires-after']
         jobdesc['routes'] = []
         jobdesc['run-on-projects'] = test['run-on-projects']
         jobdesc['scopes'] = []
         jobdesc['tags'] = test.get('tags', {})
--- a/testing/raptor/raptor/benchmark.py
+++ b/testing/raptor/raptor/benchmark.py
@@ -1,15 +1,16 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from __future__ import absolute_import
 
 import os
+import shutil
 import socket
 
 from mozlog import get_proxy_logger
 
 from wptserve import server, handlers
 
 LOG = get_proxy_logger(component="raptor-benchmark")
 here = os.path.abspath(os.path.dirname(__file__))
@@ -33,16 +34,25 @@ class Benchmark(object):
 
         # now add path for benchmark source; locally we put it in a raptor benchmarks
         # folder; in production the files are automatically copied to a different dir
         if self.config.get('run_local', False):
             self.bench_dir = os.path.join(self.bench_dir, 'testing', 'raptor', 'benchmarks')
         else:
             self.bench_dir = os.path.join(self.bench_dir, 'tests', 'webkit', 'PerformanceTests')
 
+            # Some benchmarks may have been downloaded from a fetch task, make
+            # sure they get copied over.
+            fetches_dir = os.environ.get('MOZ_FETCHES_DIR')
+            if fetches_dir and os.path.isdir(fetches_dir):
+                for name in os.listdir(fetches_dir):
+                    path = os.path.join(fetches_dir, name)
+                    if os.path.isdir(path):
+                        shutil.copytree(path, os.path.join(self.bench_dir, name))
+
         LOG.info("bench_dir contains:")
         LOG.info(os.listdir(self.bench_dir))
 
         # now have the benchmark source ready, go ahead and serve it up!
         self.start_http_server()
 
     def start_http_server(self):
         self.write_server_headers()