Skip to content

Commit

Permalink
Move taskbar logic to a class.
Browse files Browse the repository at this point in the history
  • Loading branch information
timcassell committed Oct 18, 2022
1 parent 060eded commit 35bbf66
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 24 deletions.
46 changes: 46 additions & 0 deletions src/BenchmarkDotNet/Helpers/Taskbar/TaskbarProgress.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Microsoft.WindowsAPICodePack.Taskbar;
using System;

namespace BenchmarkDotNet.Helpers
{
internal class TaskbarProgress : IDisposable
{
private IntPtr consoleWindowHandle = IntPtr.Zero;

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();

internal TaskbarProgress()
{
if (TaskbarManager.IsPlatformSupported)
{
consoleWindowHandle = GetConsoleWindow();
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal, consoleWindowHandle);
Console.CancelKeyPress += OnConsoleCancelEvent;
}
}

internal void SetProgress(int currentValue, int maximumValue)
{
if (consoleWindowHandle != IntPtr.Zero)
{
TaskbarManager.Instance.SetProgressValue(currentValue, maximumValue, consoleWindowHandle);
}
}

private void OnConsoleCancelEvent(object sender, ConsoleCancelEventArgs e)
{
Dispose();
}

public void Dispose()
{
if (consoleWindowHandle != IntPtr.Zero)
{
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress, consoleWindowHandle);
consoleWindowHandle = IntPtr.Zero;
Console.CancelKeyPress -= OnConsoleCancelEvent;
}
}
}
}
30 changes: 6 additions & 24 deletions src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
using BenchmarkDotNet.Toolchains.Parameters;
using BenchmarkDotNet.Toolchains.Results;
using BenchmarkDotNet.Validators;
using Microsoft.WindowsAPICodePack.Taskbar;
using Perfolizer.Horology;
using RunMode = BenchmarkDotNet.Jobs.RunMode;

Expand All @@ -34,13 +33,7 @@ internal static class BenchmarkRunnerClean

internal static readonly IResolver DefaultResolver = new CompositeResolver(EnvironmentResolver.Instance, InfrastructureResolver.Instance);

private static IntPtr ConsoleWindowHandle;
private static ConsoleCancelEventHandler OnConsoleCancelEvent = delegate {
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress, ConsoleWindowHandle);
};

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
private static TaskbarProgress s_taskbarProgress;

internal static Summary[] Run(BenchmarkRunInfo[] benchmarkRunInfos)
{
Expand All @@ -52,6 +45,9 @@ internal static Summary[] Run(BenchmarkRunInfo[] benchmarkRunInfos)
var resultsFolderPath = GetResultsFolderPath(rootArtifactsFolderPath, benchmarkRunInfos);
var logFilePath = Path.Combine(rootArtifactsFolderPath, title + ".log");

using var taskbarProgress = new TaskbarProgress();
s_taskbarProgress = taskbarProgress;

using (var streamLogger = new StreamLogger(GetLogFileStreamWriter(benchmarkRunInfos, logFilePath)))
{
var compositeLogger = CreateCompositeLogger(benchmarkRunInfos, streamLogger);
Expand Down Expand Up @@ -138,8 +134,7 @@ internal static Summary[] Run(BenchmarkRunInfo[] benchmarkRunInfos)
Cleanup(new HashSet<string>(artifactsToCleanup.Distinct()));
compositeLogger.Flush();

Console.CancelKeyPress -= OnConsoleCancelEvent;
ConsoleWindowHandle = IntPtr.Zero;
s_taskbarProgress = null;
}
}
}
Expand Down Expand Up @@ -244,10 +239,6 @@ private static Summary Run(BenchmarkRunInfo benchmarkRunInfo,
{
Console.Title = consoleTitle;
}
if (TaskbarManager.IsPlatformSupported)
{
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress, ConsoleWindowHandle);
}

var runEnd = runsChronometer.GetElapsed();

Expand Down Expand Up @@ -657,12 +648,6 @@ private static void UpdateTitle(int totalBenchmarkCount, int benchmarksToRunCoun
{
Console.Title = $"{benchmarksToRunCount}/{totalBenchmarkCount} Remaining";
}
if (TaskbarManager.IsPlatformSupported)
{
ConsoleWindowHandle = GetConsoleWindow();
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal, ConsoleWindowHandle);
Console.CancelKeyPress += OnConsoleCancelEvent;
}
}

private static void LogProgress(ILogger logger, in StartedClock runsChronometer, int totalBenchmarkCount, int benchmarksToRunCount)
Expand All @@ -678,10 +663,7 @@ private static void LogProgress(ILogger logger, in StartedClock runsChronometer,
{
Console.Title = $"{benchmarksToRunCount}/{totalBenchmarkCount} Remaining - {(int)fromNow.TotalHours}h {fromNow.Minutes}m to finish";
}
if (TaskbarManager.IsPlatformSupported)
{
TaskbarManager.Instance.SetProgressValue(executedBenchmarkCount, totalBenchmarkCount, ConsoleWindowHandle);
}
s_taskbarProgress.SetProgress(executedBenchmarkCount, totalBenchmarkCount);
}

private static TimeSpan GetEstimatedFinishTime(in StartedClock runsChronometer, int benchmarksToRunCount, int executedBenchmarkCount)
Expand Down

0 comments on commit 35bbf66

Please sign in to comment.