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) { bool pass = true; bool keepOutput = false; // Use the first arg as an output filename if there is one. string outputFilename = null; if (args.Length >= 1) { outputFilename = args[0]; keepOutput = true; } else { outputFilename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".netperf"; } try { Console.WriteLine("\tStart: Enable tracing."); TraceControl.EnableDefault(outputFilename); 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(outputFilename)) { 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); } finally { if (keepOutput) { Console.WriteLine("\n\tOutput file: {0}", outputFilename); } else { System.IO.File.Delete(outputFilename); } } return(100); }