Exemple #1
0
        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);
            }
        }
Exemple #3
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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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.");
                }
            }
        }
Exemple #7
0
        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;
        }