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_unittest.py b/api/controller/packages_unittest.py
index e1c173c..35ba7a9 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -423,18 +423,13 @@
     chrome_version_mock = self.PatchObject(packages_service,
                                            'determine_chrome_version',
                                            return_value=chrome_version)
-    android_version = 'android_test_version'
-    android_version_mock = self.PatchObject(packages_service,
-                                            'determine_android_version',
-                                            return_value=android_version)
+    android_package = 'chromeos-base/android-container-pi-10.3'
+    self.PatchObject(packages_service, 'determine_android_package',
+                     return_value=android_package)
     android_branch = 'android_test_branch'
     android_branch_mock = self.PatchObject(packages_service,
                                            'determine_android_branch',
                                            return_value=android_branch)
-    android_target = 'android_test_target'
-    android_target_mock = self.PatchObject(packages_service,
-                                           'determine_android_target',
-                                           return_value=android_target)
     platform_version = '12345.1.2'
     self.PatchObject(packages_service, 'determine_platform_version',
                      return_value=platform_version)
@@ -447,9 +442,9 @@
     request = self._GetRequest(board='betty')
     packages_controller.GetTargetVersions(request, self.response,
                                           self.api_config)
-    self.assertEqual(self.response.android_version, android_version)
+    self.assertEqual(self.response.android_version, '10.3')
     self.assertEqual(self.response.android_branch_version, android_branch)
-    self.assertEqual(self.response.android_target_version, android_target)
+    self.assertEqual(self.response.android_target_version, 'cheets')
     self.assertEqual(self.response.chrome_version, chrome_version)
     self.assertEqual(self.response.platform_version, platform_version)
     self.assertEqual(self.response.milestone_version, milestone_version)
@@ -457,12 +452,8 @@
     # Verify call to determine_chrome_version passes a build_target object.
     build_target = build_target_lib.BuildTarget('betty')
     chrome_version_mock.assert_called_with(build_target)
-    # Verify call to determine_android_version passes a list of the board name.
-    android_version_mock.assert_called_with('betty')
     # Verify call to determine_android_branch passes a board name.
-    android_branch_mock.assert_called_with('betty')
-    # Verify call to determine_android_target passes a board name.
-    android_target_mock.assert_called_with('betty')
+    android_branch_mock.assert_called_with('betty', package=android_package)
 
   def testGetTargetVersionsWithPackagesSet(self):
     """Verify packages pass through and basic return values."""
@@ -475,15 +466,12 @@
     chrome_version = '76.0.1.2'
     self.PatchObject(packages_service, 'determine_chrome_version',
                      return_value=chrome_version)
-    android_version = 'android_test_version'
-    self.PatchObject(packages_service, 'determine_android_version',
-                     return_value=android_version)
+    android_package = 'chromeos-base/android-container-pi-10.3'
+    self.PatchObject(packages_service, 'determine_android_package',
+                     return_value=android_package)
     android_branch = 'android_test_branch'
     self.PatchObject(packages_service, 'determine_android_branch',
                      return_value=android_branch)
-    android_target = 'android_test_target'
-    self.PatchObject(packages_service, 'determine_android_target',
-                     return_value=android_target)
     platform_version = '12345.1.2'
     self.PatchObject(packages_service, 'determine_platform_version',
                      return_value=platform_version)
@@ -508,9 +496,9 @@
 
     packages_controller.GetTargetVersions(request, self.response,
                                           self.api_config)
-    self.assertEqual(self.response.android_version, android_version)
+    self.assertEqual(self.response.android_version, '10.3')
     self.assertEqual(self.response.android_branch_version, android_branch)
-    self.assertEqual(self.response.android_target_version, android_target)
+    self.assertEqual(self.response.android_target_version, 'cheets')
     self.assertEqual(self.response.chrome_version, chrome_version)
     self.assertEqual(self.response.platform_version, platform_version)
     self.assertEqual(self.response.milestone_version, milestone_version)
@@ -525,11 +513,7 @@
     self.PatchObject(packages_service, 'determine_platform_version',
                      return_value=platform_version)
     self.PatchObject(packages_service, 'builds', return_value=False)
-    self.PatchObject(packages_service, 'determine_android_version',
-                     return_value=None)
-    self.PatchObject(packages_service, 'determine_android_branch',
-                     return_value=None)
-    self.PatchObject(packages_service, 'determine_android_target',
+    self.PatchObject(packages_service, 'determine_android_package',
                      return_value=None)
     request = self._GetRequest(board='betty')
     packages_controller.GetTargetVersions(request, self.response,