diff options
author | 2024-11-06 16:09:16 -0800 | |
---|---|---|
committer | 2024-11-14 14:37:01 -0800 | |
commit | 7d859717222994d115e182b2525001d0e1dd2b9a (patch) | |
tree | a50bc111921aba5e4fbb5ae52aab3b3cd7f51e0b | |
parent | 29b821e5b4ae577f6af13ce1c14f1ecc1c512a30 (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.bp | 3 | ||||
-rw-r--r-- | ci/build_test_suites.py | 38 | ||||
-rw-r--r-- | ci/build_test_suites_test.py | 5 |
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): |