docs(conductor): Synchronize docs for track 'GUI Performance Profiling & Optimization'

This commit is contained in:
2026-03-07 13:20:12 -05:00
parent 7198c8717a
commit d71d82bafb
7 changed files with 184 additions and 100 deletions

View File

@@ -149,6 +149,7 @@ class App:
def current_provider(self, value: str) -> None:
self.controller.current_provider = value
@property
@property
def current_model(self) -> str:
return self.controller.current_model
@@ -156,9 +157,14 @@ class App:
@current_model.setter
def current_model(self, value: str) -> None:
self.controller.current_model = value
# ---------------------------------------------------------------- project loading
# ---------------------------------------------------------------- logic
@property
def perf_profiling_enabled(self) -> bool:
return self.controller.perf_profiling_enabled
@perf_profiling_enabled.setter
def perf_profiling_enabled(self, value: bool) -> None:
self.controller.perf_profiling_enabled = value
def shutdown(self) -> None:
"""Cleanly shuts down the app's background tasks and saves state."""
try:
@@ -863,6 +869,7 @@ class App:
traceback.print_exc()
def _render_projects_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_projects_panel")
proj_name = self.project.get("project", {}).get("name", Path(self.active_project_path).stem)
imgui.text_colored(C_IN, f"Active: {proj_name}")
imgui.separator()
@@ -949,6 +956,7 @@ class App:
ch, val = imgui.checkbox(f"Enable {t_name}", val)
if ch:
self.ui_agent_tools[t_name] = val
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_projects_panel")
def _render_track_proposal_modal(self) -> None:
if self._show_track_proposal_modal:
@@ -1143,6 +1151,7 @@ class App:
imgui.end()
def _render_files_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_files_panel")
imgui.text("Paths")
imgui.same_line()
imgui.text("| Base Dir:")
@@ -1203,8 +1212,10 @@ class App:
d = filedialog.askdirectory()
r.destroy()
if d: self.files.append(models.FileItem(path=str(Path(d) / "**" / "*")))
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_files_panel")
def _render_screenshots_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_screenshots_panel")
imgui.text("Paths")
imgui.same_line()
imgui.text("| Base Dir:")
@@ -1235,6 +1246,7 @@ class App:
r.destroy()
for p in paths:
if p not in self.screenshots: self.screenshots.append(p)
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_screenshots_panel")
def _render_discussion_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_discussion_panel")
@@ -1447,6 +1459,7 @@ class App:
imgui.end_child()
def _render_provider_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_provider_panel")
imgui.text("Provider")
if imgui.begin_combo("##prov", self.current_provider):
for p in PROVIDERS:
@@ -1489,8 +1502,10 @@ class App:
if ch:
if hasattr(ai_client, "_gemini_cli_adapter") and ai_client._gemini_cli_adapter:
ai_client._gemini_cli_adapter.binary_path = self.ui_gemini_cli_path
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_provider_panel")
def _render_token_budget_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_token_budget_panel")
imgui.text("Session Telemetry")
usage = self.session_usage
total = usage["input_tokens"] + usage["output_tokens"]
@@ -1511,6 +1526,7 @@ class App:
stats = self._token_stats
if not stats:
imgui.text_disabled("Token stats unavailable")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_token_budget_panel")
return
pct = stats.get("utilization_pct", 0.0)
current = stats.get("estimated_prompt_tokens", stats.get("total_tokens", 0))
@@ -1590,15 +1606,20 @@ class App:
imgui.text_colored(C_LBL, f"Gemini Cache: ACTIVE | Age: {age:.0f}s / {ttl}s | Renews at: {ttl * 0.9:.0f}s")
else:
imgui.text_disabled("Gemini Cache: INACTIVE")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_token_budget_panel")
def _render_cache_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_cache_panel")
if self.current_provider != "gemini":
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_cache_panel")
return
if not imgui.collapsing_header("Cache Analytics"):
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_cache_panel")
return
stats = getattr(self.controller, '_cached_cache_stats', {})
if not stats.get("cache_exists"):
imgui.text_disabled("No active cache")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_cache_panel")
return
age_sec = stats.get("cache_age_seconds", 0)
ttl_remaining = stats.get("ttl_remaining", 0)
@@ -1621,9 +1642,12 @@ class App:
self._cache_cleared_timestamp = time.time()
if hasattr(self, '_cache_cleared_timestamp') and time.time() - self._cache_cleared_timestamp < 5:
imgui.text_colored(imgui.ImVec4(0.2, 1.0, 0.2, 1.0), "Cache cleared - will rebuild on next request")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_cache_panel")
def _render_tool_analytics_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_tool_analytics_panel")
if not imgui.collapsing_header("Tool Usage Analytics"):
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_tool_analytics_panel")
return
now = time.time()
if not hasattr(self, '_tool_stats_cache_time') or now - self._tool_stats_cache_time > 1.0:
@@ -1631,6 +1655,7 @@ class App:
tool_stats = getattr(self.controller, '_cached_tool_stats', {})
if not tool_stats:
imgui.text_disabled("No tool usage data")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_tool_analytics_panel")
return
if imgui.begin_table("tool_stats", 4, imgui.TableFlags_.borders | imgui.TableFlags_.sortable):
imgui.table_setup_column("Tool")
@@ -1658,9 +1683,12 @@ class App:
else:
imgui.text("0%")
imgui.end_table()
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_tool_analytics_panel")
def _render_session_insights_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_session_insights_panel")
if not imgui.collapsing_header("Session Insights"):
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_session_insights_panel")
return
insights = self.controller.get_session_insights()
imgui.text(f"Total Tokens: {insights.get('total_tokens', 0):,}")
@@ -1671,8 +1699,10 @@ class App:
efficiency = insights.get('efficiency', 0)
imgui.text(f"Completed: {completed}")
imgui.text(f"Tokens/Ticket: {efficiency:.0f}" if efficiency > 0 else "Tokens/Ticket: N/A")
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_session_insights_panel")
def _render_message_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_message_panel")
# LIVE indicator
is_live = self.ai_status in ["running powershell...", "fetching url...", "searching web...", "powershell done, awaiting AI..."]
if is_live:
@@ -1707,8 +1737,10 @@ class App:
if imgui.button("-> History"):
if self.ui_ai_input:
self.disc_entries.append({"role": "User", "content": self.ui_ai_input, "collapsed": False, "ts": project_manager.now_ts()})
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_message_panel")
def _render_response_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_response_panel")
if self._trigger_blink:
self._trigger_blink = False
self._is_blinking = True
@@ -1740,8 +1772,10 @@ class App:
self.disc_entries.append({"role": "AI", "content": self.ai_response, "collapsed": True, "ts": project_manager.now_ts()})
if is_blinking:
imgui.pop_style_color(2)
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_response_panel")
def _render_comms_history_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_comms_history_panel")
imgui.text_colored(vec4(200, 220, 160), f"Status: {self.ai_status}")
imgui.same_line()
if imgui.button("Clear##comms"):
@@ -1844,8 +1878,10 @@ class App:
imgui.end_child()
if self.is_viewing_prior_session:
imgui.pop_style_color()
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_comms_history_panel")
def _render_tool_calls_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_tool_calls_panel")
imgui.text("Tool call history")
imgui.same_line()
if imgui.button("Clear##tc"):
@@ -1900,6 +1936,7 @@ class App:
if self._scroll_tool_calls_to_bottom:
imgui.set_scroll_here_y(1.0)
self._scroll_tool_calls_to_bottom = False
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_tool_calls_panel")
def _render_mma_dashboard(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_mma_dashboard")
@@ -2302,6 +2339,7 @@ class App:
self._push_mma_state_update()
def _render_tier_stream_panel(self, tier_key: str, stream_key: str | None) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_tier_stream_panel")
if stream_key is not None:
content = self.mma_streams.get(stream_key, "")
imgui.begin_child(f"##stream_content_{tier_key}", imgui.ImVec2(-1, -1))
@@ -2339,6 +2377,7 @@ class App:
except (TypeError, AttributeError):
pass
imgui.end_child()
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_tier_stream_panel")
def _render_system_prompts_panel(self) -> None:
imgui.text("Global System Prompt (all projects)")
@@ -2348,6 +2387,7 @@ class App:
ch, self.ui_project_system_prompt = imgui.input_text_multiline("##psp", self.ui_project_system_prompt, imgui.ImVec2(-1, 100))
def _render_theme_panel(self) -> None:
if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_theme_panel")
exp, opened = imgui.begin("Theme", self.show_windows["Theme"])
self.show_windows["Theme"] = bool(opened)
if exp:
@@ -2394,6 +2434,7 @@ class App:
ch, scale = imgui.slider_float("##scale", theme.get_current_scale(), 0.5, 3.0, "%.2f")
if ch: theme.set_scale(scale)
imgui.end()
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_theme_panel")
def _load_fonts(self) -> None:
font_path, font_size = theme.get_font_loading_params()