static int Main(string[] args) { using (var netPerfFile = NetPerfFile.Create(args)) { SimpleEventSource eventSource = new SimpleEventSource(); Console.WriteLine("\tStart: Enable tracing."); TraceControl.Enable(GetConfig(eventSource, netPerfFile.Path)); Console.WriteLine("\tEnd: Enable tracing.\n"); Console.WriteLine("\tStart: Messaging."); // Send messages // Use random numbers and addition as a simple, human readble checksum Random generator = new Random(); for (int i = 0; i < messageIterations; i++) { int x = generator.Next(1, 1000); int y = generator.Next(1, 1000); string formula = String.Format("{0} + {1} = {2}", x, y, x + y); eventSource.MathResult(x, y, x + y, formula); } Console.WriteLine("\tEnd: Messaging.\n"); Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); FileInfo outputMeta = new FileInfo(netPerfFile.Path); Console.WriteLine("\tCreated {0} bytes of data", outputMeta.Length); return(outputMeta.Length > trivialSize ? 100 : -1); } }
static int Main(string[] args) { using (var netPerfFile = NetPerfFile.Create(args)) { Console.WriteLine("\tStart: Enable tracing."); TraceControl.EnableDefault(netPerfFile.Path); Console.WriteLine("\tEnd: Enable tracing.\n"); Console.WriteLine("\tStart: Allocation."); // Allocate for allocIterations iterations. for (int i = 0; i < allocIterations; i++) { GC.KeepAlive(new object()); } Console.WriteLine("\tEnd: Allocation.\n"); Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); FileInfo outputMeta = new FileInfo(netPerfFile.Path); Console.WriteLine("\tExpecting at least {0} bytes of data", trivialSize); Console.WriteLine("\tCreated {0} bytes of data", outputMeta.Length); return(outputMeta.Length > trivialSize ? 100 : 0); } }
public static int Main(string[] args) { // Additional assemblies will be seen, but these are ones we must see string[] AssembliesExpected = new string[] { "rundown", // this assembly "System.Runtime", "Microsoft.Diagnostics.Tracing.TraceEvent", "System.Diagnostics.Tracing", "System.Private.CoreLib" }; using (var netPerfFile = NetPerfFile.Create(args)) { Console.WriteLine("\tStart: Enable tracing."); TraceControl.EnableDefault(netPerfFile.Path); Console.WriteLine("\tEnd: Enable tracing.\n"); // Since all we care about is rundown, there is nothing to do there Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); Console.WriteLine("\tStart: Process the trace file."); var assembliesLoaded = new HashSet <string>(); int nonMatchingEventCount = 0; using (var trace = TraceEventDispatcher.GetDispatcherFromFileName(netPerfFile.Path)) { var rundownParser = new ClrRundownTraceEventParser(trace); rundownParser.LoaderAssemblyDCStop += delegate(AssemblyLoadUnloadTraceData data) { var nameIndex = Array.IndexOf(data.PayloadNames, ("FullyQualifiedAssemblyName")); if (nameIndex >= 0) { // Add the assembly name to a set to verify later assembliesLoaded.Add(((string)data.PayloadValue(nameIndex)).Split(',')[0]); } else { nonMatchingEventCount++; } }; trace.Process(); } Console.WriteLine("\tEnd: Processing events from file.\n"); foreach (var name in AssembliesExpected) { Assert.True($"Assembly {name} in loaded assemblies", assembliesLoaded.Contains(name)); } Assert.Equal(nameof(nonMatchingEventCount), nonMatchingEventCount, 0); } return(100); }
public static int Main(string[] args) { using (var netPerfFile = NetPerfFile.Create(args)) { Console.WriteLine("\tStart: Enable tracing."); TraceControl.EnableDefault(netPerfFile.Path); Console.WriteLine("\tEnd: Enable tracing.\n"); Console.WriteLine("\tStart: Generate some events."); DynamicallyCompiledMethodInvoker invoker = BuildDynamicMethod(); invoker.Invoke(); Console.WriteLine("\tEnd: Generate some events.\n"); Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); Console.WriteLine("\tStart: Process the trace file."); int matchingEventCount = 0; int nonMatchingEventCount = 0; using (var trace = TraceEventDispatcher.GetDispatcherFromFileName(netPerfFile.Path)) { string methodNamespace = "dynamicClass"; string methodName = "DynamicallyCompiledMethod"; string methodSignature = "void ()"; string providerName = "Microsoft-Windows-DotNETRuntime"; string gcTriggeredEventName = "Method/JittingStarted"; trace.Clr.MethodJittingStarted += delegate(MethodJittingStartedTraceData data) { if (methodNamespace.Equals(data.MethodNamespace) && methodName.Equals(data.MethodName) && methodSignature.Equals(data.MethodSignature) && providerName.Equals(data.ProviderName) && gcTriggeredEventName.Equals(data.EventName)) { matchingEventCount++; } }; trace.Process(); } Console.WriteLine("\tEnd: Processing events from file.\n"); // CompiledMethod Assert.Equal(nameof(matchingEventCount), matchingEventCount, 1); } return(100); }
public static int Main(string[] args) { using (var netPerfFile = NetPerfFile.Create(args)) { Console.WriteLine("\tStart: Enable tracing."); TraceControl.EnableDefault(netPerfFile.Path); Console.WriteLine("\tEnd: Enable tracing.\n"); Console.WriteLine("\tStart: Generate some events."); for (int i = 0; i < InducedGCIterations; i++) { GC.Collect(); } Console.WriteLine("\tEnd: Generate some events.\n"); Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); Console.WriteLine("\tStart: Process the trace file."); int matchingEventCount = 0; int nonMatchingEventCount = 0; using (var trace = TraceEventDispatcher.GetDispatcherFromFileName(netPerfFile.Path)) { string gcReasonInduced = GCReason.Induced.ToString(); string providerName = "Microsoft-Windows-DotNETRuntime"; string gcTriggeredEventName = "GC/Triggered"; trace.Clr.GCTriggered += delegate(GCTriggeredTraceData data) { if (gcReasonInduced.Equals(data.Reason.ToString()) && providerName.Equals(data.ProviderName) && gcTriggeredEventName.Equals(data.EventName)) { matchingEventCount++; } else { nonMatchingEventCount++; } }; trace.Process(); } Console.WriteLine("\tEnd: Processing events from file.\n"); Assert.Equal(nameof(matchingEventCount), InducedGCIterations, matchingEventCount); Assert.Equal(nameof(nonMatchingEventCount), nonMatchingEventCount, 0); } return(100); }
private static void RoundTwo(string[] args) { using (var netPerfFile = NetPerfFile.Create(args)) { using (var etlFile = EtlFile.Create(args)) { Console.WriteLine("\tStart: Enable EventPipe."); TraceControl.Enable(EventPipeGetConfig(EventPipeAndEtwEventSource.Log, EventPipeAndEtwEventSource.Keywords.EventPipeKeyword, netPerfFile.Path)); Console.WriteLine("\tEnd: Enable EventPipe.\n"); Console.WriteLine("\tStart: Enable ETW."); TraceEventSession etwSession = EnableETW(EventPipeAndEtwEventSource.Log, EventPipeAndEtwEventSource.Keywords.EtwKeyword, etlFile.Path); Console.WriteLine("\tEnd: Enable ETW.\n"); WriteAllEvents(EventPipeAndEtwEventSource.Log); Console.WriteLine("\tStart: Disable EventPipe."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable EventPipe.\n"); WriteAllEvents(EventPipeAndEtwEventSource.Log); Console.WriteLine("\tStart: Disable ETW."); DisableETW(etwSession); Console.WriteLine("\tEnd: Disable ETW.\n"); Console.WriteLine("\tStart: Processing events from EventPipe file."); EventResults eventPipeResults = new EventResults(); EventResults etwResults = new EventResults(); using (var trace = new TraceLog(TraceLog.CreateFromEventPipeDataFile(netPerfFile.Path)).Events.GetSource()) { trace.Dynamic.All += delegate(TraceEvent data) { eventPipeResults.AddEvent(data); }; trace.Process(); } // Validate EventPipe results. eventPipeResults.Print("EventPipe Results:"); Assert.Equal("EventPipeEvent1Count", eventPipeResults.Event1Count, 1); Assert.Equal("EventPipeEvent2Count", eventPipeResults.Event2Count, 0); Assert.Equal("EventPipeEvent3Count", eventPipeResults.Event3Count, 1); Console.WriteLine("\tEnd: Processing events from EventPipe file.\n"); Console.WriteLine("\tStart: Processing events from ETW file."); using (var trace = new ETWTraceEventSource(etlFile.Path)) { trace.Dynamic.All += delegate(TraceEvent data) { etwResults.AddEvent(data); }; trace.Process(); } // Validate ETW results. etwResults.Print("ETW Results:"); Assert.Equal("EventPipeEvent1Count", etwResults.Event1Count, 0); Assert.Equal("EventPipeEvent2Count", etwResults.Event2Count, 2); Assert.Equal("EventPipeEvent3Count", etwResults.Event3Count, 2); Console.WriteLine("\tEnd: Processing events from ETW file."); } } }
static int Main(string[] args) { bool pass = true; using (SimpleEventSource eventSource = new SimpleEventSource()) { using (var netPerfFile = NetPerfFile.Create(args)) { Console.WriteLine("\tStart: Enable tracing."); TraceControl.Enable(GetConfig(eventSource, netPerfFile.Path)); Console.WriteLine("\tEnd: Enable tracing.\n"); Console.WriteLine("\tStart: Messaging."); // Send messages // Use random numbers and addition as a simple, human readble checksum Random generator = new Random(); for (int i = 0; i < messageIterations; i++) { int x = generator.Next(1, 1000); int y = generator.Next(1, 1000); string formula = String.Format("{0} + {1} = {2}", x, y, x + y); eventSource.MathResult(x, y, x + y, formula); } Console.WriteLine("\tEnd: Messaging.\n"); Console.WriteLine("\tStart: Disable tracing."); TraceControl.Disable(); Console.WriteLine("\tEnd: Disable tracing.\n"); Console.WriteLine("\tStart: Processing events from file."); int msgCount = 0; using (var trace = new TraceLog(TraceLog.CreateFromEventPipeDataFile(netPerfFile.Path)).Events.GetSource()) { var names = new HashSet <string>(); trace.Dynamic.All += delegate(TraceEvent data) { if (!names.Contains(data.ProviderName)) { Console.WriteLine("\t{0}", data.ProviderName); names.Add(data.ProviderName); } if (data.ProviderName == "SimpleEventSource") { msgCount += 1; } }; trace.Process(); } Console.WriteLine("\tEnd: Processing events from file.\n"); Console.WriteLine("\tProcessed {0} events from EventSource", msgCount); pass &= msgCount == messageIterations; } } return(pass ? 100 : 0); }
public static int Main(string[] args) { using (NetPerfFile file = NetPerfFile.Create(args)) { EventSourceTestSuite suite = new EventSourceTestSuite(file); suite.AddEventSource(ManifestEventSource.Log); suite.AddEventSource(TraceLoggingEventSource.Log); suite.AddTest(new EventSourceTest("ManifestEmptyEvent", delegate() { ManifestEventSource.Log.EmptyEvent(); }, delegate(TraceEvent eventData) { Assert.Equal("ProviderName", ManifestEventSource.Log.Name, eventData.ProviderName); Assert.Equal("EventName", "EmptyEvent", eventData.EventName); Assert.Equal("PayloadCount", 0, eventData.PayloadNames.Length); })); suite.AddTest(new EventSourceTest("TraceLoggingEmptyEvent", delegate() { TraceLoggingEventSource.Log.EmptyEvent(); }, delegate(TraceEvent eventData) { Assert.Equal("ProviderName", TraceLoggingEventSource.Log.Name, eventData.ProviderName); Assert.Equal("EventName", "EmptyEvent", eventData.EventName); Assert.Equal("PayloadCount", 0, eventData.PayloadNames.Length); })); suite.AddTest(new EventSourceTest("ManifestIntString", delegate() { ManifestEventSource.Log.IntStringEvent(42, "Hello World!"); }, delegate(TraceEvent eventData) { Assert.Equal("ProviderName", ManifestEventSource.Log.Name, eventData.ProviderName); Assert.Equal("EventName", "IntStringEvent", eventData.EventName); Assert.Equal("PayloadCount", 2, eventData.PayloadNames.Length); Assert.Equal("i", 42, (int)eventData.PayloadValue(0)); Assert.Equal("s", "Hello World!", (string)eventData.PayloadValue(1)); })); suite.AddTest(new EventSourceTest("TraceLoggingIntString", delegate() { TraceLoggingEventSource.Log.IntStringEvent(42, "Hello World!"); }, delegate(TraceEvent eventData) { Assert.Equal("ProviderName", TraceLoggingEventSource.Log.Name, eventData.ProviderName); Assert.Equal("EventName", "IntStringEvent", eventData.EventName); Assert.Equal("PayloadCount", 2, eventData.PayloadNames.Length); Assert.Equal("i", 42, (int)eventData.PayloadValue(0)); Assert.Equal("s", "Hello World!", (string)eventData.PayloadValue(1)); })); suite.RunTests(); } return 100; }