mirror of
https://github.com/microsoft/terminal.git
synced 2026-02-04 05:35:20 +00:00
Extremely slow performance when processing virtual terminal sequences #14269
Open
opened 2026-01-31 04:05:38 +00:00 by claunia
·
48 comments
No Branch/Tag Specified
main
automated/loc-update
feature/llm
dev/cazamor/sui/search
dev/pabhoj/actions_editor_search
dev/lhecker/11509-kitty-keyboard-protocol
dev/lhecker/11509-kitty-keyboard-protocol-wip
dev/pabhoj/actions_editor_visual
dev/cazamor/selfhost/2026-01-29
dev/duhowett/no-blank-issues-you-lost-privileges-for-that-fam
dev/lhecker/benchcat-fix
dev/lhecker/dcs-perf
dev/duhowett/eoy-25/allow-set-foreground
release-1.24
release-1.23
dev/cazamor/bot/deprecate-area-atlasengine
dev/pabhoj/actions_editor_followups
dev/cazamor/selfhost/2026-01-20
dev/cazamor/selfhost/2026-01-12
dev/cazamor/spec/auto-save
dev/duhowett/eoy-25/underline-colors-in-atlas-bug-redux
dev/duhowett/fhl-2024/asciicast-recorder
dev/duhowett/eoy-25/underline-colors-in-atlas-bug
dev/duhowett/hax/serial-port-support
dev/duhowett/connection-utf8
dev/lhecker/fused-event
dev/lhecker/18928-wip
dev/duhowett/fhl-2024/clang
dev/cazamor/uia-leak
dev/duhowett/win7-wpf-termcontrol-squash
release-1.22
dev/cazamor/selfhost/11-18-v3
dev/cazamor/selfhost/11-18
dev/duhowett/fhl-2025/bitmap-fonts
dev/duhowett/server-2025-vms
dev/duhowett/cant-believe-gotta-do-this-shit
dev/lhecker/1410-large-scrollback
dev/lhecker/dark-mode
dev/cazamor/sui/invert-cursor-color
dev/duhowett/fhl-2025/wt-command-palette-cmdpal-integration
dev/duhowett/fhl-2025/wt-json-relative-icons
dev/lhecker/fucking-service-locator
dev/duhowett/unicode-17
dev/duhowett/multi-blern
dev/lhecker/wellp2-alt
dev/duhowett/wellp2
dev/lhecker/1860-horizontal-scrollbar
dev/lhecker/fix-window-count
dev/cazamor/sui/tab-color-old
dev/duhowett/hax/conhost-icon
dev/duhowett/hax/sui-color-chip-border
dev/duhowett/hax/terminalsettings-as-a-lib-/with-types-merged-into-tsm
dev/pabhoj/page_control_input_cleanup
dev/duhowett/padding-in-atlas-rebase-20250729
dev/lhecker/attach-thread-input
dev/duhowett/portable-shader-members
msbuildcache-reenable
dev/cazamor/selfhost/1.24-2025-06-10
dev/cazamor/upgrade-settings-containers
dev/cazamor/sui/ext-page/powershell-stub
dev/cazamor/selfhost/1.24-2025-05-15
dev/pabhoj/sui_action_overhaul
dev/cazamor/selfhost/1.24-2025-05-06
dev/cazamor/selfhost/1.24-2025-04-29
dev/cazamor/sui/ext-page/lazy-load-objects
dev/cazamor/sui/ext-page/badge
dev/cazamor/selfhost/1.24
dev/lhecker/sdk-26100
dev/duhowett/testing
dev/jadelaga/VS-Pty.Net-1.22
dev/duhowett/fhl-2025/what-if-no-content-ids
dev/cazamor/a11y/vt-seq-prototype
dev/lhecker/18584-part2
dev/lhecker/get-lang-id
dev/duhowett/hax/clogs
release-1.21
dev/pabhoj/featurellm_fix_paste
dev/lhecker/grapheme-backup
dev/jadelaga/VS-Pty.netFixes
dev/lhecker/atlas-engine-compute-shader
dev/migrie/s/ai-providers
dev/lhecker/animated-cursor-wip
dev/pabhoj/featurellm_timeout
dev/lhecker/dark-mode-alt
dev/duhowett/osc-strided-table
dev/lhecker/bugbash
dev/pabhoj/featurellm_improve_parsing
dev/duhowett/coast-to-coast
dev/lhecker/curly-improvements
dev/duhowett/net8
dev/duhowett/onebranch-custom-pool
dev/lhecker/renderer-overhaul-2nd-attempt
dev/lhecker/cleanup
dev/cazamor/sui/confirmation-announcements
dev/lhecker/theme-quality
dev/duhowett/hax/cmake
dev/lhecker/winconpty-cleanup
dev/duhowett/learn/rewrite-highlights
dev/migrie/b/no-nesting-when-searching
release-1.20
dev/lhecker/14165-conhost-font-size
dev/duhowett/sel-2-spans
dev/lhecker/7118-cursor-color
dev/lhecker/remove-glyph-width
dev/lhecker/igfw-scroll-region
dev/lhecker/17656-win32im-double-encoding
dev/duhowett/fhl-2024/merge-idls
dev/duhowett/feed-forward-variables
dev/lhecker/remove-chrome-math
dev/duhowett/copylink
dev/duhowett/applicableactions
gh-readonly-queue/main/pr-17566-de50310295b7d92ed3d51f07974a2a945776bf9d
dev/lhecker/atlas-engine-stride-copy
dev/migrie/b/bump-nuget-in-c
dev/migrie/f/992-redux-redux
dev/migrie/f/filter-weight-input-too
dev/migrie/f/disable-nesting
dev/migrie/f/local-snippets-cleaner
dev/migrie/s/1553-mouse-bindings
selfhost-1.22-bugbash-2024-06-04
selfhost/1.22-bugbash-2024-06-04
dev/lhecker/15689-tab-drag-crash-fix
dev/migrie/f/sxnui-font-size-change
dev/migrie/f/local-snippets-on-action-refactor
dev/migrie/f/just-local-snippets
dev/migrie/save-input-patches
dev/migrie/f/md-pane-official
dev/migrie/base-pane
dev/migrie/fhl/tasks-pane
release-1.19
dev/migrie/b/17130-clear-marks-2
dev/migrie/b/17075-its-me-the-killer
dev/duhowett/i-figured-out-why-sometimes-the-publish-build-failed
dev/duhowett/nuget-publication-with-aad-app-id
selfhost-1.20
dev/duhowett/graph
dev/migrie/b/15803-activate-dont-copypasta
dev/duhowett/is-pgo-broken-because-of-sui-being-slower
dev/migrie/b/remove-terminaltab
dev/migrie/fhl/md-pane
dev/migrie/fhl/local-tasks-2024
dev/migrie/fhl/2024-inline-notebook
dev/duhowett/interface-projects
dev/duhowett/dead-loc
release-1.18
dev/migrie/fhl/2024-spring-merge-base
dev/duhowett/hax/l9
inbox
dev/migrie/14073-on-main
dev/duhowett/hax/conhost_dump_replay
user/lhecker/atlas-engine-srgb
dev/migrie/fhl/sxnui-tooltips-3
dev/migrie/7718-notifications-experiments
dev/migrie/fhl/7718-notifications
dev/migrie/fhl/7718-notifications-reboot
dev/lhecker/remove-gsl
dev/lhecker/16575-TerminateProcess
dev/lhecker/window-thread-climate-control
dev/lhecker/client-context-input-output-mode
dev/lhecker/ring-buffer-input-buffer
release-1.17
dev/lhecker/propsheet-fontdlg-refactor
dev/lhecker/renderer-overhaul
dev/pabhoj/test
dev/duhowett/chop
dev/lhecker/til-ulong-cleanup
dev/lhecker/til-env-cleanup
dev/migrie/f/16005-a11y-pane
dev/cazamor/a11y/fastpass
dev/migrie/b/15487-push-cwd
dev/migrie/b/15536-or-15219-idk
dev/duhowett/move-timers-down-into-core-interactivity-etc
dev/migrie/b/15812-broadcast-paste-two
dev/migrie/fhl-fall-2023/11162-quake-III-arena
dev/migrie/fhl-fall-2023/1620-automatic-tab-progress
dev/migrie/fhl-fall-2023/9992-quake-II
dev/migrie/fhl-fall-2023/9992-default-quake-settings
dev/migrie/fhl-fall-2023/9992-window-name-settings
dev/migrie/fhl-fall-2023/oceans
dev/lhecker/ColorScheme-improvements
dev/migrie/search-v2-v3
dev/migrie/pr-15717/its-dangerous-to-go-alone
dev/migrie/f/4768-taskbar-icons
dev/duhowett/padding-in-atlas
dev/migrie/f/3121-tooltips
dev/duhowett/sticky-control
dev/duhowett/fix-tracing-2
dev/migrie/b/add-support-for-vsc-marks
dev/migrie/f/1860-this-is-literally-what-less-is-for
dev/migrie/s/5916-draft
dev/lhecker/tracy
dev/migrie/s/north-star
dev/cazamor/tag-youre-it
dev/migrie/f/12336-let-it-mellow
dev/migrie/f/now-with-more-compat-settings
dev/migrie/f/compatibility-sui
dev/duhowett/hax/wpf-atlas
dev/duhowett/fgb
dev/migrie/b/15487-relative-paths-are-hard
dev/lhecker/colrv1
loc-update
dev/migrie/fhl/dyndep-csharp
dev/migrie/fhl/dyndep
dev/migrie/fhl-clickable-send-input
dev/migrie/f/cwd-hijinks-5506-15173
dev/lhecker/openconsole-async-start
1.17
dev/migrie/bump-scratch
dev/migrie/f/3726-restartConnection
dev/migrie/b/cxn-restarting-attempt-1-backport
dev/migrie/b/9053-part-3-the-actual-doing-of-the-thing
dev/migrie/b/13388-focus-logger
dev/migrie/b/9053-part-4-i-guess-defterm
dev/migrie/oop/3/of-the-silmarils
of-the-darkening-of-valinor
dev/migrie/fhl/notebook-proto-000
dev/migrie/f/narrator-buddy
dev/migrie/mux-2.8.2-march-2023
dev/migrie/f/roast-mutton
dev/migrie/f/12861-preview-input
dev/lhecker/clang-tidy
dev/migrie/f/3121-wE-dOnT-hAvE-dEv-DaYs
dev/duhowett/compiler-compliance
dev/duhowett/i-have-a-burning-hatred-for-ntstatus-of-later-so-why-not-fix-it
dev/duhowett/shorthand-namespaces
dev/duhowett/rename-all-dlls
dev/duhowett/errordialog
dev/lhecker/gsl-narrow
dev/migrie/b/11522-dumb-idea
release-1.16
dev/miniksa/env
dev/duhowett/hax/embed-everything
dev/migrie/b/13388-attempt-003
dev/migrie/b/14512-test-research
dev/migrie/b/13388-attempt-002
dev/migrie/b/14464-copyOnSelect-moving-text
dev/migrie/s/thema-schema-for-1.16
dev/migrie/s/theme-pair-schema
dev/migrie/b/13388-experiments-1
dev/cazamor/spec/a11y-vt-seq
dev/migrie/b/14557-empty-folder-dropdown
dev/cazamor/spec/a11y-vt-seq-v2
release-1.15
dev/migrie/f/process-model-v3-test-0
dev/lhecker/vsconfig
dev/migrie/s/5000-presentation
dev/lhecker/5907-startup-perf
dev/lhecker/winrt-file-api-benchmark
dev/duhowett/128-bit-compiler
dev/duhowett/hax/arm64-native-build
dev/migrie/fhl/more-shell-integration
dev/migrie/b/13388-experiments-0
dev/lhecker/til-to-ulong-improvements
dev/migrie/s/markdown-notebooks
dev/cazamor/a11y/nav-by-page
dev/cazamor/a11y/system-menu-support
dev/duhowett/no-private-registry-keys
dev/cazamor/wpf/uia-expose-enable-events
dev/cazamor/wpf/uia-events
extendAISpec
dev/migrie/fhl/clickSendInput
dev/migrie/fhl/save-command
dev/migrie/b/theme.profile
dev/migrie/b/13943-a-test-for-this
dev/migrie/oop/2/endgame
dev/duhowett/hax/merge_idl
dev/migrie/oop/2/infinity-war
dev/migrie/spellbot-cve
dev/cazamor/a11y-sev3/new-profile-announcement
dev/migrie/fhl/upside-down-mode
release-1.14
dev/migrie/f/9458-startupInfoToTerminal
dev/migrie/fhl/5916-triggers
dev/migrie/b/13523-context-menu
dev/migrie/b/6523-endpaint-outside-lock
dev/migrie/b/12413-OnUnhandledException
dev/lhecker/render-snapshot
dev/cazamor/1.15/scroll-to-point
dev/migrie/mux-2.8-aug-2022
dev/lhecker/lock-console-guard
dev/migrie/f/1504-final
dev/pabhoj/sui_follow_ups
dev/migrie/f/til-winrt.h
dev/cazamor/color-picker-redesign
dev/migrie/fhl/vscode-autocomplete-prototype
dev/migrie/f/1504-prototype
dev/migrie/oop/2/loki
dev/migrie/oop/2/wandavision
dev/migrie/b/8698-YOURE-OUT-OF-ORDER
fabricbot-configuration-migration
dev/migrie/b/12788-did-it-work
dev/migrie/b/localtests-ci-2022
dev/cazamor/1.14/replace-compareInBounds
dev/pabhoj/preview_string
dev/cazamor/ks/switchSelectionEndpoint
dev/migrie/oop/2/COM-ISwapChainProvider-attempt-1
dev/migrie/b/dxd-marker
release-1.13
dev/migrie/b/13066-for-defterm
dev/cazamor/revert-dwm
dev/migrie/b/13066-sw_flash_repeatedly
dev/migrie/b/no-cloaky-cloak
dev/migrie/f/apples-to-oranges
dev/migrie/f/no-custom-caption-btns
dev/migrie/f/10509-mica-and-transparent-titlebars
dev/migrie/b/12911-wpf-focus-fg
dev/migrie/titebar-colors
dev/lhecker/4015-cursor
dev/migrie/fhl/rgb-rainbow-window-frame
dev/migrie/fhl/scroll-marks-prototype
release-1.12
dev/miniksa/compliance
dev/migrie/f/default-icons
dev/migrie/fhl/10175-web-search-for-text
dev/migrie/fhl/menu-complete-prototype
dev/migrie/b/2988-merged-prototypes
dev/migrie/b/2988-niksa-msgs-prototype
dev/migrie/fhl/9583-colorSelection
dev/migrie/b/10609-sui-leak
dev/migrie/b/32-attempt-3
dev/migrie/release-1.12-rejuv-attempt-2
dev/migrie/demo-for-presentation
dev/migrie/b/32-but-im-here-for-12567
dev/duhowett/conpty_first_frame_blug
dev/migrie/b/11092-unfocused-acrylic-settings
dev/migrie/localtests-in-ci
dev/migrie/b/12356-attempt-2
dev/migrie/b/12353-with-null
dev/migrie/b/12387-trim-spaces
dev/migrie/b/5033-bad-start
dev/lhecker/12351-broken-locales
dev/migrie/b/8663-input-to-oem-crash
dev/migrie/b/11743-win10-opacity-is-hard
dev/migrie/f/ctrl-click-elevate
dev/migrie/b/12196-shim-localization
dev/lhecker/issue-4015-til-rect
dev/cazamor/eim/mvvm
dev/migrie/f/--elevate
dev/migrie/b/11668-i-think
dev/migrie/b/11994-wsl-mangline
dev/migrie/eim/3475-action-xmacros
dev/migrie/eim/incremental-build-000
dev/cazamor/a11y/fake-uia-data
dev/migrie/f/non-terminal-content-elevation-warning
dev/migrie/f/632-on-warning-dialog
dev/lhecker/rgba
dev/migrie/b/8480-keybindings-in-tabs
release-1.11
dev/migrie/b/11561-dead-ends
dev/migrie/oct-21-roadmap-update
dev/migrie/fhl/adaptive-card-extension
dev/cazamor/test/11440
dev/migrie/f/warning-dlg-automation
dev/migrie/b/1.12-crash-on-exit
dev/migrie/b/11146-next-tab-in-cmdpal
release-1.10
dev/migrie/5ff9a24-and-75e2b5f
dev/duhowtt/hax/cpal-jumplist-async
dev/lelian/actionid/1
dev/migrie/f/just-elevated-state
dev/lhecker/terminal-settings-cleanup
dev/migrie/gh-10824
dev/pabhoj/cursor_light
dev/migrie/oop/wandavision
dev/migrie/oop/endgame
dev/migrie/oop/infinity-war
dev/lhecker/app-state-actually-hidden
dev/migrie/b/6160-dynamic-default-warning
dev/mgirie/b/more-nchhittest-ideas
dev/migrie/b/9320-interfacial-separation
cinnamon/fhl/find-contextmenu
dev/lhecker/wsl-distro-generator-cleanup
dev/migrie/b/10875-but-more-clever
dev/migrie/b/broken-globalsummon-overloading
dev/duhowett/hax/rle-row
dev/migrie/fhl-2021/cmdpal-select-list
dev/migrie/fhl-2021/differential-pixel-shading
dev/duhowett/hax/no-writable-glyphat
dev/migrie/fhl-2021/more-shader-variables
dev/migrie/titlebar-shenannigans
dev/miniksa/win10_font_matching
dev/lhecker/conhost-oom
dev/migrie/b/10332-less-snappy-scrolling
dev/migrie/b/7422-1px-top-border
release-1.9
dev/cazamor/move-scratch
release-1.8
dev/miniksa/manifest_2
release-1.6
release-1.7
dev/migrie/oop/the-whole-thing
dev/migrie/oop/connection-factory
dev/migrie/f/quake-dropdown-2
dev/miniksa/rle2
dev/migrie/f/quake-toCurrent-experiments-2
dev/migrie/f/quake-toCurrent-experiments
dev/migrie/f/quake-dropdown
dev/cazamor/actions-page/template
dev/duhowett/hax/cursor_stamp_foreground_background
dev/migrie/f/1860-hey-might-was-well-hack-during-a-hackathon
dev/migrie/oop-terminal.control-split-control
dev/duhowett/hax/build-with-wholearchive
dev/cazamor/spec/tsm-actions-temp
dev/migrie/oop-tear-apart-control
dev/migrie/oop-scratch-3
dev/cazamor/sui/bugfix-reload-crash
dev/migrie/f/xmacro
dev/cazamor/sui/proto/profile-nav-view
dev/migrie/f/name-windows
dev/migrie/dol/messing-with-shaders-take-1
release-1.5
dev/cazamor/sui/inheritance-hyperlinks-test
dev/migrie/r/commandline-lib-002
dev/migrie/f/com.fabrikam.toaster
dev/cazamor/adaptive-cards-prototype
dev/migrie/f/commandline-lib
dev/miniksa/zipzoom2
dev/migrie/f/remote-commandlines
dev/migrie/f/632-elevated-profiles
dev/migrie/oop-broker-000
dev/migrie/fix-pr-7015
dev/duhowett/clang
dev/miniksa/input_tests_2
dev/miniksa/input2
dev/migrie/oop-rpc-000
release-1.4
dev/migrie/oop-mixed-elevation-1
dev/migrie/oop-window-content-1
cinnamon/open-json
dev/miniksa/input_tests
dev/duhowett/hax/tsm-graphviz
dev/miniksa/input
dev/duhowett/hax/caption_buttons
release-1.3
dev/cazamor/a11y/expand-line-under-viewport
dev/cazamor/acc/ch/word-nav-perf
dev/cazamor/spec/settings-ui-architecture-draft
dev/duhowett/hax/tap_upgrade
dev/migrie/f/pane-exit-animation
release-1.2
dev/migrie/move-lib-up-and-dll-down
release-1.1
dev/migrie/f/branch-2-backup
dev/migrie/f/settings-getters-only
dev/duhowett/hax/command_palette_search
dev/migrie/f/6856-let-terminalpage-expandcommands
dev/migrie/f/theming-2020
dev/migrie/oop-scratch-4
dev/duhowett/hax/punchout
dev/migrie/s/action-ids
dev/migrie/f/lets-just-generate-these
dev/migrie/oop-scratch-2
dev/miniksa/dcomp
dev/miniksa/gotta_go_fast_spsc
dev/miniksa/gotta_go_fast
dev/miniksa/perf_skip_checks
dev/miniksa/perf_buffer_dig
dev/migrie/s/1203-cursorTextColor
dev/migrie/f/fix-intellisense-i-guess-backup
release-1.0
dev/migrie/f/execute-commandlines
dev/migrie/f/2046-Command-Palette-v2
dev/migrie/b/6421-passthrough-alt
dev/migrie/b/moving-focus-is-hard
dev/miniksa/set
dev/migrie/f/1203-phase-1
dev/migrie/f/get-localtests-in-ci
dev/cazamor/drag-panes
dev/cazamor/tile-background
release-0.11
dev/duhowett/dev/duhowett/hax/appstate_remember
dev/duhowett/load_condrv
dev/duhowett/hax/wpf_win_8_hax
dev/migrie/b/3088-weird-exact-wrap-resize
release-0.10
dev/migrie/b/4591-custom-scaling-bug
dev/duhowett/hax/attr_smuggling
dev/migrie/b/5161-mingw-vim-fix
dev/miniksa/dx_bitmap
dev/migrie/b/1503-try-messing-with-cooked-read
dev/duhowett/eyebeam
dev/migrie/b/5113-experiments
dev/duhowett/hax-selection-exclusive
dev/migrie/f/more-vt-renderer-tracing
dev/miniksa/bitmap
dev/duhowett/wprp
dev/miniksa/bitmap-mad-with-power
dev/migrie/f/resize-quirk
dev/migrie/f/reflow-buffer-on-resize-002
wpf-renderer-revert
dev/miniksa/draw
release-0.9
dev/miniksa/tabs-color-fix
dev/miniksa/4309
dev/migrie/f/just-wrapping
dev/migrie/b/3490-try-another-resize-algo
release-0.8
dev/migrie/b/3490-a-simpler-resize
dev/migrie/b/3490-resize-down
dev/miniksa/4254
dev/migrie/f/conpty-wrapped-lines-2
dev/migrie/b/be-better-at-hiding
dev/migrie/f/3327-xaml-theming-proto
dev/miniksa/gardening2
release-0.7
dev/duhowett/conpty-flags
dev/migrie/f/603-vintage-opacity
dev/migrie/PR#3181-comments
dev/duhowett/font-64
release-0.5
dev/migrie/b/663-paste-lf-always
dev/migrie/b/2011-reordered-fallthrough-strings
dev/migrie/b/411-init-tab-stops
dev/migrie/b/json-patching-is-hard
dev/migrie/b/2455-try-getting-tests-working
dev/migrie/b/1223-change-256-table
dev/migrie/f/2171-openterm.cmd
dev/migrie/f/drag-panes
dev/migrie/f/2046-command-palette
release-0.3
dev/miniksa/manager
dev/migrie/f/non-terminal-panes
dev/migrie/f/passthrough-2019
dev/miniksa/shared_pch
dev/migrie/f/1897-less-duplicated-work
release-0.2
dev/cazamor/mcs/viewport-selection
dev/duhowett/version_hack
v1.24.10212.0
v1.23.20211.0
v1.24.3504.0
v1.23.13503.0
v1.24.2812.0
v1.23.12811.0
v1.24.2682.0
v1.23.12681.0
v1.24.2372.0
v1.23.12371.0
v1.23.12102.0
v1.22.12111.0
v1.23.11752.0
v1.22.11751.0
v1.22.11141.0
v1.23.11132.0
v1.23.10732.0
v1.22.10731.0
v1.21.10351.0
v1.22.10352.0
v1.23.10353.0
v1.22.3232.0
v1.21.3231.0
v1.22.2912.0
v1.21.2911.0
v1.22.2702.0
v1.21.2701.0
v1.22.2362.0
v1.21.2361.0
v1.21.1772.0
v1.20.11781.0
v1.21.1382.0
v1.20.11381.0
v1.21.1272.0
v1.20.11271.0
v1.20.11215.0
v1.19.11213.0
v1.20.10822.0
v1.19.10821.0
v1.20.10572.0
v1.19.10573.0
v1.20.10303.0
v1.19.10302.0
v1.18.10301.0
v1.20.10293.0
v1.19.10292.0
v1.18.10291.0
v1.18.3181.0
v1.19.3172.0
v1.19.2831.0
v1.18.2822.0
v1.19.2682.0
v1.18.2681.0
v1.18.1462.0
v1.17.11461.0
v1.18.1421.0
v1.17.11391.0
v1.17.11043.0
v1.16.10261.0
v1.17.1023
v1.16.10231.0
v1.15.3465.0
v1.16.3463.0
v1.15.2712.0
v1.15.2874.0
v1.16.2641.0
v1.16.2523.0
v1.15.2524.0
v1.15.2282.0
v1.14.2281.0
v1.14.1962.0
v1.15.2002.0
v1.15.2001.0
v1.15.1862.0
v1.14.1861.0
v1.14.1451.0
v1.14.1432.0
v1.13.11431.0
v1.13.10983.0
v1.12.10982.0
v1.13.10733.0
v1.12.10732.0
v1.13.10395.0
v1.12.10393.0
v1.13.10336.0
v1.12.10334.0
v1.12.3472.0
v1.11.3471.0
v1.12.2931.0
v1.12.2922.0
v1.11.2921.0
v1.11.2731.0
v1.10.2714.0
v1.11.2421.0
v1.10.2383.0
v1.10.1933.0
v1.9.1942.0
v1.9.1523.0
v1.8.1521.0
v1.9.1445.0
v1.8.1444.0
v1.8.1092.0
v1.7.1091.0
v1.8.1032.0
v1.7.1033.0
v1.7.572.0
v1.6.10571.0
v1.5.10411.0
v1.6.10412.0
v1.6.10272.0
v1.5.10271.0
v1.5.3242.0
v1.4.3243.0
v1.5.3142.0
v1.4.3141.0
v1.4.2652.0
v1.3.2651.0
v1.3.2382.0
v1.2.2381.0
v1.1.2233.0
v1.2.2234.0
v1.1.2021.0
v1.2.2022.0
v1.1.1812.0
v1.0.1811.0
v1.1.1671.0
v1.0.1401.0
v0.11.1333.0
v0.11.1251.0
v0.11.1191.0
v0.11.1111.0
v0.11.1121.0
v0.10.781.0
v0.10.761.0
v0.9.433.0
v0.8.10261.0
v0.8.10091.0
v0.7.3451.0
v0.7.3382.0
v0.7.3291.0
v0.7.3252.0
v0.6.3181.0
v0.6.2951.0
v0.6.2911.0
v0.5.2762.0
v0.5.2761.0
v0.5.2681.0
v0.5.2661.0
v0.3.2321.0
v0.4.2342.0
v0.4.2382.0
v0.3.2171.0
v0.3.2142.0
v0.2.1831.0
v0.2.1715.0
v0.2.1703.0
v0.1.1621.0
v0.1.1581.0
v0.1.1502.0
v0.1.1431.0
v0.1.1361.0
v0.1.1093.0
v0.1.1161.0
v0.1.1204.0
experiment-master
v0.1.1025.0
experiment-OutsideBuild
broken-tabstops
RS2-final
v0.1.1002.0
experiment-rel-windows-inbox
experiment-f-ServerApp
v0.1.1211.0
1904.29002
1810.02002
1708.14008
Labels
Clear labels
⛺ Reserved
A11yCO
A11yMAS
A11ySev1
A11ySev2
A11ySev3
A11yTTValidated
A11yUsable
A11yVoiceAccess
A11yWCAG
Area-Accessibility
Area-AtlasEngine
Area-AzureShell
Area-Build
Area-Build
Area-Chat
Area-CmdPal
Area-CodeHealth
Area-Commandline
Area-CookedRead
Area-DefApp
Area-Extensibility
Area-Fonts
Area-GroupPolicy
Area-i18n
Area-Input
Area-Interaction
Area-Interop
Area-Localization
Area-Output
Area-Performance
Area-Portable
Area-Quality
Area-Remoting
Area-Rendering
Area-Schema
Area-Server
Area-Settings
Area-SettingsUI
Area-ShellExtension
Area-ShellExtension
Area-ShellExtension
Area-Suggestions
Area-Suggestions
Area-TerminalConnection
Area-TerminalControl
Area-Theming
Area-UserInterface
Area-VT
Area-Windowing
Area-WPFControl
AutoMerge
Blocking-Ingestion
Culprit-Centennial
Culprit-WinUI
Disability-All
Disability-Blind
Disability-LowVision
Disability-Mobility
External-Blocked-WinUI3
Fixed
Gathering-Data
good first issue
HCL-E+D
HCL-WindowsTerminal
Help Wanted
Impact-Compatibility
Impact-Compliance
Impact-Correctness
Impact-Visual
In-PR
InclusionBacklog
InclusionBacklog-Windows TerminalWin32
InclusionCommitted-202206
Issue-Bug
Issue-Docs
Issue-Feature
Issue-Feature
Issue-Question
Issue-Samples
Issue-Scenario
Issue-Task
Needs-Attention
Needs-Author-Feedback
Needs-Bisect
Needs-Discussion
Needs-Repro
Needs-Tag-Fix
Needs-Tag-Fix
Needs-Triage
No-Recent-Activity
Priority-0
Priority-1
Priority-2
Priority-3
Product-Cmd.exe
Product-Colortool
Product-Colortool
Product-Colortool
Product-Conhost
Product-Conpty
Product-Meta
Product-Powershell
Product-Terminal
Product-WSL
pull-request
Resolution-Answered
Resolution-By-Design
Resolution-Duplicate
Resolution-External
Resolution-Fix-Available
Resolution-Fix-Committed
Resolution-No-Repro
Resolution-Won't-Fix
Severity-Blocking
Severity-Crash
Severity-DataLoss
spam
this-will-be-a-breaking-change
Tracking-External
WindowsTerminal_Win32
Work-Item
zAskModeBug
zInbox-Bug
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/terminal#14269
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @CoreyDotCom on GitHub (Jun 19, 2021).
Windows Terminal version (or Windows build number)
1.8.1521.0
Other Software
No response
Steps to reproduce
Using any command line utility that produces virtual terminal sequences for setting the colors of individual characters, the performance of the terminal drops by a factor of around 40.
To measure this effect precisely, you can use the F2 key in termbench and observe the performance difference between color-per-character output and single-color output:
https://github.com/cmuratori/termbench/releases/tag/V1
Expected Behavior
Despite the increased parsing load, modern CPUs should not have a problem parsing per-character color escape codes quickly. I would expect the performance of the terminal to be able to sustain roughly the same frame rate with per-character color codes as without, and if there was a performance drop, I wouldn't expect it to be anything close to 40x.
Actual Behavior
The speed of per-character color output is 40x slower than the speed of single-color output.
@CoreyDotCom commented on GitHub (Jun 19, 2021):
Note that this is a clone of https://github.com/microsoft/terminal/issues/10362 which was closed by original submitter. As the original bug report was valid it should have been remained open, especially after quite a few suggestions were provided as to how to improve matters. Feel free to reopen original tracking issue and close this duplicate if appropriate. Thank you for the work that you guys do on this project.
@DHowett commented on GitHub (Jun 19, 2021):
Thanks for re-opening this! It’s definitely valuable for us to be tracking it, and the ideas suggested in the original thread are good ones that are worth considering. We also have #10461 tracking specific requests from #10362.
@lhecker commented on GitHub (Jun 19, 2021):
Personally I'd like to also welcome @cmuratori and @mmozeiko back to give any comments if they wish to do so. Of course it'd be entirely understandable if they don't. I believe I can speak for the terminal team, when I say that we want to keep the door to our community open and welcome any civil discourse.
I see the comment regarding slow VT parsing again, but I hope you consider that performance of OpenConsole (aka future conhost) has already improved about 4-5x in the last year. With upcoming conhost versions, or the current OpenConsole, you can expect to see a throughput improvement from 4MB/s to about 16-20MB/s for termbench. I know this isn't 270MB/s, but it's a significant improvement regardless, despite keeping all the backwards-compatibility, etc.
For instance - referring to the mentioned offenders:
ATTR_ROW::InsertAttrRunswas entirely rewritten and doesn't allocatestd::vectors anymore in Certain pane zoom operations make the terminal go blank (#10099)_ViewportToStringdoesn't even exist anymore and was replaced in #5024We're now working on improving
_SetGraphicsRenditionRGBColorin #10426, which will improve performance for termbench by another 20-25%. FYI: @skyline75489 is working on this entirely in their spare time! (...and the PR is in fact not finished yet. It'll likely feature more improvements once it's done.)Here's a flamegraph of OpenConsole for termbench:

