Console.Clear();
origRow = Console.CursorTop;
origCol = Console.CursorLeft;
+ Console.WriteLine("Press p to pause, r to resume, q to quit.");
- maxRow = origRow;
+ maxRow = origRow+1;
maxCol = origCol;
}
{
(int left, int row) = displayPosition[name];
Console.SetCursorPosition(left, row);
- Console.Write(new String(' ', 16));
+ Console.Write(new String(' ', 8));
Console.SetCursorPosition(left, row);
Console.Write(payload.GetValue());
private ConsoleWriter writer;
private CounterFilter filter;
private ulong _sessionId;
+ private bool pauseCmdSet;
+
public CounterMonitor()
{
writer = new ConsoleWriter();
filter = new CounterFilter();
+ pauseCmdSet = false;
}
private void Dynamic_All(TraceEvent obj)
{
+ // If we are paused, ignore the event.
+ // There's a potential race here between the two tasks but not a huge deal if we miss by one event.
+ if (pauseCmdSet)
+ {
+ return;
+ }
+
if (obj.EventName.Equals("EventCounters"))
{
IDictionary<string, object> payloadVal = (IDictionary<string, object>)(obj.PayloadValue(0));
source.Process();
});
+ Task commandTask = new Task(() =>
+ {
+ while(true)
+ {
+ while (!Console.KeyAvailable) { }
+ ConsoleKey cmd = Console.ReadKey(true).Key;
+ if (cmd == ConsoleKey.Q)
+ {
+ break;
+ }
+ else if (cmd == ConsoleKey.P)
+ {
+ pauseCmdSet = true;
+ }
+ else if (cmd == ConsoleKey.R)
+ {
+ pauseCmdSet = false;
+ }
+ }
+ });
+
monitorTask.Start();
-
- await monitorTask;
-
+ commandTask.Start();
+ await commandTask;
+
try
{
EventPipeClient.StopTracing(_processId, _sessionId);