дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 19:25:54 +02:00
Switching between file tabs destroyed the hidden tab's CodeMirror view and built a new one on return: every switch re-ran the view's plugins, re-measured the height map (the scrollbar jumped) and re-requested inlay hints, usages and diagnostics, which popped in and shifted the text up to a second later. The eight most recently hidden views are now kept detached and re-attached on return, with their decorations, height map and plugin state. Edits while hidden go to the kept view; plugins that skip work while their view is detached catch up when it is shown again (`viewShown`). Switching also forces fewer layouts: the Switcher no longer gives focus back to the editor left behind when it opens another tab, the tab strip only measures the active tab when it isn't known to be in view, and focus moving between editors no longer drops the old editor's DOM caret. The tabs perf scenario counts views rebuilt when switching back (budget 0).
143 рядки
4.4 KiB
JSON
143 рядки
4.4 KiB
JSON
{
|
|
"$comment": "Upper bounds, lower is better. ui: `<scenario>.<metric>` from `pnpm perf` (medians of the measured runs; enforced at CPU 1x only). Latencies are input → start of the first frame showing the result, so ~16.7 ms is 'next frame'. rust: criterion bench id → mean in microseconds, from `pnpm perf:rust` (`plugins/…`: the plugin runtime budgets).",
|
|
"regressionTolerance": 0.2,
|
|
"regressionFloor": 1,
|
|
"ui": {
|
|
"bundle.initialJsKb": 850,
|
|
"bundle.initialCssKb": 60,
|
|
|
|
"startup.readyMs": 400,
|
|
"startup.tbtMs": 50,
|
|
"startup.heapMb": 30,
|
|
"startup.domNodes": 1500,
|
|
|
|
"typing.p95Ms": 20,
|
|
"typing.maxMs": 33,
|
|
"typing.missedFramePct": 2,
|
|
"typing.styleLayoutMsPerKey": 3,
|
|
"typing.mainThreadMsPerKey": 10,
|
|
"typing.tbtMs": 50,
|
|
|
|
"typingLarge.openMs": 200,
|
|
"typingLarge.p95Ms": 20,
|
|
"typingLarge.maxMs": 33,
|
|
"typingLarge.missedFramePct": 2,
|
|
"typingLarge.styleLayoutMsPerKey": 3,
|
|
"typingLarge.mainThreadMsPerKey": 20,
|
|
"typingLarge.tbtMs": 50,
|
|
|
|
"typingAngular.openMs": 200,
|
|
"typingAngular.p95Ms": 30,
|
|
"typingAngular.maxMs": 40,
|
|
"typingAngular.mainThreadMsPerKey": 30,
|
|
"typingAngular.tbtMs": 50,
|
|
|
|
"completion.openMs": 150,
|
|
"completion.narrowP95Ms": 20,
|
|
"completion.narrowMissedFramePct": 2,
|
|
"completion.narrowMainThreadMsPerKey": 35,
|
|
"completion.arrowP95Ms": 20,
|
|
"completion.arrowMissedFramePct": 2,
|
|
"completion.tbtMs": 50,
|
|
|
|
"consoleOutput.streamMs": 4600,
|
|
"consoleOutput.droppedFramesPct": 2,
|
|
"consoleOutput.keyP95Ms": 20,
|
|
"consoleOutput.keyMissedFramePct": 10,
|
|
"consoleOutput.tbtMs": 50,
|
|
|
|
"gitLog.showMs": 300,
|
|
"gitLog.droppedFramesPct": 2,
|
|
"gitLog.tbtMs": 50,
|
|
"gitLog.arrowKeyP95Ms": 20,
|
|
"gitLog.arrowKeyMissedFramePct": 5,
|
|
"gitLogScrollbar.frameP95Ms": 17.5,
|
|
"gitLogScrollbar.droppedFramesPct": 2,
|
|
"gitLogScrollbar.tbtMs": 50,
|
|
|
|
"resizePanels.droppedFramesPct": 2,
|
|
"resizePanels.bottomDroppedFramesPct": 2,
|
|
"resizePanels.tbtMs": 50,
|
|
|
|
"keyRepeat.p95Ms": 20,
|
|
"keyRepeat.maxMs": 33,
|
|
"keyRepeat.missedFramePct": 2,
|
|
"keyRepeat.mainThreadMsPerKey": 16,
|
|
"keyRepeat.tbtMs": 50,
|
|
|
|
"scroll.frameP95Ms": 17.5,
|
|
"scroll.droppedFramesPct": 2,
|
|
"scroll.tbtMs": 50,
|
|
"scroll.jumpMs": 33,
|
|
|
|
"tabs.openSmallMs": 100,
|
|
"tabs.switchP95Ms": 33,
|
|
"tabs.switcherP50Ms": 33,
|
|
"tabs.viewsRebuilt": 0,
|
|
|
|
"agentTabs.conversationNodes": 20000,
|
|
"agentTabs.rowsAlwaysRendered": 0,
|
|
"agentTabs.switchP95Ms": 50,
|
|
"agentTabs.switchMainThreadMs": 50,
|
|
"agentTabs.switchTbtMs": 50,
|
|
"agentTabs.scrollJumps": 0,
|
|
"agentTabs.scrollFrameP95Ms": 17.5,
|
|
"agentTabs.scrollDroppedFramesPct": 2,
|
|
"agentTabs.scrollTbtMs": 50,
|
|
|
|
"popups.findActionOpenMs": 50,
|
|
"popups.findActionQueryMs": 120,
|
|
"popups.findActionKeyP95Ms": 33,
|
|
"popups.searchEverywhereOpenMs": 50,
|
|
"popups.searchEverywhereQueryMs": 120,
|
|
|
|
"toolWindows.maxMs": 50,
|
|
|
|
"projectTree.expandMs": 50,
|
|
"projectTree.frameP95Ms": 17.5,
|
|
"projectTree.droppedFramesPct": 2,
|
|
"projectTree.arrowKeyP95Ms": 20,
|
|
"projectTree.arrowKeyMissedFramePct": 2,
|
|
|
|
"leaks.heapGrowthMb": 4,
|
|
"leaks.domNodeGrowth": 100,
|
|
"leaks.listenerGrowth": 20
|
|
},
|
|
"rust": {
|
|
"text/open_1mb": 2000,
|
|
"text/apply_keystroke_1mb": 20,
|
|
"text/apply_100_changes_1mb": 1000,
|
|
"text/diff_two_edits_1mb": 10000,
|
|
"text/diff_every_line_1mb": 100000,
|
|
"text/offset_to_pos_round_trip": 5,
|
|
"text/pos_to_byte": 5,
|
|
"text/text_for_save_crlf_1mb": 1000,
|
|
|
|
"syntax_2mb/selection_cached_hit": 5000,
|
|
"syntax_2mb/outline_cached_hit": 10000,
|
|
"syntax_2mb/folding_cached_hit": 1000,
|
|
"syntax_2mb/folding_after_keystroke_incremental": 200000,
|
|
"syntax_2mb/outline_after_keystroke_incremental": 350000,
|
|
|
|
"index_100k/find_files/a": 10000,
|
|
"index_100k/find_files/ordcon": 10000,
|
|
"index_100k/find_files/src/user": 10000,
|
|
"index_100k/find_files/PaymentService": 10000,
|
|
"index_100k/find_dirs/util": 5000,
|
|
"index_100k/find_dirs/src/ui": 5000,
|
|
"index_100k/find_dirs/a": 5000,
|
|
"index_100k/find_symbols/OCo": 15000,
|
|
"index_100k/find_symbols/q": 15000,
|
|
"index_100k/find_symbols/invoiceRepo": 15000,
|
|
"index_100k/find_symbols_types/UsSe": 15000,
|
|
|
|
"search_5k/literal": 100000,
|
|
"search_5k/regex": 100000,
|
|
"search_5k/dense_limit": 20000,
|
|
|
|
"plugins/load_50": 20000,
|
|
"plugins/cold_activation": 30000,
|
|
"plugins/syntax_highlights_2k_lines": 50000
|
|
}
|
|
}
|