Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Unified Diff: tools/telemetry/telemetry/util/support_binaries.py

Issue 238513003: [Telemetry] Make Telemetry binaries platform aware. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move to util/ Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/telemetry/telemetry/core/util.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/util/support_binaries.py
diff --git a/tools/telemetry/telemetry/util/support_binaries.py b/tools/telemetry/telemetry/util/support_binaries.py
new file mode 100644
index 0000000000000000000000000000000000000000..dbc7293472ab8094649b89a58e2805858be2cd64
--- /dev/null
+++ b/tools/telemetry/telemetry/util/support_binaries.py
@@ -0,0 +1,62 @@
+# Copyright (c) 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.
+
+import os
+
+from telemetry import decorators
+from telemetry.core import util
+from telemetry.page import cloud_storage
+
+
+def _GetBinPath(binary_name, platform_name):
+ # TODO(tonyg): Add another nesting level for architecture_name.
+ return os.path.join(util.GetTelemetryDir(), 'bin', platform_name, binary_name)
+
+
+def _IsInCloudStorage(binary_name, platform_name):
+ return os.path.exists(_GetBinPath(binary_name, platform_name) + '.sha1')
+
+
+def _UpdateFromCloudStorage(binary_name, platform_name):
+ for bucket in [cloud_storage.INTERNAL_BUCKET,
+ cloud_storage.PARTNER_BUCKET,
+ cloud_storage.PUBLIC_BUCKET]:
+ try:
+ cloud_storage.GetIfChanged(
+ _GetBinPath(binary_name, platform_name), bucket)
+ return
+ except cloud_storage.CloudStorageError:
+ continue
+
+
+@decorators.Cache
+def FindLocallyBuiltPath(binary_name):
+ """Finds the most recently built |binary_name|."""
+ command = None
+ command_mtime = 0
+ chrome_root = util.GetChromiumSrcDir()
+ required_mode = os.X_OK
+ if binary_name.endswith('.apk'):
+ required_mode = os.R_OK
+ for build_dir, build_type in util.GetBuildDirectories():
+ candidate = os.path.join(chrome_root, build_dir, build_type, binary_name)
+ if os.path.isfile(candidate) and os.access(candidate, required_mode):
+ candidate_mtime = os.stat(candidate).st_mtime
+ if candidate_mtime > command_mtime:
+ command = candidate
+ command_mtime = candidate_mtime
+ return command
+
+
+@decorators.Cache
+def FindPath(binary_name, platform_name):
+ """Returns the path to the given binary name, pulling from the cloud if
+ necessary."""
+ if platform_name == 'win':
+ binary_name += '.exe'
+ command = FindLocallyBuiltPath(binary_name)
+ if not command and _IsInCloudStorage(binary_name, platform_name):
+ _UpdateFromCloudStorage(binary_name, platform_name)
+ command = _GetBinPath(binary_name, platform_name)
+ return command
« no previous file with comments | « tools/telemetry/telemetry/core/util.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698