# 画面設計書 2-Metrics/Debugger Window

## 概要

Dear ImGuiの内部状態、描画メトリクス、パフォーマンス情報を表示するデバッグウィンドウの設計書である。開発者がImGuiの内部動作を理解し、パフォーマンス問題をデバッグするための包括的なツールを提供する。

### 本画面の処理概要

Metrics/Debugger Windowは、Dear ImGuiの内部状態を詳細に表示し、開発者がウィンドウ、描画リスト、フォント、テーブル、入力状態などの内部情報を確認できるようにするデバッグツールである。

**業務上の目的・背景**：ImGuiを使用したアプリケーション開発において、描画パフォーマンスの最適化、ウィンドウ構造の理解、レイアウト問題のデバッグ等を行うためにこのツールが必要となる。ImGuiの内部動作を可視化することで、開発者は問題の原因を特定しやすくなる。

**画面へのアクセス方法**：
1. Demo Window のメニューバーから「Tools」→「Metrics/Debugger」を選択
2. コード内で直接`ImGui::ShowMetricsWindow()`を呼び出す

**主要な操作・処理内容**：
1. フレームレート、頂点数、インデックス数などの基本メトリクスを確認する
2. Toolsセクションを展開してItem Picker、Debug Log、ID Stack Toolなどのデバッグツールを使用する
3. Windowsセクションを展開して全ウィンドウの状態を確認する
4. DrawListsセクションを展開して描画コマンドを確認する
5. Fontsセクションを展開してフォント情報を確認する
6. Settingsセクションを展開してINI設定データを確認する

**画面遷移**：
- 遷移元：Demo Window（Tools Menu）、またはアプリケーションコードからの直接呼び出し
- 遷移先：Debug Log Window、ID Stack Tool Window、Font Atlas表示

**権限による表示制御**：なし（デバッグ用途のため権限制御は不要）

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 13 | ShowMetricsWindow | 主機能 | メトリクス/デバッガウィンドウの表示 |
| 24 | Begin | 主機能 | ウィンドウの開始処理 |
| 25 | End | 主機能 | ウィンドウの終了処理 |
| 139 | CollapsingHeader | 主機能 | 各デバッグセクションの折りたたみ表示 |
| 135 | TreeNode | 主機能 | 内部状態のツリー表示 |
| 85 | Text | 補助機能 | メトリクス情報のテキスト表示 |
| 14 | ShowDebugLogWindow | 遷移先機能 | デバッグログウィンドウへの遷移 |
| 15 | ShowIDStackToolWindow | 遷移先機能 | IDスタックツールウィンドウへの遷移 |

## 画面種別

デバッグ/分析画面

## URL/ルーティング

N/A（Immediate Mode GUIのため、URLやルーティングの概念は適用されない）

## 入出力項目

| 項目名 | 型 | 入力/出力 | 必須 | 説明 |
|--------|-----|----------|------|------|
| p_open | bool* | 入出力 | 任意 | ウィンドウの表示状態を制御するポインタ |

## 表示項目

| 項目名 | 説明 |
|--------|------|
| バージョン情報 | Dear ImGuiのバージョンとコンテキスト名 |
| フレームレート | 現在のFPSとフレーム時間（ms） |
| 頂点/インデックス数 | レンダリングに使用される頂点数とインデックス数 |
| ウィンドウ数 | 現在表示されているウィンドウ数とメモリ割り当て数 |
| Toolsセクション | Item Picker、Debug Log、ID Stack Tool等のデバッグツール |
| Windowsセクション | 全ウィンドウのリスト（表示順、フォーカス順、Begin順） |
| DrawListsセクション | 描画リストと描画コマンドの詳細 |
| Viewportsセクション | ビューポート情報とミニマップ |
| Fontsセクション | フォントアトラスとフォント情報 |
| Popupsセクション | 現在開いているポップアップスタック |
| TabBarsセクション | タブバーの状態 |
| Tablesセクション | テーブルの状態 |
| Settingsセクション | INI設定データ |
| Memory allocationsセクション | メモリ割り当て情報 |

## イベント仕様

### 1-Item Picker有効化

「Show Item Picker」チェックボックスを有効にすると、任意のUI要素をクリックしてそのアイテムのIDと位置情報を取得できるモードになる。

### 2-Debug Log表示

「Show Debug Log」チェックボックスを有効にすると、別ウィンドウとしてDebug Log Windowが表示される。

### 3-ID Stack Tool表示

「Show ID Stack Tool」チェックボックスを有効にすると、別ウィンドウとしてID Stack Tool Windowが表示される。

### 4-ウィンドウ矩形表示

「Show windows rectangles」チェックボックスを有効にすると、選択した種類の矩形（OuterRect、InnerRect、WorkRect等）がオーバーレイ表示される。

### 5-テーブル矩形表示