The render output thread is highlighted in blue.
_SetGraphicsRenditionRGBColoris being hovered.If you have concrete ideas what to improve (and optionally how) to speed up OpenConsole's VT performance further, please let us know and we'll get to it. Promise! Contributions are especially welcome at any time!
@mmozeiko commented on GitHub (Jun 19, 2021):
Is there a possibility we (outside of Microsoft) can get some documentation or specification on console driver interface -
\\Device\\ConDrv\\Server, structures incondrv.handconmsgl*.hfiles ?@DHowett commented on GitHub (Jun 19, 2021):
Fair question! We should definitely have some docs on the driver interface, since we're now an open source project that is using an underdocumented OS fixture...
Right now the best we have is in the ApiDispatcher and some of the "load bearing code" comments across the codebase. That's not great. I'll see what we can do about that!
@lhecker commented on GitHub (Jun 19, 2021):
@mmozeiko Sure! Let's continue that discussion here: #10463
@skyline75489 commented on GitHub (Jun 26, 2021):
I'm hiding this comment because some people find it dismissive and feel that I'm finding excuses. I'm honestly just trying to find the truth.
Thanks @CoreyDotCom for the interest in this particular issue. After days of researching & testing, I think I've come to a conclusion that I would like to share with everyone.
This is sadly not the truth at the moment. I've tested a bunch of terminals, including GNOME Terminal, rxvt, tilix and Alacritty (perhaps the fastest terminal emulator for the moment being), they both show significant performance drop with heavy VT load. See https://github.com/alacritty/alacritty/issues/5278 for details. The maintainer of Alacritty seems to concur with this conclusion: the performance drop with massive VT load is reasonable & expected.
I haven't got the chance to test terminals on macOS, because I feel iTerm2 is not really a terminal that focuses on performance (but on great functionalities). Please let me know if there's any terminal out there (whatever the platform) that's worth trying and I can take a look.
One of the suggestions has landed in #10426, but the performance improvement is not as impressive as mentioned in the original issue(3x), because the original code is flawed in a way that bypasses the worst case. The actual saving of CPU is ~8%.
Another suggestion regarding switching to glyph atlas approach is tracked in #10461. Do notice that Alacritty is already using similar approach as in glyph atlas. So the VT load might still be the bottleneck, even if we finished #10461. CC @lhecker to verify this.
@skyline75489 commented on GitHub (Jun 26, 2021):
I'm hiding this comment because some people find it dismissive and factually incorrect.
Modern AAA games also use up to all of CPU cores (with up to 100% load) and almost all of the GPU memory & computing power at its disposal. People don't really expect this kind of resource usage from a terminal application. One of the key goal of the terminal is I believe to minimize the resource usage.
There's of course many applications that's capable of drawing text, including browsers & word processors. But the uniqueness of the terminal is the way people sometimes use it for lots of changing text. Take termbench as an extreme example, it generates an entire window of changing characters, with changes happen in the content, the color & the background. If we actually use browser tech to handle this kind of workload, for example in Hyper, the result on my computer is not that ideal, either.
I'm not trying to diss Hyper of other similar products. Just want to clarity that browser can handle very complicated text layout smoothly, in a way that terminal can possibly never do. But at the same time, terminal never intend to be capable of handling the same amount of layout issues as browsers or Microsoft Word, because there's no practical meaning in it. Different type of applications, different type of workload. Everyone is happy.
The Windows console infrastructure will be improved as each Windows release. But the release cycle of Windows is complicated & slow. Majority of the complains in #10362 are related to a much older version of
cmd.exethan we currently have in this repo. The latest version ofOpenConsolewill ship with Windows Terminal. If people are using Windows Terminal, I think the "daily-usage applications" part should be fine.After all being said, I found most of the comments in #10362 valuable & meaningful. But I found no vicious tweet that provides helpful information.
@mmozeiko commented on GitHub (Jun 26, 2021):
What kind of argument is this?!? You are completely missing the point. Are you saying it is unfair to compare to AAA game because terminal should or cannot use same kind of power/load? If answer is yes - then this project is failing. Because it is doing exactly that - using 100% of same load/power as AAA game, but doing far simpler rendering. In fact it is actually using more - here's comparison running Overwatch.exe vs WindowsTerminal.exe with termbench: https://i.imgur.com/7VVWh9W.png who is using more cpu? As far as I can tell:
3.22+1.03 > 1.19Obviously terminal should not use 100% load of cpu core or gpu to render fullscreen of text. I have demonstrated that with real code (1000+fps rendering) which Casey also was explaining. Limit it to composition rate, and you'll have mostly idle cpu core.
And yes, sure the other part of code - actual layout of characters will take extra time. But doing that in fixed monospaced grid is far from complexity of text layout in browsers or word processors that you and others like to mention a lot. Like really really far away, super far away. Having extra constraints like that makes problem much simpler. Which Casey is working on, and in current state it can do much of unicode and still runs in sub-millisecond per frame (not completely finished, but there's no doubt it'll work with same kind of performance).
I may be saying things a bit out of line here - but if you don't know how hard (or easy) is to do text layout for unicode, then you should simply say that. Instead of claiming it is hard (because you don't know that). For example, I don't know that, because I've never done full-blown unicode rendering or looked into details. But I trust other people / expert opinion who have done it, and they say it is completely doable in this situation.
This sentence makes me upset way more than anything that was said before. Do you understand that any simple (not "modern AAA game") is outputting more than 2 MILLION pixels (on 1080p screen) that changes EVERY single frame and each of them can have UNIQUE color. That is more than 120 MILLION unique pixels per second. But here we are again still discussing why outputting something like 30 thousand of text characters difficult or unique...
@skyline75489 commented on GitHub (Jun 26, 2021):
I'm hiding this comment because it does not contain useful information for most people.
Yea I am suggesting that. Because it’s my honest opinion. If the project is failing because of this, I am actually OK with it. I don’t work for this team. I don’t get paid for this. I am doing this because I love to contribute to this project. I am only an outside contributor.
I admitted my mistake in #10461 about wrongly claiming text rendering is hard. I made faulty assumptions and I am not proud of it.
I am comparing the terminal with browsers & word processor, which all are text-oriented. My idea is simple, different types of applications, different workloads. So I’m not trying to compare the terminal with games. I gave an example in Hyper, which uses browser technology to render a terminal. I’d be more than happy to see the equivalent in modern games. I really mean this.
@mmozeiko i respect your knowledge in gaming development, which i have none. My idea could be wrong. And if my opinion is biased or wrong, I am glad to be corrected. If any of my words offended your personally, please let me know. I am kindly asking you to keep this discussion calm, civil & technical.
@lhecker commented on GitHub (Jun 26, 2021):
@skyline75489 @mmozeiko I've already built a prototype for unicode text rendering using a glyph atlas. I'm currently working on integrating it into our existing code in whatever time I can spare. The performance you get out of it is extremely impressive.
I'm doubtful that the comparison with Overwatch is anywhere near fair, especially if you showed a couple more columns there. But regardless, you certainly won't have to convince me to build it that way anymore, as I've been determined to build it that way for quite a while now.
All of this is and will be tracked #10461. And again I should mention that this isn't just to be considered, it's in fact on the backlog.
A performance drop of ~40x from maximum theoretical framerate, when drawing colored output using termbench, should always be considered expected, as termbench outputs about ~40x as much text, when coloring is enabled. I'm not saying we can't be even better than that, but it's logical that a drop like that should at least, in the most literal sense, be expected. I think it's loosely approximately the same drop in other terminals. We'll now just make sure that we don't drop the framerate below anything in the hundreds (or thousands?), because that's definitely something other terminals don't do.
Either way I feel like this discussion is starting to heat up again.
I'd like to note a couple things:
Anyways, as I said before, you won't have to convince me of it, the person who'll actually build it. I'm already convinced.
Instead this issue will be exclusively about VT performance and I'd like to exclusively see:
@nico-abram commented on GitHub (Jun 26, 2021):
To be clear: You are saying this can be the case for just the rendering part, but that it can be slower because of VT processing (Which as I understand it, happens mostly in conhost)?
Also, is it possible Alacritty (And all the other terminals you may have tried on windows) are being slowed down by an older version of conhost and slower processing of VT sequences in it than the current OpenConsole? (Possibly making it an unfair comparison)
@skyline75489 commented on GitHub (Jun 26, 2021):
@Nicholas-Baron I don’t quite get it what you are asking. I was testing those Linux terminals on barebone Linux machine.
This is not correct. I think you don’t quite know the full picture of ConPTY. VT processing happens in both conhost & Windows Terminal. This is also true with other terminals on Windows that uses ConPTY. If I have to guess the ratio, I’d probably say 60% in conhost and 40% in the terminal? Just a rough guess. Not precise numbers.
@Nicholas-Baron commented on GitHub (Jun 26, 2021):
@skyline75489, I think you have the wrong person.
@skyline75489 commented on GitHub (Jun 26, 2021):
Yep sorry. On my phone 😅. @nico-abram
@AnuthaDev commented on GitHub (Jul 4, 2021):
So, this might be of interest:
https://github.com/cmuratori/refterm
https://youtu.be/hxM8QmyZXtg
@lhecker commented on GitHub (Jul 4, 2021):
@AnuthaDev We‘re quite aware about the code and are extremely happy about what was created there. I mean it seriously: It sets a great goal for us to strive for.
Unfortunately the code is intentionally GPLv2 licensed and we‘ll honor this wish entirely. As such no one at Microsoft will ever look at either of the links.
I‘m the person who‘s tasked with building an equivalent solution and you may subscribe to https://github.com/microsoft/terminal/issues/10461 to get updates of my progress. Unfortunately our existing project isn’t straight forward to modify the same way we could build a terminal from scratch. A lot of parts of this project must be rewritten and as such it‘ll take a bit for us to catch up. But we will - it’s only a matter of time.
@AnuthaDev commented on GitHub (Jul 4, 2021):
@lhecker I appreciate your response :)
I know very little about licensing, but I believe the author can relicense their work, no?
So, maybe you can talk to the author about that🤔🤔
Though from the phrasing you used:
It doesn't seem like the author would be too keen on changing the license😬
Other than that, I appreciate the work of the terminal team😊 (and try to contribute what I can)
(Also: The linked video didn't mention anything about memory usage, I hope implementing a similar solution doesn't use unreasonable amounts of RAM)
@lhecker commented on GitHub (Jul 4, 2021):
@AnuthaDev I‘ve talked with the author before and they made it abundantly clear they don’t wish to ever speak with us again. They‘re entirely welcome to return and take part in this project‘s discourse of course… I‘d be delighted if that was the case!
I think I’ve got a pretty good plan to reduce the memory consumption to an absolute minimum. Once I can prove that it works in practice I‘ll scratch that concern off of the list in the other issue.
@skyline75489 commented on GitHub (Jul 4, 2021):
Thanks @AnuthaDev for the interest in this project!
As a witness/participant of the entire “extreme slow VT performance” affair, I found that it has turned into some sort of complete opposition against this project and the console team members (be it on Twitter or GitHub), which makes me feel very sad personally.
I fully believe that the intention behind #10362 is good. The author went through certain amount of effort and provided a reasonable suggestion. But due to the lacking of understanding, miscommunication happened, then it turned into a flame war between two groups of people. Every single sentence from the terminal people sounds like excuses. And people hate excuses.
At the end of the day, @lhecker took his time doing research and decided to take over the task to actually implement a better renderer. Mistakes are recognized. I have personally made false assumptions and so do other people. And I am sure no one is proud of their mistakes. After all these, some people still think that we at Microsoft are just so dumb and incompetent that we can’t make a proper terminal.
I am NOT an official member of the team. I can only speak on my own behalf. I think every contribution from everyone is welcomed here. But people do get defensive sometimes. I contribute to this project in my spare time for free. I am not getting paid. Yet I was harshly insulted on Twitter. You tell me how I might feel about it.
The official members of the team spend the last 5-6 years in this project. Despite all the discussions & comments everywhere, it’s up to them to actually improve this product. This isn’t just a hobby project. This is a commercial product which has a lots of regulation to follow, lots of limitations to suffer from. These sounds like excuses, but it’s the truth.
I totally get it how people can be frustrated. I was very frustrated with the terminal in the year 2019. Back then the performance is so bad that I can’t understand it. I personally filed several PRs to help improving the performance. As of today I think the terminal is performant enough for most cases. If you found it’s not fast enough for you, just file an issue.
In the end I am very sad about how this affair turned into. I am kindly asking people to be kind to each other and try to have the compassion & understanding when having conversations, to prevent it from becoming something even worse.
@AnuthaDev commented on GitHub (Jul 4, 2021):
@skyline75489 Well, whatever happened was unfortunate, so, let's just not focus on it.
And the terminal is already pretty fast for me (other than slow startup and shutdown, but I'm pretty sure that's just how XAML apps are), I only commented because I thought it could be useful for anyone trying to solve this problem...
@Kein commented on GitHub (Jul 4, 2021):
May be one day we will get terminal like this under Win* that rivals *nix one in performance while still being as feature rich. Until then, I guess, Windows Terminal is a compromise and a first stepstone in 20 years long journey.
@skyline75489 commented on GitHub (Jul 4, 2021):
@Kein the terminal showed in that video actually outperforms almost every single terminal out there, be it on Windows, Linux, or macOS. (Haven’t really test on macOS but I assume it’ll just be the same)
@orcmid commented on GitHub (Jul 4, 2021):
I failed to check on the license before I followed that project. And I know too much about licensing. I need to unfollow that effort and confine my study to MS Terminal. I appreciate the constraints that MS Devs must operate under.
The original copyright holder can offer dual licenses but there is an ideology factor here. The holder could even make a private commercial license, but that would clash with MS Terminal code in the open. When there are already multiple contributors and not a single copyright holder, even those variations become more difficult. The ideological posture is insurmountable.
@lackhoa commented on GitHub (Jul 5, 2021):
I'm not a lawyer but this seems like an off-topic rant?
@dmitriid commented on GitHub (Jul 5, 2021):
Let's see:
Something tells me that:
Also something tells me that the half-a-dozen to a dozen of Microsoft developers working on Windows terminal:
Instead, you complain that his code that he didn't even need to write to prove his point, is GPL v2. I'm afraid you're provinf his point tenfold.
@lhecker commented on GitHub (Jul 5, 2021):
@dmitriid You can read whatever you want into my message, but I wrote it in the most literal sense.
The fact that it's "intentionally" GPLv2 licensed (and us being banned from accessing the repository by GitHub) is important here, as this shows the "intention" that we're being kindly asked to not use it. I don't consider this something bad. He has every single right to do that and I might actually do the same in his shoes.
As such I consider your inflammatory comment as off-topic.
@alabuzhev commented on GitHub (Jul 16, 2021):
Maybe I'm missing something obvious, but why is this a problem?
There were discussions and youtube videos recently, demonstrating that conhost / WT are "slow" because piping gigabytes of text through them takes more time than through some other implementations.
But why would anyone in their right mind do that in the first place?
No one can read a gigabyte of text with their eyes, so why even bother printing it?
Just because you can, doesn’t mean you should.
Print a 50-character progress bar if you must and update it once per second, it's good enough.
Who cares whether it's 5 or 5000 FPS in a console application?
Don't get me wrong, I totally agree that things that could be fast should be fast and the code at least should not juggle with temporary strings, waste CPU cycles and heat the room.
But being correct is incomparably more important here than being fast, and by "being correct" I mean properly supporting Unicode, terminal features and all the existing conhost scenarios (yes, even if you don't like them and think they're redundant because *nix terminals never had them).
The current performance is generally acceptable outside of synthetic tests.
The correctness is... not so acceptable.
Improving performance for the sake of performance, now, at the expense of other areas, is hardly the right thing to do.
Just saying.
@bvisness commented on GitHub (Jul 16, 2021):
I believe this issue originally came up because performance was not acceptable in a real use case (building a small game in a terminal).
Generally though, when severe performance issues arise, it's important to spend some time addressing them. Severe slowdowns are rarely because a problem is fundamentally difficult; it's usually because something is wildly inefficient. Ideally, it's an isolated incident and you can make a quick fix. Less ideally, the issue arises out of the complexity of the system and is hard to address without sweeping changes. But if we're talking about a 100x to 1000x slowdown over a prototype solution, clearly that complexity is not inherent to the problem, and needs to be addressed.
So the work is worth doing either way. Either you get an easy win, or you tackle systemic issues that will hurt future work.
@skyline75489 commented on GitHub (Jul 16, 2021):
Thanks gentlemen for your insights of this particular issue. There's a lot of things done in the past month, and I think it's safe to say there will be more PRs targeted this area in the future (probably not from me, though).
There are too many discussions around the initial issue that some of them are largely deviated from what I think people should really care. Conhost is slow. WT is also relatively slow. That's why the initial issue came up. The old conhost is really really slow under heavy load. But in the meantime, both conhost and WT are also usable for most people under most scenarios. It's really not a black or white situation here.
We all want it to be fast, and I think we will try to make it faster without "the expense of other areas"
@nico-abram commented on GitHub (Jul 16, 2021):
I think this is a false dichotomy, you do not necessarily lose features or are less correct just by being faster. Even if that were the case of the renderer, you could let users choose (Since you mentioned the videos and unicode, it was claimed at multiple points in the videos that WT actually has worse support for unicode than the prototype from the demo)
As a data point, someone showed that a good bit of the slowdown shown in the video came from the windows SDK replacing newlines in text mode stdout output because it did a bytewise copy (Instead of something like a 64bit sized copy or even SIMD) here https://github.com/ojdkbuild/tools_toolchain_sdk10_17763/blob/master/Source/10.0.17763.0/ucrt/lowio/write.cpp#L399-L410 . Now, that's not a windows terminal specific problem, but it does affect the speed of stdout text mode output, and does not have any effect in "features" or "correctness". I can think of multiple scenarios where you can output a good bit of data into a terminal. If you have a program logging things to a terminal, it could at some point end up printing a huge amount of data (Of course, this might be unintended or a bug). Or you could accidentally cat the wrong file which turned out to be huge, or you could have an application that makes heavy use of VT codes (Like a terminal text adventure game with colors, or something like https://github.com/ecumene/rust-sloth ). Regardless, this mostly serves as a stress test, even if you're not outputting hundreds of megabytes, smaller payloads would also be faster, and I'm not 100% sure but it wouldn't surprise me if optimizations like these resulted in less power usage for laptops and the like.
I'm also not convinced that your argument about prioritizing features is right. Many performance issues are arquitectural and have far-reaching consequences. If you completely ignore performance in favor of "features", you can easily end in either a "death by a thousand cuts" situation (Like overuse of std::string resulting in lots and lots of copies all over the place (I'm not claiming that's the case for WT, just giving an example) ), or you can end up tied to some high level arquitecture/design that is way slower than it needs to be, and changing it has far-reaching consequences.
@zadjii-msft commented on GitHub (Jul 16, 2021):
I'm not gonna entertain more discussion of "is this valuable". Performance improvements are always valuable. The terminal is fast enough for most use cases, but not all, and we're gonna keep working on it.
Let's keep the discussion focused on concrete examples of how we can improve here. I'm gonna be very liberal with the "off topic" button here.
@skyline75489 commented on GitHub (Aug 18, 2021):
I've deleted my previous comment regarding the related works, because the content has become somewhat stale & outdated. Also I simply don't really want to remember the things from the past. It sometimes made me sick. If someone is still interested in this area, simply search for issues with the tag
Area-Performance.I was talking to someone and he made me realize that being silent is sometimes even worth than joining a fight. So I'm writing this to let people know that, the words you said on the Internet does have consequences. One of the consequences is that, I'm quitting this project as an outside contributor. I simply don't have the energy & fun any more. Being one of the active contributors specifically in the performance area, I was traumatized by some of the harsh words personally. And I can't fight back, because that would just backfire immediately. Quitting is my easy way out.
Rest assured, the official team members will continue their fantastic work to make WT faster & better everyday. In a way, everyone wins.
Mike, if you see this, maybe mark this as off-topic, I don't know. Do what you like. No hard feelings :).
Dustin, if you see this, I was only asking for that perspective because I was afraid that you might forget about me if I'm no longer active in this repo.
@ndwork commented on GitHub (Nov 2, 2021):
@lhecker If it takes longer to modify than it does to rewrite from scratch, why not just write a new one from scratch?
How much time are we talking about here? Muratori built his in less than two days. Your statement comes dangerously close to once again claiming the project is a doctoral thesis.
See a related comment from Muratori here:
https://twitter.com/cmuratori/status/1454152344522805249?s=20
@christianparpart commented on GitHub (Nov 2, 2021):
Valid question - but relevant? But keep in mind that backwards compatibility to legacy systems is still a thing and that rewriting the world is not always leading to more stable or faster code. This is usually a typical symptom for startups :)
Keep in mind that refterm is having fundamental design flaws. This two-day project is merely comparable to an improved in-game quake terminal, but not a terminal emulator. I would really like threads like these to stay focused, i.e. let's not even start talking about that on GH (use Twitter if you like). Let's keep github issues technically focused. I hope i'm not alone on that standpoint but I'd feel sincerely sad if threads have to be locked due to posts like these as then outsiders cannot give valuable feedback, that I still try to provide.
Unproven unfounded claims. Let's please not spam non-constructive links nor comments (anywhere, actually). :)
@dmitriid commented on GitHub (Nov 2, 2021):
@christianparpart
And those are?
If you followed refterm, you'd know it's not the case.
Let's. Casey Muratori built a renderer that supports the following, quote:
Quite a lot for "an improved in-game quake terminal", don't you think? And uses the same technologies that Windows Terminal uses: conhost etc. (as of v2 it doesn’t even try to bypass them).
They have been both proven and founded
Valuable feedback has been provided, with proof, and summarily dismissed. What you see is the inevitable fallout.
Of course a fully-featured terminal is more than just a renderer. But when a 20-person team at a trillion-dollar corporation can’t figure out how to render anything beyond ascii using the same techniques that one person used to implement everything in the list above, it makes you wonder, it does.
@christianparpart commented on GitHub (Nov 2, 2021):
I'll keep it short: try this with that design: https://twitter.com/iamc9p7/status/1454759288547811329 - again, let's make a full-stop here or otherwise I'm afraid this thread will be closed. If you'd like continue the discussion, just message me anywhere... else ;)
@dmitriid commented on GitHub (Nov 2, 2021):
@christianparpart
And those point at "fundamental design flaws" how, exactly? " Let's keep github issues technically focused. Unproven unfounded claims. Let's please not spam non-constructive links nor comments" ©
There's an implicit claim in there that implementing these codes will:
Each of these "but you cannot do something" have been debunked again and again by Casey implementing them. At some point you, or, you know, the 20-person team at the trillion dollar company is supposed to start paying him for doing their job.
@dmitriid commented on GitHub (Nov 2, 2021):
BTW. There's now a 5-part series on refterm over here: https://www.youtube.com/watch?v=pgoetgxecw8&list=PLEMXAbCVnmY6zCgpCFlgggRkrp0tpWfrn&index=1 It's not GPL, it doesn't show code, so even Microsoft emplyees can watch those without reprecussions.
@christianparpart commented on GitHub (Nov 2, 2021):
Just try to implement what I was asking for. I may surely be wrong. But sticking to the chosen design will make it really hard to implement any of these that I was asking for. - Just try it. let's stop chatting here and just try it. I am pretty sure everyone will welcome any actual contribution rather than just talking. I also know the 5-part series as part of his Kickstarter promotion. It's just describing what he did, not how to make that code implement what I was asking for or how to get real world terminal apps running. Just try it. And again, please email me with your concerns or through any other channel. This does not belong here.
@uspasojevic96 commented on GitHub (Nov 2, 2021):
Oh will you stfu already, here are the keypoints:
@lhecker commented on GitHub (Nov 2, 2021):
Please keep this issue focused on the technical aspects. I've only been working on this issue a few weeks so far. I hope you all understand that many other users had equally valid concerns and feature requests before this issue came up and had to be implemented first.
I'll let everyone know here once this situation has improved in Windows Terminal. I‘m aiming for the 1.13 Preview release in December for a first change with a new text renderer.
Before that I'd like to mention that this first change doesn’t solve the termbench performance issue entirely nor increases the text throughout to anything over 20MB/s yet. These issues require more iterations to iron out and I'm planning to improve that situation within next year. Building a new terminal from scratch isn’t an option due to strong compatibility/legacy concerns of course.
@ndwork commented on GitHub (Nov 2, 2021):
I am keeping this issue focused on technical aspects. Whether to work with a massive legacy code or start from scratch is a worthwhile technical question.
This doesn’t make sense to me. One can create something new that is backwards compatible. Actually, Microsoft has done this. Recall Word when *.docx replaced *.doc.
What backwards compatibility is causing the massive delay. Are these features desired? The purpose of terminal is (fundamentally) to display and receive text, is it not? How many lines of code are currently required to do this? Is this reasonable?
By your earlier statement, it would be easier to build a new one from scratch. Why not do that?
How many man hours will be required to create a terminal that compares to the performance of germbench? When do you expect to have such a terminal? Given that Muratori did this in less than 2 days, why is the extra time needed?
@DHowett commented on GitHub (Nov 2, 2021):
We certainly handled the original issue poorly, and we're trying to do better.
Casey showed us, with his own particular brand of "showing," that our terminal emulator could be more performant.
We may not have taken the feedback seriously to begin with, but if it appears to have been completely dismissed then I am sorry.
Since July, we've begun work on a new renderer implementing the improvements Casey suggested and removed a number of performance bottlenecks along the way (resulting in a ~30% speed improvement for bulk text output and a ~15% speed improvement for VT parsing.) Yes, we move slowly. Whether that is a reasonable cause for community ire is not something I intend to address.
To @ndwork's point: the question of "evolution versus revolution" is a worthwhile one to ask. Why do we care so much about keeping what we have and not stopping to rewrite it? I can only answer from my perspective as the engineering lead here.
Unlike other folks, I'm just not in it to kill the old and replace it with the new. That's never been a winning strategy, has it? Everybody else seems like they're rolling out a new rewrite every year, or every two years, that has 20% of the features of the original and the team pretty much shuts down when they hear that users are (quelle surprise!) dissatisfied with their great new thing.
I feel like our approach, while slow, is at least measured.
Now.
This is not really the appropriate venue to discuss:
It is the appropriate venue to discuss:
I'm leaving this issue unlocked. Let's work together to keep it on topic!
Edit log
@ndwork commented on GitHub (Nov 2, 2021):
Thank you for your response.
Why were so many comments deleted? It's hard to accept your communal statements when you discard so many of the comments. Indeed, it seems that my comment which you are addressing has been deleted. (Or, I don't really know how to use this messaging board, the comment is there, and I just don't see it.)
Perhaps the reason that the code is so difficult to improve is because of the dependencies. Is it the role of the Terminal to improve the console host? Or should Terminal just focus on being an excellent terminal. Which would serve Microsoft better? In my mind, retaining a manageable scope (making a good terminal) has much more valuable than minimally improving Windows by contributing to some massive underlying library.
Based on this idea, Apple would still be using slow Motorolla chips. Instead, they moved to Intel (which Microsoft still uses) and have just recently exceeded Intel's capabilities (for laptops) with their own chips. In my own work, I routinely destroy old codes and replace them with new. By doing so regularly, I never build up too much technical debt. Instead, it's paid off daily, and the codes naturally adapt. Having said that, I'm not a lead of a product at Microsoft used by gazillions; I cannot comment intelligently on your situation. There may be great reasons not to do so; based on the above, I don't understand those reasons. And when one programmer can exceed the performance of a Microsoft product by factors of hundreds with less than two days of programming, I would stare that fear of change in the face, ask exactly what you're afraid of, and is there a way to mitigate that consequence while still achieving. Perhaps limiting the scope of the terminal and eliminating its dependency on the console host is a reasonable approach.
I offer the following statement by Isaacson in the biography on Jobs:
“One of Job's business rules was to never be afraid of cannibalizing yourself. " If you don't cannibalize yourself, someone else will," he said. So even though an Iphone might cannibalize sales of an IPod, or an IPad might cannibalize sales of a laptop, that did not deter him.”
Again, thank you for your response.
@DHowett commented on GitHub (Nov 2, 2021):
Ah, I minimized the comments above before I locked the thread. They can be expanded with the "Show comment" link at the righthand side for now, but I'll also go through and unminimize some of them. Sorry!
I like that. You're right, of course. These are all really good points for us to think about. 😄
@plasticalligator commented on GitHub (Jan 7, 2024):
The year is 2024 and Microsoft is still run by clowns too busy having meeting after meeting about useless shit to actually get any real work done while adamantly refusing to allocate any actual funding or resources to anyone capable. Congratulations Microcosm, you have somehow managed to turn something as simple as the Terminal into an exemplary metaphor for the downfall of society and the decaying mess we call the American Dream.
Or in simpler language: please stop shipping broken as hell products you illiterate leaded gasoline huffing imbeciles.
@christianparpart commented on GitHub (Jan 7, 2024):
@plasticalligator I am a terminal emulator Developer myself (check Contour), since you mentioned a terminal to be "easy", I hereby invite you to contribute to make the product better.
I truly believe that one can only judge about a stone when having sat on it for at least three years. So let's work together and make the terminal world great again. Go fork the product (Windows terminal or mine if you like) and prove your point.
Other than that, please let's be polite by all means.
Happy New Year to y'all.