Files
manual_slop/scripts/profile_baseline.py
T

79 lines
2.3 KiB
Python

import sys
import os
import time
from pathlib import Path
# Add project root to sys.path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
if project_root not in sys.path:
sys.path.append(project_root)
from src.performance_monitor import get_monitor
from src.aggregate import build_file_items
from src.dag_engine import TrackDAG
from src.models import Ticket
def run_aggregation_profile():
monitor = get_monitor()
base_dir = Path(project_root)
# Get 30 python files for profiling
files = [str(p.relative_to(base_dir)) for p in base_dir.glob("src/*.py")][:30]
with monitor.scope("aggregation"):
build_file_items(base_dir, files)
def run_dag_profile():
monitor = get_monitor()
tickets = []
# Create 60 tickets with multiple dependencies to simulate complexity
for i in range(60):
deps = []
if i > 0: deps.append(f"ticket_{i-1}")
if i > 5: deps.append(f"ticket_{i-5}")
if i > 10: deps.append(f"ticket_{i-10}")
tickets.append(Ticket(
id=f"ticket_{i}",
description=f"Ticket {i}",
depends_on=deps
))
dag = TrackDAG(tickets)
with monitor.scope("dag_operations"):
# Run operations 50 times per profile call
for _ in range(50):
dag.topological_sort()
dag.has_cycle()
def print_metrics():
monitor = get_monitor()
metrics = monitor.get_metrics()
print(f"{'Component':<30} | {'Avg (ms)':<12} | {'Count':<8} | {'Max (ms)':<12} | {'Min (ms)':<12}")
print("-" * 85)
# Collect all base component names
components = set()
for key in metrics.keys():
if key.startswith("time_") and key.endswith("_ms") and not key.endswith("_avg"):
components.add(key[5:-3])
for comp in sorted(list(components)):
avg = metrics.get(f"time_{comp}_ms_avg", 0.0)
count = int(metrics.get(f"count_{comp}", 0))
max_val = metrics.get(f"max_{comp}_ms", 0.0)
min_val = metrics.get(f"min_{comp}_ms", 0.0)
print(f"{comp:<30} | {avg:<12.4f} | {count:<8} | {max_val:<12.4f} | {min_val:<12.4f}")
def main():
monitor = get_monitor()
monitor.enabled = True
print("Starting Profiling Baseline...")
print("Running aggregation profile (5 iterations)...")
for _ in range(5):
run_aggregation_profile()
print("Running DAG profile (5 iterations)...")
for _ in range(5):
run_dag_profile()
print("\nBaseline Performance Metrics:")
print_metrics()
monitor.stop()
if __name__ == "__main__":
main()