「Show tables rectangles」チェックボックスを有効にすると、テーブルの各種矩形がオーバーレイ表示される。

## データベース更新仕様

N/A（Dear ImGuiはUIライブラリであり、データベース操作は行わない）

## メッセージ仕様

N/A

## 例外処理

| 状態 | 処理内容 |
|------|----------|
| ウィンドウ折りたたみ状態 | Begin()がfalseを返し、End()のみ呼び出して早期リターン |
| BeginCountが1より大きい | 同一フレームで複数回呼び出された場合、早期リターン |

## 備考

- IMGUI_DISABLE_DEBUG_TOOLSマクロが定義されている場合、この関数は空実装になる
- 描画メッシュやバウンディングボックスのホバー表示機能はデバッグに有用
- メモリ割り当て情報は最近のフレームでの割り当て/解放を追跡できる

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

Metrics Windowの設定を保持する構造体を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | imgui_internal.h | `imgui_internal.h` | ImGuiMetricsConfig構造体で表示オプションを管理 |

**読解のコツ**: ImGuiMetricsConfigにはShowDebugLog、ShowIDStackTool、ShowWindowsRects等のboolフラグと、表示する矩形タイプを指定するint変数が含まれる。

#### Step 2: エントリーポイントを理解する

ShowMetricsWindow関数がメトリクスウィンドウの描画処理のエントリーポイント。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | imgui.cpp | `imgui.cpp` | ShowMetricsWindow()関数（行16401以降）がエントリーポイント |

**主要処理フロー**:
1. **行16403-16409**: コンテキスト取得とサブウィンドウ（Debug Log、ID Stack Tool）の条件付き表示
2. **行16411-16415**: ウィンドウ開始とBeginCount検証
3. **行16421-16429**: 基本メトリクス（バージョン、FPS、頂点数等）の表示
4. **行16486-16588**: Toolsセクションの描画
5. **行16592-16612**: Windowsセクションの描画
6. **行16618-16626**: DrawListsセクションの描画
7. **行16644-16650**: Fontsセクションの描画

#### Step 3: デバッグノード関数を理解する

各種内部構造を表示するためのヘルパー関数群。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | imgui.cpp | `imgui.cpp` | DebugNodeWindow(), DebugNodeDrawList()等の関数 |

**主要処理フロー**:
- DebugNodeWindowsList(): ウィンドウリストをツリー表示
- DebugNodeDrawList(): 描画リストの詳細を表示
- DebugNodeFont(): フォント情報を表示
- DebugNodeTable(): テーブル情報を表示

### プログラム呼び出し階層図

```
ImGui::ShowMetricsWindow(bool* p_open)
    |
    +-- ShowDebugLogWindow()      [条件付き: cfg->ShowDebugLog]
    +-- ShowIDStackToolWindow()   [条件付き: cfg->ShowIDStackTool]
    |
    +-- ImGui::Begin("Dear ImGui Metrics/Debugger", p_open)
    |       |
    |       +-- DebugBreakClearData()
    |       |
    |       +-- Text() [基本メトリクス表示]
    |       |
    |       +-- TreeNode("Tools")
    |       |       +-- Checkbox("Show Item Picker")
    |       |       +-- Checkbox("Show Debug Log")
    |       |       +-- Checkbox("Show ID Stack Tool")
    |       |       +-- Checkbox("Show windows rectangles")
    |       |
    |       +-- TreeNode("Windows")
    |       |       +-- DebugNodeWindowsList()
    |       |
    |       +-- TreeNode("DrawLists")
    |       |       +-- DebugNodeDrawList() [複数]
    |       |
    |       +-- TreeNode("Fonts")
    |       |       +-- ShowFontAtlas()
    |       |
    |       +-- TreeNode("Popups")
    |       +-- TreeNode("TabBars")
    |       +-- TreeNode("Tables")
    |       +-- TreeNode("Settings")
    |       +-- TreeNode("Memory allocations")
    |
    +-- ImGui::End()
```

### データフロー図

```
[入力]                        [処理]                         [出力]

p_open (bool*)  ─────────▶ ShowMetricsWindow() ─────────▶  メトリクス表示
                                  |                         (ImDrawList)
ImGuiContext& g ─────────▶       |
(内部状態参照)                    |
                                  |
ImGuiMetricsConfig ◀───▶        |
(表示設定)                        |
                                  ▼
                           デバッグオーバーレイ
                           (矩形ハイライト等)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| imgui.cpp | `imgui.cpp` | ソース | ShowMetricsWindow()とDebugNode*関数の実装 |
| imgui.h | `imgui.h` | ヘッダー | ShowMetricsWindow()のAPI宣言 |
| imgui_internal.h | `imgui_internal.h` | ヘッダー | ImGuiMetricsConfig等の内部構造体定義 |
