Skip to main content

validate-golden

Validate a Memory Snapshot Data Tool export against Unity Memory Profiler "golden" values — extract a {name}_golden.json in Unity, export the same .snap to a database, run the `validate` CLI command, and interpret the pass/fail result, tolerances, and failures. Use when asked to validate/verify an export, check it matches Unity's Memory Profiler, produce or read a golden file, debug a validation failure, or change what golden validation compares.

소스 정보

저장소
Unity-Technologies/MemorySnapshotDataTools
최근 소스 활동
2026년 6월 5일 18:52
감지된 SKILL.md 언어
영어
스타
11
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
validate-golden
description
Validate a Memory Snapshot Data Tool export against Unity Memory Profiler "golden" values — extract a {name}_golden.json in Unity, export the same .snap to a database, run the `validate` CLI command, and interpret the pass/fail result, tolerances, and failures. Use when asked to validate/verify an export, check it matches Unity's Memory Profiler, produce or read a golden file, debug a validation failure, or change what golden validation compares.
# Validate an export against Unity golden values Golden validation diffs the database this tool exports from a `.snap` against reference numbers captured from Unity's own Memory Profiler for the **same** snapshot. A pass means the export agrees with what a developer sees in the profiler; a failure names the exact metric and the expected/actual values. **Full reference (schema, every compared metric, tolerances, failure formats):** [`docs/golden-validation.md`](../../../docs/golden-validation.md). Read it before changing what validation compares. This skill is the operational quick-path. **Paths below are relative to the repo root** (the directory containing `MemorySnapshotDataTools.sln`). ## When to use - Validate / verify an export, or confirm the tool matches Unity's Memory Profiler. - Produce a golden file in Unity, or interpret a `*_golden.json` / `*_validation_result.json`. - Debug a validation failure, or change what the comparison covers (also touch the Unity extractor). ## The three steps The golden file and the database **must come from the same `.snap`** or everything mismatches. ### 1. Extract golden values in Unity (produces `{name}_golden.json`) The extractor is a Unity Editor package — `com.unity.memory-snapshot-data-tools` in [`UnityPackage/`](../../../UnityPackage) (Unity 2022.3+, `com.unity.memoryprofiler` 1.1.12), **not** the .NET CLI. Import it into the target Unity project via a local `file:` path in that project's `Packages/manifest.json`, then run **Tools → Memory Snapshot Validation → Extract Golden Values** and pick a `.snap`. It writes `{name}_golden.json` next to the snapshot. It pulls the Summary-page numbers from the Memory Profiler's own model builders, so golden == what the profiler UI shows. ### 2. Export the same snapshot ```bash dotnet run --project Cli/MemorySnapshotDataTools.Cli.csproj -- export <name>.snap <name>.duckdb --validate minimal ``` DuckDB recommended (`.db` + `--destination sqlite` also works). Needs the `native_objects`, `native_roots`, and `summary_metrics` tables — a current-schema export has them. ### 3. Run `validate` ```bash dotnet run --project Cli/MemorySnapshotDataTools.Cli.csproj -- validate <name>_golden.json <name>.duckdb [--out result.json] ``` - Writes `{name}_golden_validation_result.json` next to the golden file unless `--out` is set, and prints the result to stdout. - **Exit codes:** `0` = passed, `1` = metric mismatch(es), `3` = error (bad input / unparseable golden / unsupported DB extension). The DB is schema-gated first; an older **major** schema is rejected — re-export rather than `upgrade` (upgrade only covers minor analysis-view changes). ## What it compares (summary — details in the doc) - **Native types:** `AssetBundle` (from `native_objects`) and `SerializedFile` (from `native_roots`, `area_name LIKE '%serializedfile%'`) — Count and AllocatedBytes **exact**, ResidentBytes within tolerance. - **PMR:** sum of PersistentManager Remapper roots — Allocated exact, Resident within tolerance. - **Summary page:** Totals + `AllocatedMemoryDistribution` + `ManagedHeapUtilization` rows from the `summary_metrics` table. **Tolerances:** counts & allocated bytes must be **exact**; resident = `max(64 KB, 1%)`; summary committed = `max(64 KB, 1%)`, except **estimated** rows (Graphics, Untracked — golden `ResidentAvailable=false`) which get `max(1 MB, 5%)`. Summary comparison is **skipped** when the golden file has no Summary rows (older/partial golden files still validate on native metrics). ## Reading a failure Each `Failures[]` entry is `\<metric\>: expected=…, actual=…`, e.g. `SerializedFile.Count: expected=34, actual=33` or `Summary[AllocatedMemoryDistribution].Native.Committed: expected=…, actual=…`. A `… row missing from export` means the export lacks a Summary row the golden file has → re-export with the current tool. Everything mismatching → golden and DB came from different snapshots. ## Changing what validation compares Touch **both** sides so they don't drift: - **Tool:** SQL constants in `Core/Validation/GoldenValidationQueries.cs`, comparison/tolerances in `Core/Validation/GoldenValidationRunner.cs`, models in `Core/Validation/GoldenValidationModels.cs`. - **Unity extractor:** `UnityPackage/com.unity.memory-snapshot-data-tools/Editor/GoldenValueExtractor.cs` and shared names in `…/Editor/MemorySnapshotValidationHelpers.cs`. - Validation SQL must stay constant-only (no interpolated external values) per [`docs/sql-safety.md`](../../../docs/sql-safety.md). - Add/extend tests in [`Tests/GoldenValidationRunnerTests.cs`](../../../Tests/GoldenValidationRunnerTests.cs) (they build a SQLite DB + golden JSON in temp and assert pass/fail). Test helpers must be `public`. - Run `dotnet test MemorySnapshotDataTools.sln` and update [`docs/golden-validation.md`](../../../docs/golden-validation.md).
GitHub에서 보기