)]}'
{
  "commit": "b4a71db7c82ddac4d39ef4c8204110f09840f32b",
  "tree": "ddf680bdad27800be8032f39980bbadf4eb9d119",
  "parents": [
    "a6deb53a253bc3e3c66e56e1ecedc8b7e53a0642"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Tue Jan 27 23:09:20 2026 +0000"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Jan 28 00:08:20 2026 +0000"
  },
  "message": "ui: D3-based interactive charting system\n\nFeatures:\n- 9 chart types: bar, histogram, CDF, scatter, boxplot, heatmap, line,\ndonut, violin\n- Interactive brush selection on all charts\n- Cross-chart filtering with FilterStore coordination\n- Custom data source support: Memory, SQL (local trace) and HTTP\n- Chart-to-table and table-to-chart filter synchronization\n- Configurable selection behavior (opacity vs filter propagation)\n\nArchitecture:\n- BaseRenderer provides shared functionality (axes, grid, tooltips,\nbrush setup)\n- Chart-specific renderers handle specialized rendering and interactions\n- SelectionStrategy pattern separates visual feedback from filter logic\n- FilterStore manages filter groups with history\n- TooltipFormatter provides consistent tooltip formatting\n\nPlugin\n- D3ChartsPage component for query execution and chart management\n- SQL editor with keyboard shortcuts\n- Default charts (histogram, bar) auto-created on query execution\n- Sidebar for manual chart/table creation\n\nBigTrace integration:\n- New BigTrace app with sidebar navigation\n- Utilizes the D3ChartsPage plugin and chart http data source for querying\n\nTest: Manual\nChange-Id: I9279bde00b89065b4c818c70220194956daa83ce\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "866c61538740feee6896129007d983278a947506",
      "old_mode": 33261,
      "old_path": "python/tools/check_imports.py",
      "new_id": "2ddd8a036c5dfab73c9361864d98c80ef3bc831f",
      "new_mode": 33261,
      "new_path": "python/tools/check_imports.py"
    },
    {
      "type": "modify",
      "old_id": "ab72b9568095307815908196336501da0804b5bd",
      "old_mode": 33188,
      "old_path": "ui/.prettierignore",
      "new_id": "beb4074cfb61098e91f394d10cef185da2e4415d",
      "new_mode": 33188,
      "new_path": "ui/.prettierignore"
    },
    {
      "type": "modify",
      "old_id": "c95b649bc515b5a462415db28f8d7a127dade1df",
      "old_mode": 33188,
      "old_path": "ui/src/assets/perfetto.scss",
      "new_id": "7b614dbdda14e3e6782391586f97e51917ab05b4",
      "new_mode": 33188,
      "new_path": "ui/src/assets/perfetto.scss"
    },
    {
      "type": "modify",
      "old_id": "f872585ea68cc0f94fbd8fdb59e7969047a2611b",
      "old_mode": 33188,
      "old_path": "ui/src/bigtrace/index.ts",
      "new_id": "ccee00ce0a518d7221f026ca12b7708dde65f65d",
      "new_mode": 33188,
      "new_path": "ui/src/bigtrace/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "29e2034fdec3d1f09be9e560e6d5dd4d299c9b46",
      "new_mode": 33188,
      "new_path": "ui/src/components/d3/http_data_source.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ade8e55b6b0afe6117f396930fa5123b1900aca5",
      "new_mode": 33188,
      "new_path": "ui/src/components/d3/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d95e01cd583a617bb188c66d5f652cf54a76d47b",
      "new_mode": 33188,
      "new_path": "ui/src/components/d3/sql_data_source.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d975e1fbad2fa2002f81d83622359d58496f200a",
      "new_mode": 33188,
      "new_path": "ui/src/components/d3/sql_factory.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6e63dde443fd27600fefea7c9cba2941caa211b9",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.D3ChartsPage/chart_creator_sidebar.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bb85da3fafb01ffb76acd66ddebe31c8eec5fa53",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.D3ChartsPage/d3_charts_page.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e1bc4335bdb3ed3c27ecee7b930a83f487459d3a",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.D3ChartsPage/d3_charts_page.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a183a9eec502c7ab6ff08a8bb8676d7efba32288",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.D3ChartsPage/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9f1e37aaebb0b974b897094ea6af3d3b15366893",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/demos/d3_charts_demo.ts"
    },
    {
      "type": "modify",
      "old_id": "78f9ce8c188eb773cc404f1fbea684256650db89",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.WidgetsPage/widgets_page.ts",
      "new_id": "d0e49375a7ca52570afa56040e73092dca532c17",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/widgets_page.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eb1312edb52ac4778e72ca1ca46821c2196d4e24",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0116b513094c4154dda27e52e6159dbaaf6a8333",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/bar.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9084403cab114eaf03db219b508f435b49105457",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/base_renderer.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8c8a44750dfcca64cae679575ab77f96917248bb",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/boxplot.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "624cd7d82267cfef3b51e7e6b180404cf74ce522",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/brushing/area_brush.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0dacc6a22f16671bded2b0449764ca4d63612eaa",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/brushing/brush_behavior.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "417346aa58ce16cb873bf022b4296da142dfc004",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/brushing/categorical_brush.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "831397b23bfc16a0dc379650693b5bca1b47d672",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/brushing/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b14ea09dc04e33d5102c3e16df6fd1db13ff7fe3",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/brushing/range_brush.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cf13d7aa29794e21d58130c3066f0bb7cd493791",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/cdf.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4493695bd7482694fb393825d0573778d28ce188",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/chart.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "930636e989fde3fc724a31fd9c6e676e768726bb",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/donut.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "062f976f4d31b297ee5a06941f385194da0222ba",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/heatmap.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fbbe20fa2370805486c4bf9fa6586bd0486295a8",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/histogram.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8a5809d969d6f815b14709d56f5688448fb31030",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/line.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b2343fba8e056897591dd016c0b281bffa1e8879",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/registry.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6c45aec2fb4b7635841e75edae3568f5f172fcd",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/scatter.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c8ff4ac5c59a8abefc30b75f31039a91a010fe6d",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/filter_selection_strategy.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9e161cc5cfe7d65ce51f9c65d4e844a4ceab2fa9",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/histogram_selection_strategy.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4e8829bf0600b1e7389ea46d54c0a3d858e15e90",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a37e769926f6fd477ab2dc59efc8c8725362db7b",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/opacity_selection_strategy.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e656223dc5a504e108d64b54a88f307db01db4ea",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/selection_clip_paths.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "61894d9eba579019d167215d2609ee09a96a0d7d",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/selection/selection_strategy.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d6593501a952ce90ceec4cb408df13ae3fdf9be2",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/charts/violin.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3cf5aac784a480dd4c03fb41c4d131eed68de494",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/d3_types.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4b809c781460cef66559e60df9f4ae8ab9560487",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/data/filter_store.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eb3ca49c342d74f449b3c48d8452fa6b3c30ff10",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/data/memory_source.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a28f89d4755b63e16294f585984d4cc8f68bd31e",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/data/source.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "af355899ecf153631408ab3f8b06a84337b32599",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/data/types.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "efe248a74b8e3f3dda90f1158f4bc91cbde821b7",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b2970928210dcfb3d0e775dc10562dcce230c58b",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/charts/d3/tooltip.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1bda61155673d8684c4bb72d35f037a0394bdaf1",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/d3_chart_widget.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "05edbcc13ed9cdeb7d48c4db4dd6686c9ce8c5eb",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/d3_chart_widget.ts"
    },
    {
      "type": "modify",
      "old_id": "a8366110f3b43fffbb32637f24f730f1a538ae17",
      "old_mode": 33188,
      "old_path": "ui/tsconfig.json",
      "new_id": "68bfb473defa7719ddffc12213617923cb3b72d7",
      "new_mode": 33188,
      "new_path": "ui/tsconfig.json"
    }
  ]
}
