summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Luca Farsi <lucafarsi@google.com> 2024-11-06 16:09:16 -0800
committer Luca Farsi <lucafarsi@google.com> 2024-11-14 14:37:01 -0800
commit7d859717222994d115e182b2525001d0e1dd2b9a (patch)
treea50bc111921aba5e4fbb5ae52aab3b3cd7f51e0b
parent29b821e5b4ae577f6af13ce1c14f1ecc1c512a30 (diff)
Record initial metrics in build_test_suites
Record initial metrics for analysis time and packaging time in build_test_suites. Per-target metrics will be reported after initial test discovery agent integration. Test: atest build_test_suites_test && atest optimized_targets_test Bug: 372973116 Change-Id: Id3711ce078bfbfdc4c264a29751c475b4bd0cebd
-rw-r--r--ci/Android.bp3
-rw-r--r--ci/build_test_suites.py38
-rw-r--r--ci/build_test_suites_test.py5
3 files changed, 35 insertions, 11 deletions
diff --git a/ci/Android.bp b/ci/Android.bp
index 9611f47c7b..3f28be4494 100644
--- a/ci/Android.bp
+++ b/ci/Android.bp
@@ -123,6 +123,9 @@ python_library_host {
"metrics_agent.py",
"buildbot.py",
],
+ libs: [
+ "soong-metrics-proto-py",
+ ],
}
python_library_host {
diff --git a/ci/build_test_suites.py b/ci/build_test_suites.py
index 9e56a20a79..7d76b9afdc 100644
--- a/ci/build_test_suites.py
+++ b/ci/build_test_suites.py
@@ -25,6 +25,7 @@ import sys
from typing import Callable
from build_context import BuildContext
import optimized_targets
+import metrics_agent
REQUIRED_ENV_VARS = frozenset(['TARGET_PRODUCT', 'TARGET_RELEASE', 'TOP'])
@@ -113,19 +114,27 @@ def build_test_suites(argv: list[str]) -> int:
Returns:
The exit code of the build.
"""
- args = parse_args(argv)
- check_required_env()
- build_context = BuildContext(load_build_context())
- build_planner = BuildPlanner(
- build_context, args, optimized_targets.OPTIMIZED_BUILD_TARGETS
- )
- build_plan = build_planner.create_build_plan()
+ get_metrics_agent().analysis_start()
+ try:
+ args = parse_args(argv)
+ check_required_env()
+ build_context = BuildContext(load_build_context())
+ build_planner = BuildPlanner(
+ build_context, args, optimized_targets.OPTIMIZED_BUILD_TARGETS
+ )
+ build_plan = build_planner.create_build_plan()
+ except:
+ raise
+ finally:
+ get_metrics_agent().analysis_end()
try:
execute_build_plan(build_plan)
except BuildFailureError as e:
logging.error('Build command failed! Check build_log for details.')
return e.return_code
+ finally:
+ get_metrics_agent().end_reporting()
return 0
@@ -183,12 +192,15 @@ def execute_build_plan(build_plan: BuildPlan):
except subprocess.CalledProcessError as e:
raise BuildFailureError(e.returncode) from e
- for packaging_commands_getter in build_plan.packaging_commands_getters:
- try:
+ get_metrics_agent().packaging_start()
+ try:
+ for packaging_commands_getter in build_plan.packaging_commands_getters:
for packaging_command in packaging_commands_getter():
run_command(packaging_command)
- except subprocess.CalledProcessError as e:
- raise BuildFailureError(e.returncode) from e
+ except subprocess.CalledProcessError as e:
+ raise BuildFailureError(e.returncode) from e
+ finally:
+ get_metrics_agent().packaging_end()
def get_top() -> pathlib.Path:
@@ -199,6 +211,10 @@ def run_command(args: list[str], stdout=None):
subprocess.run(args=args, check=True, stdout=stdout)
+def get_metrics_agent():
+ return metrics_agent.MetricsAgent.instance()
+
+
def main(argv):
dist_dir = os.environ.get('DIST_DIR')
if dist_dir:
diff --git a/ci/build_test_suites_test.py b/ci/build_test_suites_test.py
index 2afaab7711..c7cd4ab1b0 100644
--- a/ci/build_test_suites_test.py
+++ b/ci/build_test_suites_test.py
@@ -37,6 +37,7 @@ import build_test_suites
import ci_test_lib
import optimized_targets
from pyfakefs import fake_filesystem_unittest
+import metrics_agent
class BuildTestSuitesTest(fake_filesystem_unittest.TestCase):
@@ -52,6 +53,10 @@ class BuildTestSuitesTest(fake_filesystem_unittest.TestCase):
self.addCleanup(subprocess_run_patcher.stop)
self.mock_subprocess_run = subprocess_run_patcher.start()
+ metrics_agent_finalize_patcher = mock.patch('metrics_agent.MetricsAgent.end_reporting')
+ self.addCleanup(metrics_agent_finalize_patcher.stop)
+ self.mock_metrics_agent_end = metrics_agent_finalize_patcher.start()
+
self._setup_working_build_env()
def test_missing_target_release_env_var_raises(self):