Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d859717 authored by Luca Farsi's avatar Luca Farsi
Browse files

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
parent 29b821e5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -123,6 +123,9 @@ python_library_host {
        "metrics_agent.py",
        "buildbot.py",
    ],
    libs: [
        "soong-metrics-proto-py",
    ],
}

python_library_host {
+27 −11
Original line number Diff line number Diff line
@@ -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,6 +114,8 @@ def build_test_suites(argv: list[str]) -> int:
  Returns:
    The exit code of the build.
  """
  get_metrics_agent().analysis_start()
  try:
    args = parse_args(argv)
    check_required_env()
    build_context = BuildContext(load_build_context())
@@ -120,12 +123,18 @@ def build_test_suites(argv: list[str]) -> int:
        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:
  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
  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:
+5 −0
Original line number Diff line number Diff line
@@ -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):