Files
cleveragents-core/benchmarks/project_context_policy_bench.py

143 lines
4.2 KiB
Python

"""ASV benchmarks for ProjectContextPolicy validation overhead.
Measures the performance of:
- ContextView construction (Pydantic validation)
- ProjectContextPolicy construction
- resolve_view() for each phase
- JSON serialization round-trip
"""
from __future__ import annotations
import sys
from pathlib import Path
try:
from cleveragents.domain.models.core.context_policy import (
ContextView,
ProjectContextPolicy,
)
except ModuleNotFoundError:
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
from cleveragents.domain.models.core.context_policy import (
ContextView,
ProjectContextPolicy,
)
def _make_view() -> ContextView:
"""Create a fully-populated ContextView."""
return ContextView(
include_resources=["db-*", "cache-*"],
exclude_resources=["db-test"],
include_paths=["src/**/*.py", "lib/**"],
exclude_paths=["*.pyc", "__pycache__/**"],
max_file_size=1048576,
max_total_size=10485760,
)
def _make_policy() -> ProjectContextPolicy:
"""Create a fully-populated ProjectContextPolicy."""
return ProjectContextPolicy(
default_view=ContextView(
include_resources=["db-*"],
exclude_resources=["db-test"],
include_paths=["src/**"],
exclude_paths=["*.pyc"],
max_file_size=1048576,
max_total_size=10485760,
),
strategize_view=ContextView(
include_resources=["db-*", "cache-*"],
),
execute_view=ContextView(
include_paths=["src/**", "lib/**"],
),
apply_view=ContextView(
exclude_paths=["tests/**"],
),
)
class ContextViewValidationSuite:
"""Benchmark ContextView model construction."""
def time_view_construction(self) -> None:
"""Benchmark creating a fully-populated ContextView."""
_make_view()
def time_view_minimal_construction(self) -> None:
"""Benchmark creating a minimal ContextView."""
ContextView()
def time_view_with_size_limits(self) -> None:
"""Benchmark ContextView with size limit validation."""
ContextView(
max_file_size=1048576,
max_total_size=10485760,
)
class PolicyValidationSuite:
"""Benchmark ProjectContextPolicy model construction."""
def time_policy_construction(self) -> None:
"""Benchmark creating a fully-populated policy."""
_make_policy()
def time_policy_empty_construction(self) -> None:
"""Benchmark creating an empty policy."""
ProjectContextPolicy()
def time_policy_default_only(self) -> None:
"""Benchmark policy with only default view."""
ProjectContextPolicy(
default_view=_make_view(),
)
class PolicyResolveSuite:
"""Benchmark resolve_view() for each phase."""
def setup(self) -> None:
"""Create policy for resolve benchmarks."""
self.policy = _make_policy()
def time_resolve_default(self) -> None:
"""Benchmark resolve_view('default')."""
self.policy.resolve_view("default")
def time_resolve_strategize(self) -> None:
"""Benchmark resolve_view('strategize')."""
self.policy.resolve_view("strategize")
def time_resolve_execute(self) -> None:
"""Benchmark resolve_view('execute')."""
self.policy.resolve_view("execute")
def time_resolve_apply(self) -> None:
"""Benchmark resolve_view('apply')."""
self.policy.resolve_view("apply")
class PolicySerializationSuite:
"""Benchmark policy serialization."""
def setup(self) -> None:
"""Create policy for serialization benchmarks."""
self.policy = _make_policy()
def time_model_dump(self) -> None:
"""Benchmark model_dump() dict serialization."""
self.policy.model_dump()
def time_model_dump_json(self) -> None:
"""Benchmark model_dump_json() JSON serialization."""
self.policy.model_dump_json()
def time_json_roundtrip(self) -> None:
"""Benchmark JSON serialize + deserialize."""
json_str = self.policy.model_dump_json()
ProjectContextPolicy.model_validate_json(json_str)