[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71PBTREFREXAQTY9P89W114":3,"skill-same:01M71PBTREFREXAQTY9P89W114":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M71PBTREFREXAQTY9P89W114","gds-performance-test",null,"Design game performance testing strategy. Use when the user says \"performance test\" or \"benchmark\"","developAgent\u002Fbmad-start","developAgent","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F264530239?v=4","01M71J8X6CY24V5ZZHFGETRMSW","01M71J8X739FS28DGQAAY7V4QR",1,"MIT","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.ona\u002Fskills\u002Fgds-performance-test\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"performance","gds performance test","test","performance test","testing","design","strategy","testing strategy","use","when","game","performance testing","benchmark","user","2026-11-10 13:02:02",false,"---\nname: gds-performance-test\ndescription: 'Design game performance testing strategy. Use when the user says \"performance test\" or \"benchmark\"'\n---\n\n# Performance Testing Strategy Workflow\n\n**Goal:** Design a comprehensive performance testing strategy covering frame rate, memory usage, loading times, and platform-specific requirements. Performance directly impacts player experience — this workflow produces a concrete plan with automated tests, benchmark scenarios, and platform matrices.\n\n**Your Role:** You are a senior game performance engineer and QA strategist. Work with the user to identify their platforms, performance requirements, and representative content, then produce a strategy that combines automated profiling, manual testing checklists, and CI-integrated benchmarks.\n\n---\n\n## Conventions\n\n- Bare paths (e.g. `template.md`) resolve from the skill root.\n- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).\n- `{project-root}`-prefixed paths resolve from the project working directory.\n- `{skill-name}` resolves to the skill directory's basename.\n\n## On Activation\n\n### Step 1: Resolve the Workflow Block\n\nRun: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow`\n\n**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:\n\n1. `{skill-root}\u002Fcustomize.toml` — defaults\n2. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.toml` — team overrides\n3. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.user.toml` — personal overrides\n\nAny missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.\n\n### Step 2: Execute Prepend Steps\n\nExecute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.\n\n### Step 3: Load Persistent Facts\n\nTreat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.\n\n### Step 4: Load Config\n\nLoad config from `{project-root}\u002F_bmad\u002Fgds\u002Fconfig.yaml` and resolve:\n\n- `project_name`\n- `user_name`\n- `communication_language`\n- `output_folder`\n\n### Step 5: Greet the User\n\nGreet `{user_name}`, speaking in `{communication_language}`.\n\n### Step 6: Execute Append Steps\n\nExecute each entry in `{workflow.activation_steps_append}` in order.\n\nActivation is complete. Begin the workflow below.\n\n## WORKFLOW ARCHITECTURE\n\nThis uses an **inline workflow pattern** for autonomous execution:\n\n- Steps execute sequentially, building toward a complete performance test plan document\n- Platform detection and target configuration drive all subsequent decisions\n- The final deliverable is a comprehensive Performance Test Plan document\n- Knowledge base reference: `knowledge\u002Fperformance-testing.md`\n\n### Preflight Requirements\n\nBefore proceeding, verify:\n\n- Target platforms identified (or discoverable from project files)\n- Performance requirements known (target FPS, memory limits), or to be defined in Step 1\n- Representative content available for testing\n- Profiling tools accessible\n\n\n### Paths\n\n- `installed_path` = `{skill_root}`\n- `validation` = `{installed_path}\u002Fchecklist.md`\n- `template` = `{installed_path}\u002Fperformance-template.md`\n- `default_output_file` = `{output_folder}\u002Fperformance-test-plan.md`\n\n### Variables\n\n- `target_fps` = `60` (configurable per platform in Step 1)\n- `target_platform` = `auto` (options: `auto`, `pc`, `console`, `mobile`)\n- `game_engine` = `auto` (options: `auto`, `unity`, `unreal`, `godot`)\n\n---\n\n## EXECUTION\n\n\u003Cworkflow>\n\n\u003Cstep n=\"1\" goal=\"Define Performance Targets\">\n  \u003Caction>Detect game engine and target platforms from project files. If ambiguous, ask the user.\u003C\u002Faction>\n  \u003Caction>Establish frame rate targets per platform:\n\n| Platform          | Target FPS | Minimum FPS | Notes              |\n| ----------------- | ---------- | ----------- | ------------------ |\n| PC (High)         | 60+        | 30          | Uncapped option    |\n| PC (Low)          | 30         | 30          | Scalable settings  |\n| PS5\u002FXbox X        | 60         | 60          | Performance mode   |\n| PS4\u002FXbox One      | 30         | 30          | Locked             |\n| Switch Docked     | 30         | 30          | Stable             |\n| Switch Handheld   | 30         | 25          | Power saving       |\n| Mobile (High)     | 60         | 30          | Device dependent   |\n| Mobile (Standard) | 30         | 30          | Thermal throttling |\n\n  Filter this table to the user's actual target platforms. Adjust targets based on game genre and user input.\n  \u003C\u002Faction>\n  \u003Caction>Establish memory budgets per target platform:\n\n| Platform      | Total RAM | Game Budget | Notes               |\n| ------------- | --------- | ----------- | ------------------- |\n| PC (Min spec) | 8 GB      | 4 GB        | Leave room for OS   |\n| PS5           | 16 GB     | 12 GB       | Unified memory      |\n| Xbox Series X | 16 GB     | 13 GB       | With Smart Delivery |\n| Switch        | 4 GB      | 2.5 GB      | Tight constraints   |\n| Mobile        | 4-6 GB    | 1.5-2 GB    | Background apps     |\n\n  \u003C\u002Faction>\n  \u003Caction>Establish loading time targets:\n\n| Scenario     | Target | Maximum |\n| ------------ | ------ | ------- |\n| Initial boot | \u003C 10s  | 30s     |\n| Level load   | \u003C 15s  | 30s     |\n| Fast travel  | \u003C 5s   | 10s     |\n| Respawn      | \u003C 3s   | 5s      |\n\n  Adjust based on genre (e.g., fast travel may not apply to linear games).\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"2\" goal=\"Identify Test Scenarios\">\n  \u003Caction>Define stress test scenarios for frame rate validation:\n```\nSCENARIO: Maximum Entity Count\n  GIVEN game level with normal enemy spawn\n  WHEN enemy count reaches 50+\n  THEN frame rate stays above minimum\n  AND no visual artifacts\n  AND audio doesn't stutter\n\nSCENARIO: Particle System Stress\n  GIVEN combat with multiple effects\n  WHEN 20+ particle systems active\n  THEN frame rate degradation \u003C 20%\n  AND memory allocation stable\n\nSCENARIO: Draw Call Stress\n  GIVEN level with maximum visible geometry\n  WHEN camera shows worst-case view\n  THEN frame rate stays above minimum\n  AND no hitching or stuttering\n```\n  \u003C\u002Faction>\n  \u003Caction>Define memory test scenarios:\n```\nSCENARIO: Extended Play Session\n  GIVEN game running for 4+ hours\n  WHEN normal gameplay occurs\n  THEN memory usage remains stable\n  AND no memory leaks detected\n  AND no crash from fragmentation\n\nSCENARIO: Level Transition\n  GIVEN player completes level\n  WHEN transitioning to new level\n  THEN previous level fully unloaded\n  AND memory baseline returns\n  AND no cumulative growth\n```\n  \u003C\u002Faction>\n  \u003Caction>Define loading test scenarios:\n```\nSCENARIO: Cold Boot\n  GIVEN game not in memory\n  WHEN launching game\n  THEN reaches interactive state in \u003C target\n  AND loading feedback shown\n  AND no apparent hang\n\nSCENARIO: Save\u002FLoad Performance\n  GIVEN large save file (max progress)\n  WHEN loading save\n  THEN completes in \u003C target\n  AND no corruption\n  AND gameplay resumes smoothly\n```\n  \u003C\u002Faction>\n  \u003Caction>Adapt scenario details to match the specific game type and identified systems\u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"3\" goal=\"Define Test Methodology\">\n  \u003Caction>Generate automated performance test code for the detected engine\u003C\u002Faction>\n\n  \u003Ccheck if=\"engine == 'unity'\">\n    \u003Caction>Generate Unity Performance Test Runner examples:\n```csharp\n[UnityTest]\npublic IEnumerator Performance_CombatScene_MaintainsFPS()\n{\n    using (Measure.ProfilerMarkers(new[] { \"Main Thread\" }))\n    {\n        SceneManager.LoadScene(\"CombatStressTest\");\n        yield return new WaitForSeconds(30f);\n    }\n    var metrics = Measure.Custom(new SampleGroupDefinition(\"FPS\"));\n    Assert.Greater(metrics.Median, 30, \"FPS should stay above 30\");\n}\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"engine == 'unreal'\">\n    \u003Caction>Generate Unreal Automation test examples:\n```cpp\nbool FPerformanceTest::RunTest(const FString& Parameters)\n{\n    float StartTime = FPlatformTime::Seconds();\n    for (int i = 0; i \u003C 100; i++)\n        GetWorld()->SpawnActor\u003CAStressTestActor>();\n    float FrameTime = FApp::GetDeltaTime();\n    TestTrue(\"Frame time under budget\", FrameTime \u003C 0.033f);\n    return true;\n}\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"engine == 'godot'\">\n    \u003Caction>Generate Godot benchmark test examples:\n```gdscript\nfunc test_performance_entity_stress():\n    var frame_times = []\n    for i in range(100):\n        var entity = stress_entity.instantiate()\n        add_child(entity)\n    for i in range(300):\n        await get_tree().process_frame\n        frame_times.append(Performance.get_monitor(Performance.TIME_PROCESS))\n    var avg_frame_time = frame_times.reduce(func(a, b): return a + b) \u002F frame_times.size()\n    assert_lt(avg_frame_time, 0.033, \"Average frame time under 33ms (30 FPS)\")\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Caction>Define manual profiling checklists:\n\n**CPU Profiling**\n- [ ] Identify hotspots using engine profiler\n- [ ] Check GC frequency and allocation pressure\n- [ ] Verify multithreading usage and thread contention\n\n**GPU Profiling**\n- [ ] Draw call count at target scenes\n- [ ] Overdraw analysis on complex areas\n- [ ] Shader complexity assessment\n\n**Memory Profiling**\n- [ ] Heap allocation patterns over a 30-minute session\n- [ ] Asset memory usage by category\n- [ ] Leak detection across multiple level loads\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"4\" goal=\"Create Benchmark Suite\">\n  \u003Caction>Define the benchmark levels and their purpose:\n\n| Benchmark       | Purpose                  | Duration |\n| --------------- | ------------------------ | -------- |\n| Combat Stress   | Max entities, effects    | 60s      |\n| Open World      | Draw distance, streaming | 120s     |\n| Menu Navigation | UI performance           | 30s      |\n| Save\u002FLoad       | Persistence performance  | 30s      |\n\n  Adapt benchmark names and durations to match the actual game content.\n  \u003C\u002Faction>\n  \u003Caction>Define baseline capture process:\n    1. Run benchmarks on reference hardware (document hardware specs)\n    2. Record baseline metrics (avg FPS, P95 frame time, peak memory)\n    3. Set regression thresholds (e.g., 10% FPS degradation = fail, 5% memory growth = fail)\n    4. Integrate benchmarks into CI pipeline as gated checks\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"5\" goal=\"Platform-Specific Testing\">\n  \u003Caction>Define platform-specific testing requirements for each target platform\u003C\u002Faction>\n\n  \u003Ccheck if=\"platform includes 'pc'\">\n    \u003Caction>PC testing requirements:\n      - Test across min\u002Frecommended hardware specs\n      - Verify quality settings (Low\u002FMedium\u002FHigh\u002FUltra) all perform within budget\n      - Check VRAM usage at each quality tier\n      - Test at multiple resolutions (1080p, 1440p, 4K)\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"platform includes 'console'\">\n    \u003Caction>Console testing requirements:\n      - Test in both Performance and Quality modes if applicable\n      - Verify thermal throttling behavior during extended sessions\n      - Check suspend\u002Fresume impact on frame rate and memory\n      - Test with varying storage speeds (internal SSD vs extended storage)\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"platform includes 'mobile'\">\n    \u003Caction>Mobile testing requirements:\n      - Test on low\u002Fmid\u002Fhigh tier representative devices\n      - Monitor thermal throttling onset time and severity\n      - Measure battery drain per hour of gameplay\n      - Test with background apps consuming memory\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"6\" goal=\"Generate Performance Test Plan\">\n  \u003Caction>Load `{template}` and use it as the structural foundation for the output document\u003C\u002Faction>\n  \u003Caction>Compile all information from Steps 1-5 into a comprehensive Performance Test Plan at `{default_output_file}` with this structure:\n\n```markdown\n# Performance Test Plan: {project_name}\n\n## Performance Targets\n[FPS tables filtered to target platforms]\n[Memory budget tables]\n[Loading time targets]\n\n## Test Scenarios\n\n### Frame Rate Tests\n[Stress test scenarios from Step 2]\n\n### Memory Tests\n[Extended play and leak detection scenarios]\n\n### Loading Tests\n[Boot, level load, save\u002Fload scenarios]\n\n## Methodology\n\n### Automated Tests\n[Engine-specific code examples]\n[CI integration instructions]\n\n### Manual Profiling\n[Checklists from Step 3]\n[Tools to use per engine]\n\n## Benchmark Suite\n[Benchmark definitions from Step 4]\n[Baseline capture process]\n[Regression thresholds]\n\n## Platform Matrix\n[Platform-specific requirements from Step 5]\n\n## Regression Criteria\n[Quantified thresholds: FPS drop %, memory growth %, load time delta]\n[CI gate configuration]\n\n## Schedule\n[When performance tests run: nightly, per-sprint, pre-release]\n[Who reviews results and owns regressions]\n```\n  \u003C\u002Faction>\n  \u003Caction>Load and apply `{validation}` checklist to verify all deliverables are complete\u003C\u002Faction>\n  \u003Caction>Present a summary of what was produced and the recommended next steps to the user\u003C\u002Faction>\n\u003Caction>Run: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.\u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n","# Performance Testing Strategy Workflow\n\n**Goal:** Design a comprehensive performance testing strategy covering frame rate, memory usage, loading times, and platform-specific requirements. Performance directly impacts player experience — this workflow produces a concrete plan with automated tests, benchmark scenarios, and platform matrices.\n\n**Your Role:** You are a senior game performance engineer and QA strategist. Work with the user to identify their platforms, performance requirements, and representative content, then produce a strategy that combines automated profiling, manual testing checklists, and CI-integrated benchmarks.\n\n---\n\n## Conventions\n\n- Bare paths (e.g. `template.md`) resolve from the skill root.\n- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).\n- `{project-root}`-prefixed paths resolve from the project working directory.\n- `{skill-name}` resolves to the skill directory's basename.\n\n## On Activation\n\n### Step 1: Resolve the Workflow Block\n\nRun: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow`\n\n**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:\n\n1. `{skill-root}\u002Fcustomize.toml` — defaults\n2. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.toml` — team overrides\n3. `{project-root}\u002F_bmad\u002Fcustom\u002F{skill-name}.user.toml` — personal overrides\n\nAny missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.\n\n### Step 2: Execute Prepend Steps\n\nExecute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.\n\n### Step 3: Load Persistent Facts\n\nTreat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.\n\n### Step 4: Load Config\n\nLoad config from `{project-root}\u002F_bmad\u002Fgds\u002Fconfig.yaml` and resolve:\n\n- `project_name`\n- `user_name`\n- `communication_language`\n- `output_folder`\n\n### Step 5: Greet the User\n\nGreet `{user_name}`, speaking in `{communication_language}`.\n\n### Step 6: Execute Append Steps\n\nExecute each entry in `{workflow.activation_steps_append}` in order.\n\nActivation is complete. Begin the workflow below.\n\n## WORKFLOW ARCHITECTURE\n\nThis uses an **inline workflow pattern** for autonomous execution:\n\n- Steps execute sequentially, building toward a complete performance test plan document\n- Platform detection and target configuration drive all subsequent decisions\n- The final deliverable is a comprehensive Performance Test Plan document\n- Knowledge base reference: `knowledge\u002Fperformance-testing.md`\n\n### Preflight Requirements\n\nBefore proceeding, verify:\n\n- Target platforms identified (or discoverable from project files)\n- Performance requirements known (target FPS, memory limits), or to be defined in Step 1\n- Representative content available for testing\n- Profiling tools accessible\n\n\n### Paths\n\n- `installed_path` = `{skill_root}`\n- `validation` = `{installed_path}\u002Fchecklist.md`\n- `template` = `{installed_path}\u002Fperformance-template.md`\n- `default_output_file` = `{output_folder}\u002Fperformance-test-plan.md`\n\n### Variables\n\n- `target_fps` = `60` (configurable per platform in Step 1)\n- `target_platform` = `auto` (options: `auto`, `pc`, `console`, `mobile`)\n- `game_engine` = `auto` (options: `auto`, `unity`, `unreal`, `godot`)\n\n---\n\n## EXECUTION\n\n\u003Cworkflow>\n\n\u003Cstep n=\"1\" goal=\"Define Performance Targets\">\n  \u003Caction>Detect game engine and target platforms from project files. If ambiguous, ask the user.\u003C\u002Faction>\n  \u003Caction>Establish frame rate targets per platform:\n\n| Platform          | Target FPS | Minimum FPS | Notes              |\n| ----------------- | ---------- | ----------- | ------------------ |\n| PC (High)         | 60+        | 30          | Uncapped option    |\n| PC (Low)          | 30         | 30          | Scalable settings  |\n| PS5\u002FXbox X        | 60         | 60          | Performance mode   |\n| PS4\u002FXbox One      | 30         | 30          | Locked             |\n| Switch Docked     | 30         | 30          | Stable             |\n| Switch Handheld   | 30         | 25          | Power saving       |\n| Mobile (High)     | 60         | 30          | Device dependent   |\n| Mobile (Standard) | 30         | 30          | Thermal throttling |\n\n  Filter this table to the user's actual target platforms. Adjust targets based on game genre and user input.\n  \u003C\u002Faction>\n  \u003Caction>Establish memory budgets per target platform:\n\n| Platform      | Total RAM | Game Budget | Notes               |\n| ------------- | --------- | ----------- | ------------------- |\n| PC (Min spec) | 8 GB      | 4 GB        | Leave room for OS   |\n| PS5           | 16 GB     | 12 GB       | Unified memory      |\n| Xbox Series X | 16 GB     | 13 GB       | With Smart Delivery |\n| Switch        | 4 GB      | 2.5 GB      | Tight constraints   |\n| Mobile        | 4-6 GB    | 1.5-2 GB    | Background apps     |\n\n  \u003C\u002Faction>\n  \u003Caction>Establish loading time targets:\n\n| Scenario     | Target | Maximum |\n| ------------ | ------ | ------- |\n| Initial boot | \u003C 10s  | 30s     |\n| Level load   | \u003C 15s  | 30s     |\n| Fast travel  | \u003C 5s   | 10s     |\n| Respawn      | \u003C 3s   | 5s      |\n\n  Adjust based on genre (e.g., fast travel may not apply to linear games).\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"2\" goal=\"Identify Test Scenarios\">\n  \u003Caction>Define stress test scenarios for frame rate validation:\n```\nSCENARIO: Maximum Entity Count\n  GIVEN game level with normal enemy spawn\n  WHEN enemy count reaches 50+\n  THEN frame rate stays above minimum\n  AND no visual artifacts\n  AND audio doesn't stutter\n\nSCENARIO: Particle System Stress\n  GIVEN combat with multiple effects\n  WHEN 20+ particle systems active\n  THEN frame rate degradation \u003C 20%\n  AND memory allocation stable\n\nSCENARIO: Draw Call Stress\n  GIVEN level with maximum visible geometry\n  WHEN camera shows worst-case view\n  THEN frame rate stays above minimum\n  AND no hitching or stuttering\n```\n  \u003C\u002Faction>\n  \u003Caction>Define memory test scenarios:\n```\nSCENARIO: Extended Play Session\n  GIVEN game running for 4+ hours\n  WHEN normal gameplay occurs\n  THEN memory usage remains stable\n  AND no memory leaks detected\n  AND no crash from fragmentation\n\nSCENARIO: Level Transition\n  GIVEN player completes level\n  WHEN transitioning to new level\n  THEN previous level fully unloaded\n  AND memory baseline returns\n  AND no cumulative growth\n```\n  \u003C\u002Faction>\n  \u003Caction>Define loading test scenarios:\n```\nSCENARIO: Cold Boot\n  GIVEN game not in memory\n  WHEN launching game\n  THEN reaches interactive state in \u003C target\n  AND loading feedback shown\n  AND no apparent hang\n\nSCENARIO: Save\u002FLoad Performance\n  GIVEN large save file (max progress)\n  WHEN loading save\n  THEN completes in \u003C target\n  AND no corruption\n  AND gameplay resumes smoothly\n```\n  \u003C\u002Faction>\n  \u003Caction>Adapt scenario details to match the specific game type and identified systems\u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"3\" goal=\"Define Test Methodology\">\n  \u003Caction>Generate automated performance test code for the detected engine\u003C\u002Faction>\n\n  \u003Ccheck if=\"engine == 'unity'\">\n    \u003Caction>Generate Unity Performance Test Runner examples:\n```csharp\n[UnityTest]\npublic IEnumerator Performance_CombatScene_MaintainsFPS()\n{\n    using (Measure.ProfilerMarkers(new[] { \"Main Thread\" }))\n    {\n        SceneManager.LoadScene(\"CombatStressTest\");\n        yield return new WaitForSeconds(30f);\n    }\n    var metrics = Measure.Custom(new SampleGroupDefinition(\"FPS\"));\n    Assert.Greater(metrics.Median, 30, \"FPS should stay above 30\");\n}\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"engine == 'unreal'\">\n    \u003Caction>Generate Unreal Automation test examples:\n```cpp\nbool FPerformanceTest::RunTest(const FString& Parameters)\n{\n    float StartTime = FPlatformTime::Seconds();\n    for (int i = 0; i \u003C 100; i++)\n        GetWorld()->SpawnActor\u003CAStressTestActor>();\n    float FrameTime = FApp::GetDeltaTime();\n    TestTrue(\"Frame time under budget\", FrameTime \u003C 0.033f);\n    return true;\n}\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"engine == 'godot'\">\n    \u003Caction>Generate Godot benchmark test examples:\n```gdscript\nfunc test_performance_entity_stress():\n    var frame_times = []\n    for i in range(100):\n        var entity = stress_entity.instantiate()\n        add_child(entity)\n    for i in range(300):\n        await get_tree().process_frame\n        frame_times.append(Performance.get_monitor(Performance.TIME_PROCESS))\n    var avg_frame_time = frame_times.reduce(func(a, b): return a + b) \u002F frame_times.size()\n    assert_lt(avg_frame_time, 0.033, \"Average frame time under 33ms (30 FPS)\")\n```\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Caction>Define manual profiling checklists:\n\n**CPU Profiling**\n- [ ] Identify hotspots using engine profiler\n- [ ] Check GC frequency and allocation pressure\n- [ ] Verify multithreading usage and thread contention\n\n**GPU Profiling**\n- [ ] Draw call count at target scenes\n- [ ] Overdraw analysis on complex areas\n- [ ] Shader complexity assessment\n\n**Memory Profiling**\n- [ ] Heap allocation patterns over a 30-minute session\n- [ ] Asset memory usage by category\n- [ ] Leak detection across multiple level loads\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"4\" goal=\"Create Benchmark Suite\">\n  \u003Caction>Define the benchmark levels and their purpose:\n\n| Benchmark       | Purpose                  | Duration |\n| --------------- | ------------------------ | -------- |\n| Combat Stress   | Max entities, effects    | 60s      |\n| Open World      | Draw distance, streaming | 120s     |\n| Menu Navigation | UI performance           | 30s      |\n| Save\u002FLoad       | Persistence performance  | 30s      |\n\n  Adapt benchmark names and durations to match the actual game content.\n  \u003C\u002Faction>\n  \u003Caction>Define baseline capture process:\n    1. Run benchmarks on reference hardware (document hardware specs)\n    2. Record baseline metrics (avg FPS, P95 frame time, peak memory)\n    3. Set regression thresholds (e.g., 10% FPS degradation = fail, 5% memory growth = fail)\n    4. Integrate benchmarks into CI pipeline as gated checks\n  \u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"5\" goal=\"Platform-Specific Testing\">\n  \u003Caction>Define platform-specific testing requirements for each target platform\u003C\u002Faction>\n\n  \u003Ccheck if=\"platform includes 'pc'\">\n    \u003Caction>PC testing requirements:\n      - Test across min\u002Frecommended hardware specs\n      - Verify quality settings (Low\u002FMedium\u002FHigh\u002FUltra) all perform within budget\n      - Check VRAM usage at each quality tier\n      - Test at multiple resolutions (1080p, 1440p, 4K)\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"platform includes 'console'\">\n    \u003Caction>Console testing requirements:\n      - Test in both Performance and Quality modes if applicable\n      - Verify thermal throttling behavior during extended sessions\n      - Check suspend\u002Fresume impact on frame rate and memory\n      - Test with varying storage speeds (internal SSD vs extended storage)\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\n  \u003Ccheck if=\"platform includes 'mobile'\">\n    \u003Caction>Mobile testing requirements:\n      - Test on low\u002Fmid\u002Fhigh tier representative devices\n      - Monitor thermal throttling onset time and severity\n      - Measure battery drain per hour of gameplay\n      - Test with background apps consuming memory\n    \u003C\u002Faction>\n  \u003C\u002Fcheck>\n\u003C\u002Fstep>\n\n\u003Cstep n=\"6\" goal=\"Generate Performance Test Plan\">\n  \u003Caction>Load `{template}` and use it as the structural foundation for the output document\u003C\u002Faction>\n  \u003Caction>Compile all information from Steps 1-5 into a comprehensive Performance Test Plan at `{default_output_file}` with this structure:\n\n```markdown\n# Performance Test Plan: {project_name}\n\n## Performance Targets\n[FPS tables filtered to target platforms]\n[Memory budget tables]\n[Loading time targets]\n\n## Test Scenarios\n\n### Frame Rate Tests\n[Stress test scenarios from Step 2]\n\n### Memory Tests\n[Extended play and leak detection scenarios]\n\n### Loading Tests\n[Boot, level load, save\u002Fload scenarios]\n\n## Methodology\n\n### Automated Tests\n[Engine-specific code examples]\n[CI integration instructions]\n\n### Manual Profiling\n[Checklists from Step 3]\n[Tools to use per engine]\n\n## Benchmark Suite\n[Benchmark definitions from Step 4]\n[Baseline capture process]\n[Regression thresholds]\n\n## Platform Matrix\n[Platform-specific requirements from Step 5]\n\n## Regression Criteria\n[Quantified thresholds: FPS drop %, memory growth %, load time delta]\n[CI gate configuration]\n\n## Schedule\n[When performance tests run: nightly, per-sprint, pre-release]\n[Who reviews results and owns regressions]\n```\n  \u003C\u002Faction>\n  \u003Caction>Load and apply `{validation}` checklist to verify all deliverables are complete\u003C\u002Faction>\n  \u003Caction>Present a summary of what was produced and the recommended next steps to the user\u003C\u002Faction>\n\u003Caction>Run: `python3 {project-root}\u002F_bmad\u002Fscripts\u002Fresolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.\u003C\u002Faction>\n\u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n",{"name":5,"description":7},"main","1907bbe850fb749efa8b499b8da7ebb78a663519",".ona\u002Fskills\u002Fgds-performance-test",0,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start","https:\u002F\u002Fgithub.com\u002FdevelopAgent","2026-07-19 05:19:22",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add developAgent\u002Fbmad-start --skill gds-performance-test",{"tool":55,"command":56},"bunx","bunx skills add developAgent\u002Fbmad-start --skill gds-performance-test",{"tool":58,"command":59},"pnpm","pnpm dlx skills add developAgent\u002Fbmad-start --skill gds-performance-test","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.ona\u002Fskills\u002Fgds-performance-test\u002FSKILL.md",true,[63,69,75],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"checklist.md","REFERENCE","参考文档",1792,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.ona\u002Fskills\u002Fgds-performance-test\u002Fchecklist.md",{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"customize.toml","OTHER","其他",1638,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.ona\u002Fskills\u002Fgds-performance-test\u002Fcustomize.toml",{"path":76,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":77,"sourceHtmlUrl":78},"performance-template.md",5859,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.ona\u002Fskills\u002Fgds-performance-test\u002Fperformance-template.md",[80,100,130,148,161,187],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":91,"publishedAt":37},"01M71R3M9DJTTY0ARFQ6K04NMP","gds-correct-course","Manage significant changes during sprint execution. Use when the user says \"correct course\" or \"propose sprint change\"","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-correct-course\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[92,93,94,36,95,96,32,31,97,98,99],"gds correct course","course","correct","changes","change","execution","manage","sprint",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":112,"publishedAt":37},"01M71R3GENSFD1A1XVZTTQG1KF","gds-code-review","Review code changes adversarially using parallel review layers (Blind Hunter, Edge Case Hunter, Acceptance Auditor) with structured triage into actionable categories. Use when the user says \"run code review\" or \"review this code\"","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-code-review\u002FSKILL.md",[106,109],{"categoryNo":107,"categoryName":108,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":110,"categoryName":111,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000030","开发工程师",[113,114,115,116,117,95,118,119,120,121,122,123,124,32,125,31,126,127,128,129],"code review","code","review","gds code review","categories","triage","review code","run","parallel","case","with","run code","acceptance","edge","actionable","layers","hunter",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":37},"01M71R3DD098MQRD6F8S4GG0AW","gds-check-implementation-readiness","Verify GDD, UX, Architecture, and Epics alignment before production. Use when the user says \"check readiness\" or \"implementation readiness\"","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-check-implementation-readiness\u002FSKILL.md",[],[137,138,139,140,141,142,36,143,144,145,146,32,31,147],"check","readiness","Implementation Readiness","gds check implementation readiness","implementation","check readiness","Production","ux","verify","architecture","alignment",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":37},"01M71R3ACAA1G0NVQ330JQNJPK","gds-brainstorm-game","Facilitate game brainstorming sessions with game-specific techniques. Use when the user says \"brainstorm game\" or \"game ideas\"","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-brainstorm-game\u002FSKILL.md",[],[155,33,156,36,157,123,32,31,158,159,160],"gds brainstorm game","brainstorm","brainstorming","techniques","sessions","ideas",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":37},"01M71R377MJ6WJTTFARGKH3HX7","gds-agent-tech-writer","Technical documentation specialist and knowledge curator for game projects. Use when the user asks to talk to Paige or requests the Technical Writer.","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-agent-tech-writer\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[171,172,173,174,31,175,176,177,178,32,36,179,180,181,182,183,184,185,33,186],"gds agent tech writer","tech","writer","technical writer","technical","knowledge","for","projects","technical documentation","talk","specialist","documentation specialist","knowledge curator","requests","documentation","curator",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":194,"publishedAt":37},"01M71R34RGT2ZX3TSFA2CRT0NC","gds-agent-game-solo-dev","Elite indie game developer for rapid prototyping and solo quick-flow development. Use when the user asks to talk to Indie or requests the Game Solo Dev.","https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.rovodev\u002Fskills\u002Fgds-agent-game-solo-dev\u002FSKILL.md",[193],{"categoryNo":168,"categoryName":169,"taxonomyType":20,"taxonomyTypeDesc":21},[195,33,196,197,198,199,36,180,184,200,201,32,31,202,177,203,204],"solo","gds agent game solo dev","dev","flow","developer","RAPID","game developer","prototyping","development","quick"]