Skip to content

Commit d75872f

Browse files
committed
Include progress in error and warning states.
1 parent c9f7ce5 commit d75872f

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

src/BenchmarkDotNet/Helpers/TaskbarProgress.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ internal void SetProgress(float progressValue)
5656
}
5757

5858
private void OnConsoleCancelEvent(object sender, ConsoleCancelEventArgs e)
59-
{
60-
Dispose();
61-
}
59+
=> Dispose();
6260

6361
public void Dispose()
6462
{
@@ -104,9 +102,7 @@ private interface ITaskbarList3
104102
[Guid("56FDF344-FD6D-11d0-958A-006097C9A090")]
105103
[ClassInterface(ClassInterfaceType.None)]
106104
[ComImport]
107-
private class TaskbarInstance
108-
{
109-
}
105+
private class TaskbarInstance { }
110106

111107
[DllImport("kernel32.dll")]
112108
private static extern IntPtr GetConsoleWindow();
@@ -141,17 +137,13 @@ private Com(IntPtr handle)
141137
}
142138

143139
internal void SetState(TaskbarProgressState taskbarState)
144-
{
145-
taskbarInstance.SetProgressState(consoleWindowHandle, taskbarState);
146-
}
140+
=> taskbarInstance.SetProgressState(consoleWindowHandle, taskbarState);
147141

148142
/// <summary>
149143
/// Sets the progress value out of 100.
150144
/// </summary>
151145
internal void SetValue(uint progressValue)
152-
{
153-
taskbarInstance.SetProgressValue(consoleWindowHandle, progressValue, 100);
154-
}
146+
=> taskbarInstance.SetProgressValue(consoleWindowHandle, progressValue, 100);
155147
}
156148

157149
private sealed class Terminal
@@ -185,11 +177,10 @@ private enum ConsoleModes : uint
185177
private const int STD_OUTPUT_HANDLE = -11;
186178

187179
private readonly IntPtr consoleHandle;
180+
private uint currentProgress;
188181

189182
private Terminal(IntPtr handle)
190-
{
191-
consoleHandle = handle;
192-
}
183+
=> consoleHandle = handle;
193184

194185
internal static Terminal? MaybeCreateInstanceAndSetInitialState(TaskbarProgressState initialTaskbarState)
195186
{
@@ -206,52 +197,61 @@ private Terminal(IntPtr handle)
206197
// If we try to write without VT mode, the sequence will be printed for the user to see, which clutters the output.
207198
return null;
208199
}
209-
SetStateThenRevertConsoleMode(handle, initialTaskbarState, previousConsoleMode);
210-
return new Terminal(handle);
200+
var terminal = new Terminal(handle);
201+
terminal.WriteStateSequence(initialTaskbarState);
202+
SetConsoleMode(handle, previousConsoleMode);
203+
return terminal;
211204
}
212205

213206
internal void SetState(TaskbarProgressState taskbarState)
214207
{
215208
GetConsoleMode(consoleHandle, out ConsoleModes previousConsoleMode);
216209
SetConsoleMode(consoleHandle, ConsoleModes.ENABLE_VIRTUAL_TERMINAL_PROCESSING | ConsoleModes.ENABLE_PROCESSED_OUTPUT);
217-
SetStateThenRevertConsoleMode(consoleHandle, taskbarState, previousConsoleMode);
210+
WriteStateSequence(taskbarState);
211+
SetConsoleMode(consoleHandle, previousConsoleMode);
218212
}
219213

220-
private static void SetStateThenRevertConsoleMode(IntPtr handle, TaskbarProgressState taskbarState, ConsoleModes previousConsoleMode)
214+
private void WriteStateSequence(TaskbarProgressState taskbarState)
221215
{
222216
// Write progress state to console for Windows Terminal (https://github.com/microsoft/terminal/issues/6700).
223217
switch (taskbarState)
224218
{
225219
case TaskbarProgressState.NoProgress:
220+
currentProgress = 100;
226221
Console.Write("\x1b]9;4;0;0\x1b\\");
227222
break;
228223
case TaskbarProgressState.Indeterminate:
224+
currentProgress = 100;
229225
Console.Write("\x1b]9;4;3;0\x1b\\");
230226
break;
231227
case TaskbarProgressState.Normal:
232-
// Do nothing, this is set automatically when SetValue is called (and WT has no documented way to set this).
228+
// Normal state is set when progress is set.
229+
WriteProgressSequence(currentProgress);
233230
break;
234231
case TaskbarProgressState.Error:
235-
Console.Write("\x1b]9;4;2;0\x1b\\");
232+
Console.Write($"\x1b]9;4;2;{currentProgress}\x1b\\");
236233
break;
237234
case TaskbarProgressState.Warning:
238-
Console.Write("\x1b]9;4;4;0\x1b\\");
235+
Console.Write($"\x1b]9;4;4;{currentProgress}\x1b\\");
239236
break;
240237
}
241-
SetConsoleMode(handle, previousConsoleMode);
242238
}
243239

244240
/// <summary>
245241
/// Sets the progress value out of 100.
246242
/// </summary>
247243
internal void SetValue(uint progressValue)
248244
{
245+
currentProgress = progressValue;
249246
// Write progress sequence to console for Windows Terminal (https://github.com/microsoft/terminal/discussions/14268).
250247
GetConsoleMode(consoleHandle, out ConsoleModes previousConsoleMode);
251248
SetConsoleMode(consoleHandle, ConsoleModes.ENABLE_VIRTUAL_TERMINAL_PROCESSING | ConsoleModes.ENABLE_PROCESSED_OUTPUT);
252-
Console.Write($"\x1b]9;4;1;{progressValue}\x1b\\");
249+
WriteProgressSequence(progressValue);
253250
SetConsoleMode(consoleHandle, previousConsoleMode);
254251
}
252+
253+
private static void WriteProgressSequence(uint progressValue)
254+
=> Console.Write($"\x1b]9;4;1;{progressValue}\x1b\\");
255255
}
256256
}
257257
}

0 commit comments

Comments
 (0)