)]}'
{
  "commit": "8f11cc6cf9aff635e6326adbab1bce1fbb9879b4",
  "tree": "fcd64d3587056e3bd0c9c88b0ad9b8d1be467bf8",
  "parents": [
    "1cbab3dc4c8cc0a35b0fde45e52c0d1607554d74"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Oct 07 20:54:14 2026 +0000"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Thu Oct 08 13:00:38 2026 +0000"
  },
  "message": "ui: add dev.perfetto.ScatterPlot plugin and __intrinsic_scatter_mipmap operator\n\nAdds a GPU-accelerated 2D scatter plot page plugin (dev.perfetto.ScatterPlot)\nover any trace processor table or SQL query, backed by a new trace processor\n2D level-of-detail virtual table operator (__intrinsic_scatter_mipmap).\n\nTrace processor (src/trace_processor/plugins/scatter_mipmap_operator):\n- Builds a 2D Morton-ordered spatial index (2-pass 11-bit radix sort + level-T\n  prefix table, 24 B/point SoA) once on CREATE VIRTUAL TABLE and answers\n  viewport queries (cols x rows cells) in O(cells) via aligned prefix-table\n  lookup, with a quadtree DFS fallback for arbitrary unaligned viewports.\n- Returns one representative point per non-empty cell (id, x, y, c, count),\n  plus hidden aggregate columns (out_count, out_x_min/max, out_y_min/max,\n  out_c_min/max) so dataset bounds are read without a separate SQL scan.\n- Direct dataframe column ingestion for Int64, Double, Uint32, Int32 and\n  StringPool::Id columns, with a SQL projection fallback for views and\n  subqueries.\n- Optional integer-N 6th argument computes top-N categorical frequencies in\n  pass 1 (mapping top N to 0..N-1, remaining non-null values to N \u0027Other\u0027,\n  and NULL to -1), with a cols\u003d0, rows\u003d0 listing mode returning\n  (out_cat_idx, out_cat_value, out_cat_count) for the legend.\n\nUI plugin (ui/src/plugins/dev.perfetto.ScatterPlot):\n- WebGL2 renderer with hi/lo float32 splitting for nanosecond-scale timestamps\n  and a 1D RGBA8 color LUT texture (viridis continuous + 20-category palette).\n- Power-of-two aligned viewport quantization with 15% padding so pans within\n  the padded region do not re-query trace processor.\n- Cursor-anchored smooth wheel zoom, drag pan, Shift+drag box selection with\n  lazy SQL DataGrid aggregation and query-page handoff, Popper-backed\n  CursorTooltip, and a collapsible DrawerPanel embedding ThreadSliceDetailsPanel\n  for pinned slices and Tree/Timestamp/DurationWidget for generic tables.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3187269c93bae67fb228db48e8d4d2f48e717691",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "7afcab2efb0f2776d9a0b5610ca678e22e545964",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "32a2f86ed2bd6ea9c3446d67083df7ec16bf1398",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "1e37112ea0b0cb96e67f045b9c3179f93ffcc453",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "modify",
      "old_id": "79237bb49da00731f876b349a536642c2df2ca06",
      "old_mode": 33188,
      "old_path": "src/trace_processor/BUILD.gn",
      "new_id": "efc2443181f926d064e37be21fb88d7f0695f69b",
      "new_mode": 33188,
      "new_path": "src/trace_processor/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "ca1927bd72571069d6ba3c5dbf68943d73dd605c",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.h",
      "new_id": "04e378a9f52fb7321d453df12ce6b0fafb835407",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3d6ba50df011861c7d865808f5a7be4c81016d29",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/scatter_mipmap_operator/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bfa912ed948ce151b728f9f6bd5c1e06e75af6fb",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/scatter_mipmap_operator/scatter_mipmap_index.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cf4656cb5483b249881c720c3838423b4e3db3be",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/scatter_mipmap_operator/scatter_mipmap_index.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cc690912eb53937f541d206db07d662228654d43",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/scatter_mipmap_operator/scatter_mipmap_operator.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1e474df7f4f2396f114364967043750a6255a98d",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/scatter_mipmap_operator/scatter_mipmap_operator.h"
    },
    {
      "type": "modify",
      "old_id": "d0bba8f312336d11f6739bba4e7e9c3576bf1a64",
      "old_mode": 33188,
      "old_path": "src/trace_processor/trace_processor_impl.cc",
      "new_id": "177806cd99308b2ec9cba0ca8b8b5b4a7e0d2316",
      "new_mode": 33188,
      "new_path": "src/trace_processor/trace_processor_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "ad86ec75eb4d876567cce15995be6d2aa217ff50",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/include_index.py",
      "new_id": "aa6772f21f772c95c0a82f0ce6a04581a691276d",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/include_index.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a161e77dd9f5d2f55394ea6598b58afe96f1d6f8",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/syntax/scatter_mipmap_tests.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "30188243d4327e60c265d5b40e187f5eedf30fde",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/axis.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4d6477713755a74da46d4bbff09c09302a1cbe75",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/color_scale.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c672b63a91ce6d61d448c03519b01dfeb51884ed",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4c5ecf5eb0fb4b66b111d3e290aee3224cc66572",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/point_set.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9fbd134f4e1cb83b79b3e68c458ef26b32c7f46b",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/scatter_controller.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d6f81b0730b678cd030dd71cd9107ac1a356f715",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/scatter_page.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2cea90d1bdb5628d3640e4d248cf2c2522046dc8",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/scatter_plot_unittest.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "241db1be6612d75c394a85831502e51dbe886751",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/scatter_plot_view.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6bedea45e544ecfaf1cbe9d5befe257889769296",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/scatter_source.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3469be5f994450403d4ac70aa96cec9b821cf636",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/source_picker.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "48c4703e3c575b1b10220de1765144eeafd9ec05",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/sql_utils.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "da6cbad82b4197f41f2666385faff07fa1035daa",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/styles.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ba64ea10e6253336c381347deae12ad13994bd3",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/types.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "43ed19240687f5f9633a99b4d1e2828ac363afc3",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/view.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9d6b73fbe95584c8326872f6e3c470f376eb6c92",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.ScatterPlot/webgl_renderer.ts"
    }
  ]
}
