public async Task<EventPipeSession> StartEventPipeSession(IEnumerable<EventPipeProvider> providers, TimeSpan timeout) { if (_useAsync) { CancellationTokenSource cancellation = new CancellationTokenSource(timeout); return await _client.StartEventPipeSessionAsync(providers, true, circularBufferMB: 256, cancellation.Token).ConfigureAwait(false); } else { return _client.StartEventPipeSession(providers); } }
public void EventPipeSessionUnavailableTest() { List <int> pids = new List <int>(DiagnosticsClient.GetPublishedProcesses()); int arbitraryPid = 1; DiagnosticsClient client = new DiagnosticsClient(arbitraryPid); Assert.Throws <ServerNotAvailableException>(() => client.StartEventPipeSession(new List <EventPipeProvider>() { new EventPipeProvider("Microsoft-Windows-DotNETRuntime", EventLevel.Informational) })); }
public void StartEventPipeSessionWithSingleProviderTest() { using TestRunner runner = new TestRunner(CommonHelper.GetTraceePathWithArgs(), output); runner.Start(timeoutInMSPipeCreation: 3000); DiagnosticsClient client = new DiagnosticsClient(runner.Pid); using (var session = client.StartEventPipeSession(new EventPipeProvider("Microsoft-Windows-DotNETRuntime", EventLevel.Informational))) { Assert.True(session.EventStream != null); } runner.Stop(); }
public void BasicEventPipeSessionTest() { TestRunner runner = new TestRunner(CommonHelper.GetTraceePath(), output); runner.Start(3000); DiagnosticsClient client = new DiagnosticsClient(runner.Pid); using (var session = client.StartEventPipeSession(new List <EventPipeProvider>() { new EventPipeProvider("Microsoft-Windows-DotNETRuntime", EventLevel.Informational) })) { Assert.True(session.EventStream != null); } runner.Stop(); }
public void EventPipeSessionStreamTest() { TestRunner runner = new TestRunner(CommonHelper.GetTraceePathWithArgs(), output); runner.Start(3000); DiagnosticsClient client = new DiagnosticsClient(runner.Pid); runner.PrintStatus(); output.WriteLine($"[{DateTime.Now.ToString()}] Trying to start an EventPipe session on process {runner.Pid}"); using (var session = client.StartEventPipeSession(new List <EventPipeProvider>() { new EventPipeProvider("System.Runtime", EventLevel.Informational, 0, new Dictionary <string, string>() { { "EventCounterIntervalSec", "1" } }) })) { var evntCnt = 0; Task streamTask = Task.Run(() => { var source = new EventPipeEventSource(session.EventStream); source.Dynamic.All += (TraceEvent obj) => { output.WriteLine("Got an event"); evntCnt += 1; }; try { source.Process(); } catch (Exception e) { // This exception can happen if the target process exits while EventPipeEventSource is in the middle of reading from the pipe. Console.WriteLine("Error encountered while processing events"); Console.WriteLine(e.ToString()); } finally { runner.Stop(); } }); output.WriteLine("Waiting for stream Task"); streamTask.Wait(10000); output.WriteLine("Done waiting for stream Task"); Assert.True(evntCnt > 0); } }
/// <summary> /// Verifies that a client can handle multiple operations simultaneously. /// </summary> private async Task VerifySingleSession(IpcEndpointInfo info) { await VerifyWaitForConnection(info); var client = new DiagnosticsClient(info.Endpoint); _outputHelper.WriteLine($"{info.RuntimeInstanceCookie}: Creating session #1."); var providers = new List <EventPipeProvider>(); providers.Add(new EventPipeProvider( "System.Runtime", EventLevel.Informational, 0, new Dictionary <string, string>() { { "EventCounterIntervalSec", "1" } })); using var session = client.StartEventPipeSession(providers); _outputHelper.WriteLine($"{info.RuntimeInstanceCookie}: Verifying session produces events."); await VerifyEventStreamProvidesEventsAsync(info, session, 1); _outputHelper.WriteLine($"{info.RuntimeInstanceCookie}: Session verification complete."); }