[PR #6492] [MERGED] Update _TerminalCursorPositionChanged to use ThrottledFunc #26703

Open
opened 2026-01-31 09:17:38 +00:00 by claunia · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/microsoft/terminal/pull/6492
Author: @beviu
Created: 6/13/2020
Status: Merged
Merged: 6/23/2020
Merged by: @DHowett

Base: masterHead: tsf-redraw-throttlefunc


📝 Commits (8)

  • 482d757 Update _TerminalCursorPositionChanged to use ThrottledFunc
  • 3389c07 Update ThrottledArgFunc to use CoreDispatcher for convenience
  • eab8cba spelling
  • 48e404a Remove unused member
  • 92abce3 Modify ThrottleArgFunc so that it accepts multiple arguments and forwards them
  • 88fa2c2 Merge branch 'master' of https://github.com/microsoft/terminal into tsf-redraw-throttlefunc
  • 0fbcfc6 Use template specialization to unify ThrottledFunc and ThrottledArgsFunc
  • 885fbcd format

📊 Changes

7 files changed (+180 additions, -164 deletions)

View changed files

📝 src/cascadia/TerminalControl/TermControl.cpp (+29 -54)
📝 src/cascadia/TerminalControl/TermControl.h (+3 -7)
📝 src/cascadia/TerminalControl/TerminalControl.vcxproj (+1 -1)
📝 src/cascadia/TerminalControl/TerminalControl.vcxproj.filters (+1 -1)
src/cascadia/TerminalControl/ThreadSafeOptional.h (+0 -54)
src/cascadia/TerminalControl/ThrottledFunc.cpp (+54 -0)
📝 src/cascadia/TerminalControl/ThrottledFunc.h (+92 -47)

📄 Description

Summary of the Pull Request

  • Update _TerminalCursorPositionChanged to use ThrottledFunc.
  • Rename previous ThrottledFunc to ThrottledArgFunc because now ThrottledFunc is for functions that do not take an argument.
  • Update ThrottledFunc and ThrottledArgFunc to accept a CoreDispatcher on which the function should be called for convenience.
  • Don't use coroutines/winrt::fire_and_forget in ThrottledFunc/ThrottledArgFunc because they are too slow (see below).

Performance while displaying a lot of text, in Release mode:

Old code with coroutines:
image

New code without coroutines:
image

References

PR Checklist

  • Closes #xxx
  • CLA signed. If not, go over here and sign the CLA
  • Tests added/passed
  • Requires documentation to be updated
  • I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx

Detailed Description of the Pull Request / Additional comments

Validation Steps Performed


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/microsoft/terminal/pull/6492 **Author:** [@beviu](https://github.com/beviu) **Created:** 6/13/2020 **Status:** ✅ Merged **Merged:** 6/23/2020 **Merged by:** [@DHowett](https://github.com/DHowett) **Base:** `master` ← **Head:** `tsf-redraw-throttlefunc` --- ### 📝 Commits (8) - [`482d757`](https://github.com/microsoft/terminal/commit/482d757ffca30784a4548f04645a18d290f86963) Update _TerminalCursorPositionChanged to use ThrottledFunc - [`3389c07`](https://github.com/microsoft/terminal/commit/3389c078001abd781b2a8738af5b021ae0b0794d) Update ThrottledArgFunc to use CoreDispatcher for convenience - [`eab8cba`](https://github.com/microsoft/terminal/commit/eab8cbac948d54cbb87ca69d707cb428b6800ad3) spelling - [`48e404a`](https://github.com/microsoft/terminal/commit/48e404a1d69ae0e14ad9d27a6de08d5cff7cc53b) Remove unused member - [`92abce3`](https://github.com/microsoft/terminal/commit/92abce305710f303cadf226875167a585284052f) Modify ThrottleArgFunc so that it accepts multiple arguments and forwards them - [`88fa2c2`](https://github.com/microsoft/terminal/commit/88fa2c28aa336174b5e2b5b72a4863e1301e68d8) Merge branch 'master' of https://github.com/microsoft/terminal into tsf-redraw-throttlefunc - [`0fbcfc6`](https://github.com/microsoft/terminal/commit/0fbcfc6602ba77f56e84b69612867039cbfda1e7) Use template specialization to unify ThrottledFunc and ThrottledArgsFunc - [`885fbcd`](https://github.com/microsoft/terminal/commit/885fbcd660f039ef3675766eab284611b6464683) format ### 📊 Changes **7 files changed** (+180 additions, -164 deletions) <details> <summary>View changed files</summary> 📝 `src/cascadia/TerminalControl/TermControl.cpp` (+29 -54) 📝 `src/cascadia/TerminalControl/TermControl.h` (+3 -7) 📝 `src/cascadia/TerminalControl/TerminalControl.vcxproj` (+1 -1) 📝 `src/cascadia/TerminalControl/TerminalControl.vcxproj.filters` (+1 -1) ➖ `src/cascadia/TerminalControl/ThreadSafeOptional.h` (+0 -54) ➕ `src/cascadia/TerminalControl/ThrottledFunc.cpp` (+54 -0) 📝 `src/cascadia/TerminalControl/ThrottledFunc.h` (+92 -47) </details> ### 📄 Description <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request * Update _TerminalCursorPositionChanged to use ThrottledFunc. * Rename previous ThrottledFunc to ThrottledArgFunc because now ThrottledFunc is for functions that do not take an argument. * Update ThrottledFunc and ThrottledArgFunc to accept a CoreDispatcher on which the function should be called for convenience. * Don't use coroutines/winrt::fire_and_forget in ThrottledFunc/ThrottledArgFunc because they are too slow (see below). Performance while displaying a lot of text, in Release mode: Old code with coroutines: ![image](https://user-images.githubusercontent.com/56923875/84574471-ee280d00-ada6-11ea-9332-2b2d48d3c356.png) New code without coroutines: ![image](https://user-images.githubusercontent.com/56923875/84574614-c71e0b00-ada7-11ea-9c92-fce573058413.png) <!-- Other than the issue solved, is this relevant to any other issues/existing PRs? --> ## References <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist * [ ] Closes #xxx * [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA * [ ] Tests added/passed * [ ] Requires documentation to be updated * [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
claunia added the pull-request label 2026-01-31 09:17:38 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#26703