_render_shutdown_cycles in src/copilot_usage/render_detail.py (lines 243–244) makes two separate generator passes over sd.modelMetrics.values() per shutdown cycle to compute total_requests and total_output. Each pass walks all model-metrics entries again, so the function does 2 × M × C iterations instead of M × C (where M = number of distinct models, C = number of shutdown cycles).
Location
File: src/copilot_usage/render_detail.py
Function: _render_shutdown_cycles
Lines: 243–244
for ts, sd in summary.shutdown_cycles:
date_str = ts.strftime("%Y-%m-%d %H:%M") if ts else "—"
total_requests = sum(mm.requests.count for mm in sd.modelMetrics.values()) # pass 1
total_output = sum(mm.usage.outputTokens for mm in sd.modelMetrics.values()) # pass 2
table.add_row(...)
Fix
Merge both sums into a single pass:
for ts, sd in summary.shutdown_cycles:
date_str = ts.strftime("%Y-%m-%d %H:%M") if ts else "—"
total_requests = 0
total_output = 0
for mm in sd.modelMetrics.values():
total_requests += mm.requests.count
total_output += mm.usage.outputTokens
table.add_row(
date_str,
str(sd.totalPremiumRequests),
str(total_requests),
format_tokens(total_output),
format_duration(sd.totalApiDurationMs),
)
Expected improvement: Halves the number of dict-value iterations per cycle. For a session with C cycles and M models per cycle, iteration count drops from 2 × M × C to M × C.
Testing requirement
Add a unit test for _render_shutdown_cycles (or the public render_session_detail) with a session containing multiple shutdown cycles each having at least two models. Assert:
- The rendered table shows the correct
total_requests and total_output values for each cycle (correctness).
- Optionally: spy on
sd.modelMetrics.values to confirm iteration count equals M per cycle (not 2M) as a regression guard.
Generated by Performance Analysis · ● 3.8M · ◷
_render_shutdown_cyclesinsrc/copilot_usage/render_detail.py(lines 243–244) makes two separate generator passes oversd.modelMetrics.values()per shutdown cycle to computetotal_requestsandtotal_output. Each pass walks all model-metrics entries again, so the function does2 × M × Citerations instead ofM × C(where M = number of distinct models, C = number of shutdown cycles).Location
File:
src/copilot_usage/render_detail.pyFunction:
_render_shutdown_cyclesLines: 243–244
Fix
Merge both sums into a single pass:
Expected improvement: Halves the number of dict-value iterations per cycle. For a session with C cycles and M models per cycle, iteration count drops from
2 × M × CtoM × C.Testing requirement
Add a unit test for
_render_shutdown_cycles(or the publicrender_session_detail) with a session containing multiple shutdown cycles each having at least two models. Assert:total_requestsandtotal_outputvalues for each cycle (correctness).sd.modelMetrics.valuesto confirm iteration count equalsMper cycle (not2M) as a regression guard.