From: Kevin Gosse Date: Fri, 18 Dec 2020 00:05:59 +0000 (+0100) Subject: Move caret back to the end when exiting (#1838) X-Git-Tag: submit/tizen/20210909.063632~17^2~248 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=33ef8811e7d50043e774268d3d8e9f1d9d7f8633;p=platform%2Fcore%2Fdotnet%2Fdiagnostics.git Move caret back to the end when exiting (#1838) * Move caret back to the end when exiting * Compute maxRow during AssignRowsAndInitializeDisplay * Address PR feedback --- diff --git a/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs b/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs index 16bdb0d86..e5c0cd6bc 100644 --- a/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs +++ b/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs @@ -37,6 +37,7 @@ namespace Microsoft.Diagnostics.Tools.Counters.Exporters public int Row { get; set; } // Assigned row for this counter. May change during operation. } + private readonly object _lock = new object(); private readonly Dictionary providers = new Dictionary(); // Tracks observed providers and counters. private const int Indent = 4; // Counter name indent size. private int maxNameLength = 40; // Allow room for 40 character counter names by default. @@ -46,6 +47,8 @@ namespace Microsoft.Diagnostics.Tools.Counters.Exporters private bool paused = false; private bool initialized = false; + private int maxRow = -1; + public void Initialize() { AssignRowsAndInitializeDisplay(); @@ -82,6 +85,8 @@ namespace Microsoft.Diagnostics.Tools.Counters.Exporters counter.Row = row++; } } + + maxRow = Math.Max(maxRow, row); } public void ToggleStatus(bool pauseCmdSet) @@ -97,62 +102,77 @@ namespace Microsoft.Diagnostics.Tools.Counters.Exporters public void CounterPayloadReceived(string providerName, ICounterPayload payload, bool pauseCmdSet) { - if (!initialized) + lock (_lock) { - initialized = true; - AssignRowsAndInitializeDisplay(); - } + if (!initialized) + { + initialized = true; + AssignRowsAndInitializeDisplay(); + } - if (pauseCmdSet) - { - return; - } + if (pauseCmdSet) + { + return; + } - string name = payload.GetName(); + string name = payload.GetName(); - bool redraw = false; - if (!providers.TryGetValue(providerName, out ObservedProvider provider)) - { - providers[providerName] = provider = new ObservedProvider(providerName); - redraw = true; - } + bool redraw = false; + if (!providers.TryGetValue(providerName, out ObservedProvider provider)) + { + providers[providerName] = provider = new ObservedProvider(providerName); + redraw = true; + } - if (!provider.Counters.TryGetValue(name, out ObservedCounter counter)) - { - string displayName = payload.GetDisplay(); - provider.Counters[name] = counter = new ObservedCounter(displayName); - maxNameLength = Math.Max(maxNameLength, displayName.Length); - redraw = true; - } + if (!provider.Counters.TryGetValue(name, out ObservedCounter counter)) + { + string displayName = payload.GetDisplay(); + provider.Counters[name] = counter = new ObservedCounter(displayName); + maxNameLength = Math.Max(maxNameLength, displayName.Length); + redraw = true; + } - const string DecimalPlaces = "###"; - string payloadVal = payload.GetValue().ToString("#,0." + DecimalPlaces, CultureInfo.CurrentCulture); - int decimalIndex = payloadVal.IndexOf(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, StringComparison.CurrentCulture); - if (decimalIndex == -1) - { - decimalIndex = payloadVal.Length; - } + const string DecimalPlaces = "###"; + string payloadVal = payload.GetValue().ToString("#,0." + DecimalPlaces, CultureInfo.CurrentCulture); + int decimalIndex = payloadVal.IndexOf(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, StringComparison.CurrentCulture); + if (decimalIndex == -1) + { + decimalIndex = payloadVal.Length; + } - if (decimalIndex > maxPreDecimalDigits) - { - maxPreDecimalDigits = decimalIndex; - redraw = true; - } + if (decimalIndex > maxPreDecimalDigits) + { + maxPreDecimalDigits = decimalIndex; + redraw = true; + } - if (redraw) - { - AssignRowsAndInitializeDisplay(); - } + if (redraw) + { + AssignRowsAndInitializeDisplay(); + } - Console.SetCursorPosition(Indent + maxNameLength + 1, counter.Row); - int prefixSpaces = maxPreDecimalDigits - decimalIndex; - int postfixSpaces = DecimalPlaces.Length - (payloadVal.Length - decimalIndex - 1); - Console.Write($"{new string(' ', prefixSpaces)}{payloadVal}{new string(' ', postfixSpaces)}"); + Console.SetCursorPosition(Indent + maxNameLength + 1, counter.Row); + int prefixSpaces = maxPreDecimalDigits - decimalIndex; + int postfixSpaces = DecimalPlaces.Length - (payloadVal.Length - decimalIndex - 1); + Console.Write($"{new string(' ', prefixSpaces)}{payloadVal}{new string(' ', postfixSpaces)}"); + } } public void Stop() { - // Nothing to do here. + lock (_lock) + { + if (initialized) + { + var row = maxRow; + + if (row > -1) + { + Console.SetCursorPosition(0, row); + Console.WriteLine(); + } + } + } } } }