Files
cleveragents-core/benchmarks/execution_environment_bench.py

119 lines
3.6 KiB
Python

"""ASV benchmarks for execution environment routing.
Measures the performance of:
- ExecutionEnvironmentResolver.resolve() overhead
- ExecutionEnvironmentResolver.validate_container_available() overhead
- ExecutionEnvironmentResolver.resolve_and_validate() overhead
- ExecutionEnvironment enum instantiation
"""
from __future__ import annotations
import contextlib
import importlib
import sys
from pathlib import Path
# Ensure the local source tree is importable
_SRC = str(Path(__file__).resolve().parents[1] / "src")
if _SRC not in sys.path:
sys.path.insert(0, _SRC)
import cleveragents # noqa: E402
importlib.reload(cleveragents)
from cleveragents.application.services.execution_environment_resolver import ( # noqa: E402
ContainerUnavailableError,
ExecutionEnvironmentResolver,
)
from cleveragents.domain.models.core.plan import ExecutionEnvironment # noqa: E402
# ---------------------------------------------------------------------------
# Resolver resolution benchmarks
# ---------------------------------------------------------------------------
class ResolverResolutionSuite:
"""Benchmark resolution overhead."""
timeout = 60
def setup(self) -> None:
self.resolver = ExecutionEnvironmentResolver()
def time_resolve_default(self) -> None:
self.resolver.resolve()
def time_resolve_tool_override(self) -> None:
self.resolver.resolve(tool_env="container")
def time_resolve_full_chain(self) -> None:
self.resolver.resolve(
tool_env="host",
plan_env="container",
project_env="container",
default="host",
)
def time_resolve_plan_only(self) -> None:
self.resolver.resolve(plan_env="container")
def time_resolve_project_only(self) -> None:
self.resolver.resolve(project_env="host")
# ---------------------------------------------------------------------------
# Container validation benchmarks
# ---------------------------------------------------------------------------
class ContainerValidationSuite:
"""Benchmark container availability validation overhead."""
timeout = 60
def setup(self) -> None:
self.resolver = ExecutionEnvironmentResolver()
self.container_types = ["devcontainer-instance", "git-checkout"]
self.no_container_types = ["git-checkout", "fs-directory"]
def time_validate_with_container(self) -> None:
self.resolver.validate_container_available(self.container_types)
def time_validate_without_container_exception(self) -> None:
with contextlib.suppress(ContainerUnavailableError):
self.resolver.validate_container_available(self.no_container_types)
def time_resolve_and_validate_host(self) -> None:
self.resolver.resolve_and_validate(
linked_resource_types=self.container_types,
project_env="host",
)
def time_resolve_and_validate_container(self) -> None:
self.resolver.resolve_and_validate(
linked_resource_types=self.container_types,
plan_env="container",
)
# ---------------------------------------------------------------------------
# Enum instantiation benchmarks
# ---------------------------------------------------------------------------
class EnumInstantiationSuite:
"""Benchmark ExecutionEnvironment enum overhead."""
timeout = 60
def time_create_host(self) -> None:
ExecutionEnvironment("host")
def time_create_container(self) -> None:
ExecutionEnvironment("container")
def time_resolver_instantiation(self) -> None:
ExecutionEnvironmentResolver()