service: optimize repetitive android depgraph generation
These android funcs call determine_android_package internally which
turns into a full `emerge -pv virtual/target-os` call which can be
pretty slow. The calls all do the same exact work each time, so we
end up just wasting CPU cycles. Hoist the call up a level so we can
share the results and only build the depgraph once.
BUG=chromium:1051161
TEST=CQ passes
Change-Id: I7f9321836e149b9e2072f99893632a186d81e9ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2739376
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/packages.py b/api/controller/packages.py
index dc9d29a..81ee246 100644
--- a/api/controller/packages.py
+++ b/api/controller/packages.py
@@ -159,21 +159,27 @@
def GetTargetVersions(input_proto, output_proto, _config):
"""Returns the target versions."""
build_target = controller_util.ParseBuildTarget(input_proto.build_target)
- # Android version.
- android_version = packages.determine_android_version(build_target.name)
- logging.info('Found android version: %s', android_version)
- if android_version:
- output_proto.android_version = android_version
- # Android branch version.
- android_branch_version = packages.determine_android_branch(build_target.name)
- logging.info('Found android branch version: %s', android_branch_version)
- if android_branch_version:
- output_proto.android_branch_version = android_branch_version
- # Android target version.
- android_target_version = packages.determine_android_target(build_target.name)
- logging.info('Found android target version: %s', android_target_version)
- if android_target_version:
- output_proto.android_target_version = android_target_version
+ # Look up the android package here once since the operation is so slow.
+ android_package = packages.determine_android_package(build_target.name)
+ if android_package:
+ # Android version.
+ android_version = packages.determine_android_version(
+ build_target.name, package=android_package)
+ logging.info('Found android version: %s', android_version)
+ if android_version:
+ output_proto.android_version = android_version
+ # Android branch version.
+ android_branch_version = packages.determine_android_branch(
+ build_target.name, package=android_package)
+ logging.info('Found android branch version: %s', android_branch_version)
+ if android_branch_version:
+ output_proto.android_branch_version = android_branch_version
+ # Android target version.
+ android_target_version = packages.determine_android_target(
+ build_target.name, package=android_package)
+ logging.info('Found android target version: %s', android_target_version)
+ if android_target_version:
+ output_proto.android_target_version = android_target_version
# TODO(crbug/1019770): Investigate cases where builds_chrome is true but
# chrome_version is None.