Index: infra/bots/recipe_modules/skia/resources/upload_bench_results.py |
diff --git a/infra/bots/recipe_modules/skia/resources/upload_bench_results.py b/infra/bots/recipe_modules/skia/resources/upload_bench_results.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..9c17f8777fa3b2a805c28921c1c1bcc1fe86886b |
--- /dev/null |
+++ b/infra/bots/recipe_modules/skia/resources/upload_bench_results.py |
@@ -0,0 +1,77 @@ |
+#!/usr/bin/env python |
+# Copyright 2014 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. |
+ |
+""" Upload benchmark performance data results. """ |
+ |
+import gzip |
+import os |
+import os.path |
+import re |
+import subprocess |
+import sys |
+import tempfile |
+ |
+from common.skia import builder_name_schema |
+from common.skia import global_constants |
+from datetime import datetime |
+ |
+ |
+def _UploadJSONResults(builder_name, build_number, dest_gsbase, gs_subdir, |
+ full_json_path, gzipped=True, gsutil_path='gsutil', |
+ issue_number=None): |
+ now = datetime.utcnow() |
+ gs_json_path = '/'.join((str(now.year).zfill(4), str(now.month).zfill(2), |
+ str(now.day).zfill(2), str(now.hour).zfill(2))) |
+ gs_dir = '/'.join((gs_subdir, gs_json_path, builder_name)) |
+ if builder_name_schema.IsTrybot(builder_name): |
+ if not issue_number: |
+ raise Exception('issue_number build property is missing!') |
+ gs_dir = '/'.join(('trybot', gs_dir, build_number, issue_number)) |
+ full_path_to_upload = full_json_path |
+ file_to_upload = os.path.basename(full_path_to_upload) |
+ http_header = ['Content-Type:application/json'] |
+ if gzipped: |
+ http_header.append('Content-Encoding:gzip') |
+ gzipped_file = os.path.join(tempfile.gettempdir(), file_to_upload) |
+ # Apply gzip. |
+ with open(full_path_to_upload, 'rb') as f_in: |
+ with gzip.open(gzipped_file, 'wb') as f_out: |
+ f_out.writelines(f_in) |
+ full_path_to_upload = gzipped_file |
+ cmd = ['python', gsutil_path] |
+ for header in http_header: |
+ cmd.extend(['-h', header]) |
+ cmd.extend(['cp', '-a', 'public-read', full_path_to_upload, |
+ '/'.join((dest_gsbase, gs_dir, file_to_upload))]) |
+ print ' '.join(cmd) |
+ subprocess.check_call(cmd) |
+ |
+ |
+def main(builder_name, build_number, perf_data_dir, got_revision, gsutil_path, |
+ issue_number=None): |
+ """Uploads gzipped nanobench JSON data.""" |
+ # Find the nanobench JSON |
+ file_list = os.listdir(perf_data_dir) |
+ RE_FILE_SEARCH = re.compile( |
+ 'nanobench_({})_[0-9]+\.json'.format(got_revision)) |
+ nanobench_name = None |
+ |
+ for file_name in file_list: |
+ if RE_FILE_SEARCH.search(file_name): |
+ nanobench_name = file_name |
+ break |
+ |
+ if nanobench_name: |
+ dest_gsbase = 'gs://' + global_constants.GS_GM_BUCKET |
+ nanobench_json_file = os.path.join(perf_data_dir, |
+ nanobench_name) |
+ _UploadJSONResults(builder_name, build_number, dest_gsbase, 'nano-json-v1', |
+ nanobench_json_file, gsutil_path=gsutil_path, |
+ issue_number=issue_number) |
+ |
+ |
+if __name__ == '__main__': |
+ main(*sys.argv[1:]) |
+ |