)]}'
{
  "commit": "e9ff5d5c433e8f57eb840961935eaca6a2c4bb5a",
  "tree": "268b4c865248a3c571bc605e23607138164d2f74",
  "parents": [
    "b11d90ccdc7fa8483a1364a185a7ff39f573e62a"
  ],
  "author": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Tue Aug 11 13:13:48 2026 +0100"
  },
  "committer": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Thu Sep 10 22:50:25 2026 +0100"
  },
  "message": "ui: show sampled stacks beneath callstack instant tracks\n\nSampled callstacks can be inspected as individual instants or an aggregated flamegraph, but neither shows how stacks evolve over time. Add a sampled-stack child beneath each eligible thread\u0027s Callstacks track, retaining standard instant markers and sample selection on the parent.\n\nA CallstackTrack wrapper owns lazy preparation of frame runs and delegates rendering, layout, selection, and tooltips to SliceTrack. Concurrent rendering and restored-selection requests share one initialization promise, including failures. This needs no new initialization, render, mouse, or tooltip hooks in SliceTrack. The shared slice-track change is limited to expanding compressed rows on the first click without selecting an event.\n\nSampled stacks use ordinary frame rectangles, function-name colors, sampled-duration tooltips, and frame details. There are no sampling-point diamonds, stems, overlays, or extra timestamp queries. The child is named Callstack flamechart. SQL classifies clock, cycle, and instruction timebases as eligible using structured session metadata. Every eligible thread without a slice track reveals its child with compressed rows; threads with slice tracks keep the child hidden initially. Visibility remains stable during pan and zoom. Per-session area selection is preserved.\n\nCode origin is classified once per mapping in SQL, independently of process names and symbol availability. In mapping-color mode, binary, library, kernel, and unknown colors use the same mapping-path shade on sample instants and flamechart frames. Library recognition uses filename conventions because mapping metadata does not identify executable versus shared-object ELF files.\n\nFinal open frames use incomplete slices through trace end; details and time-range selection preserve that boundary.\n\nFlamechart frames default to function-name colors. Track settings offer Color by → Function name or Mapping, using the existing track settings and SliceTrack cache-key APIs and supporting bulk updates. Mapping mode matches the origin colors on sample instants.\n\nIntegration tests expand track groups only when needed, including groups automatically revealed by flamecharts. Reviewed screenshot baselines cover the default presentation and switching to mapping colors.\n\nValidation: 22 targeted UI unit tests and 3 browser integration tests pass, including a clean screenshot comparison run in the CI browser container. The UI build, TypeScript checking, ESLint, and formatting pass. The underlying stack also passed 7 SQL diff tests and 12 native generator tests. This PR remains a draft.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5ccd790bafd4a345caad55378fa68d0260494887",
      "old_mode": 33188,
      "old_path": "test/data/ui-screenshots/local_cache_key.test.ts/multiple-traces-via-url-and-local-cache-key/back-to-trace-1.png.sha256",
      "new_id": "9f7d1210e66538b4c3ea74ec5c8a5e26994ff948",
      "new_mode": 33188,
      "new_path": "test/data/ui-screenshots/local_cache_key.test.ts/multiple-traces-via-url-and-local-cache-key/back-to-trace-1.png.sha256"
    },
    {
      "type": "modify",
      "old_id": "de9cf03b94278b129b342fcf109092328b1f8029",
      "old_mode": 33188,
      "old_path": "test/data/ui-screenshots/local_cache_key.test.ts/multiple-traces-via-url-and-local-cache-key/trace-1.png.sha256",
      "new_id": "f3d4094c4b932fd8fd5ac190fdebcbb3358c628e",
      "new_mode": 33188,
      "new_path": "test/data/ui-screenshots/local_cache_key.test.ts/multiple-traces-via-url-and-local-cache-key/trace-1.png.sha256"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6b01a8e93c1bb55426d3d3c52af623d7e0fc28c0",
      "new_mode": 33188,
      "new_path": "test/data/ui-screenshots/perf_event.test.ts/flamechart-mapping-colors/flamechart-mapping-colors.png.sha256"
    },
    {
      "type": "modify",
      "old_id": "7caa5e0d53a536690c41dc2745a5ab363aca4f6d",
      "old_mode": 33188,
      "old_path": "test/data/ui-screenshots/perf_event.test.ts/multiple-callstack-tracks/perf-event-sf-expanded.png.sha256",
      "new_id": "c680930650166665ec01f394f8c7ce1c2db82be4",
      "new_mode": 33188,
      "new_path": "test/data/ui-screenshots/perf_event.test.ts/multiple-callstack-tracks/perf-event-sf-expanded.png.sha256"
    },
    {
      "type": "modify",
      "old_id": "3148c87986b9d6a366e719bf03f2678ef5ef450c",
      "old_mode": 33188,
      "old_path": "test/data/ui-screenshots/perf_event.test.ts/multiple-callstack-tracks/perf-event-sf.png.sha256",
      "new_id": "0ceacb8a5f352703dd1058c74c5c08ec7feb47a0",
      "new_mode": 33188,
      "new_path": "test/data/ui-screenshots/perf_event.test.ts/multiple-callstack-tracks/perf-event-sf.png.sha256"
    },
    {
      "type": "modify",
      "old_id": "6b871ddc2d94ffba52dcfffe9fd6fc746fd33e16",
      "old_mode": 33188,
      "old_path": "ui/src/components/tracks/slice_track.ts",
      "new_id": "f670518e9f0e2ceca90c9791501553719a4a0a13",
      "new_mode": 33188,
      "new_path": "ui/src/components/tracks/slice_track.ts"
    },
    {
      "type": "modify",
      "old_id": "10443f7e65ccb44f34b03c5d9adf3575a1e17524",
      "old_mode": 33188,
      "old_path": "ui/src/components/tracks/slice_track_unittest.ts",
      "new_id": "0bd4e419744d5903c627e69851d75aad459759ef",
      "new_mode": 33188,
      "new_path": "ui/src/components/tracks/slice_track_unittest.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "17290a789becf9b588353e7440970bbaa64c9743",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/callstack_track.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6ce2c957bcacb33dd9f43d81c8e272d0b2b9db86",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/callstack_track_unittest.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "929b8cb841c48d71dc142474823dc935056b2754",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/frame_details_panel.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6cc1740834235a0a8eb9070dc1c7b69848fdd1b1",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/frame_details_panel_unittest.ts"
    },
    {
      "type": "modify",
      "old_id": "04fe67421308901ac88b374e041b6cfed40bbb42",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.StackSamples/index.ts",
      "new_id": "027be5fa1af863c28a1b3494d5405cd5f8a5ed8e",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/index.ts"
    },
    {
      "type": "modify",
      "old_id": "ece1f9156f69d386677e66a87960ef562969bf0c",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.StackSamples/profiling_track.ts",
      "new_id": "c0e2897550f6549b087364f7a74a739e5c5cbe53",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/profiling_track.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9ee71661585d90169dea7fbb2d5c27cbcd1e631c",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/sample_colors.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c72fe160482eac9708be812f11fb6cb100a952f9",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/sample_colors_unittest.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "09b1525fdbf410f6e84f49dfac4e7a291ca52ef1",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.StackSamples/track_kinds.ts"
    },
    {
      "type": "modify",
      "old_id": "f04d69006e8f433950595b37e26d58d0b9c18887",
      "old_mode": 33188,
      "old_path": "ui/src/test/perf_event.test.ts",
      "new_id": "01f9d8fe8727f4a61bce06d8c80611ba92c1548e",
      "new_mode": 33188,
      "new_path": "ui/src/test/perf_event.test.ts"
    },
    {
      "type": "modify",
      "old_id": "0d132cb893d7e4dfa5ddc9d22a5b6b02fbe9d64a",
      "old_mode": 33188,
      "old_path": "ui/src/test/perfetto_ui_test_helper.ts",
      "new_id": "e832134e4bcda5a55b045658a39b9d10f57e25e2",
      "new_mode": 33188,
      "new_path": "ui/src/test/perfetto_ui_test_helper.ts"
    }
  ]
}
