Change:
override append(message: string): void { this.write(message); <del> this.update(OutputChannelUpdateMode.Append); </del> <ins> this.update(OutputChannelUpdateMode.Append, undefined, this.isVisible()); </ins> } override replace(message: string): void { const till = this._offset; this.write(message); <del> this.update(OutputChannelUpdateMode.Replace, till); </del> <ins> this.update(OutputChannelUpdateMode.Replace, till, true); </ins> } private write(content: string): void {

Discussion:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: No (the issue is produced using CMake Tools extension) <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: Version: 1.68.1 (user setup) Commit: Date: 2022-06-14T12:48:58.283Z Electron: 17.4.7 Chromium: 98.0.4758.141 16.13.0 V8: 9.8.177.13-electron.0 OS: WindowsNT x64 6.3.9600 OS Version: Windows 8.1 When using the CMake Tools extension, the build output is shown in the "Output" tab. And when the build is going fast (when there are many build log lines per second), the Output doesn't update until the end of the build. See this video from https://user- The build output is not realtime. CMake Tools extension a project that builds fast (less than 200ms per build log line) main.c: Note: Build this CMake project using MSVC is faster and is more likely to reproduce the issue than building with clang/mingw.

After severals tests, I've found that: The VSCode log file (inside is constantly updated as expected, this can be checked with bash using The code that prevent the actual log to be printed in the Output pane is here: This code uses from here (with a default delay of 300ms): Which uses from here: And if I read this correctly, this means that: Due to IPC between CMake Tools extension and the main Code thread, for every log line, is called, and every call to that function will reset the Delayer timer of 200ms. This means that as long as there are log lines every at most 200ms, the output pane won't be updated. Which cause the "hang" as seen in the above video. I guess that replacing the from to a would solve that issue ?
Here are videos to compare the modification of using instead of for the variable in . Before modification (VSCode 1.68.1 unmodified): https://user- After modification (replaced the declaration of to , replaced call from to and removed call to ): https://user- The CPU usage is a bit higher, but the log is shown in realtime (the CPU is a intel i5 3230m from 2013). Closing the Output pane while building takes less CPU (around 48% instead of 53% (when not recording), when not building I'm at 6%).
Thanks for debugging it and coming up with the root cause. Your analysis is correct. But changing this to Throttler is not the right. We would still want to delay/debounce the updates if they do not need to be real time like log outputs. But for the output channels created by outputs we shall update the content immediately. Created a PR to fix it when immediate updates are needed like in this case.