You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
perf(results): charts and groupings parse and aggregate all rows on the UI thread on every rebuild #1170
Results can hold up to 100 000 rows (sql_result_max_rows, default 5 000). Charts and Groupings process them synchronously on the UI thread:
ChartData.numericColumns parses every cell of every column with double.tryParse when Charts opens and on every new result (quick_chart_view.dart: _recompute).
build() calls ChartData.build (parse all rows again) on every rebuild, no memo; SVG export parses once more.
DataGridGroupingsView calls GridGroupingsEngine.buildGroups over all rows synchronously on every option click (column, aggregate, sort).
Scope
Memoize chart points by (rows identity, columns, type, X, Y, aggregation).
Problem
Results can hold up to 100 000 rows (
sql_result_max_rows, default 5 000). Charts and Groupings process them synchronously on the UI thread:ChartData.numericColumnsparses every cell of every column withdouble.tryParsewhen Charts opens and on every new result (quick_chart_view.dart: _recompute).build()callsChartData.build(parse all rows again) on every rebuild, no memo; SVG export parses once more.DataGridGroupingsViewcallsGridGroupingsEngine.buildGroupsover all rows synchronously on every option click (column, aggregate, sort).Scope
compute/Isolate.run, withQueryaSpinnerin the pane; stale results discarded (generation counter), like the selection stats in perf(workspace): offload massive grid selection statistics calculation to background compute #652.Alloption of fix(charts): bar/line silently use the first 50 rows; add aggregation and Top N #1158: downsample line series (LTTB) to the pixel width, cap bars.Acceptance