コード例 #1
0
 private static void DebugAddEvent(TimingMeter meter, MeterEvent evt)
 {
     if (evt.eventKind == ekEnter)
     {
         debugMeterStack.Add(new MeterStackEntry(meter, 0, debugMeterStack.Count));
     }
     else if (evt.eventKind == ekExit)
     {
         Debug.Assert(debugMeterStack.Count > 0, "Meter stack is empty during ekExit");
         MeterStackEntry s = debugMeterStack[debugMeterStack.Count - 1];
         Debug.Assert(s.meter == meter, "Entered " + s.meter.title + "; Exiting " + meter.title);
         debugMeterStack.RemoveAt(debugMeterStack.Count - 1);
     }
     else if (evt.eventKind == ekInfo)
     {
         // just ignore these
     }
     else
     {
         Debug.Assert(false);
     }
 }
コード例 #2
0
        protected void GenerateReport(StreamWriter writer, List <MeterEvent> events, int start, Dictionary <string, string> options)
        {
            // For now, ignore options and just print the events
            if (dumpEventLog)
            {
                DumpEventLog(events);
            }

            // Zero the stack depth and added time
            foreach (KeyValuePair <int, TimingMeter> pair in instance.metersById)
            {
                TimingMeter meter = pair.Value;
                meter.stackDepth = 0;
                meter.addedTime  = 0;
            }
            List <MeterStackEntry> meterStack = new List <MeterStackEntry>();
            int  indent         = 0;
            long firstEventTime = 0;

            for (int i = 0; i < events.Count; i++)
            {
                short kind = events[i].eventKind;
                long  t    = events[i].eventTime;
                if (i == 0)
                {
                    firstEventTime = t;
                }
                if (kind == ekInfo)
                {
                    writer.WriteLine(string.Format("{0,12:D}         {1}{2} {3}{4}",
                                                   ToMicroseconds(t - firstEventTime, i),
                                                   IndentCount(indent + 1), "Info ", " ",
                                                   events[i].info));
                    continue;
                }
                TimingMeter meter = GetMeterById(events[i].meterId);
                if (kind == ekEnter)
                {
                    if (meter.accumulate && meter.stackDepth == 0)
                    {
                        meter.addedTime = 0;
                    }
                    if (i >= start && (!meter.accumulate || meter.stackDepth == 0))
                    {
                        if (!meter.accumulate)
                        {
                            indent++;
                        }
                        writer.WriteLine(string.Format("{0,12:D}         {1}{2}{3}{4}.{5}",
                                                       ToMicroseconds(t - firstEventTime, i),
                                                       IndentCount(indent), "Enter",
                                                       (meter.accumulate ? "*" : " "),
                                                       meter.category, meter.title));
                    }
                    meter.stackDepth++;
                    meterStack.Add(new MeterStackEntry(meter, t, i));
                }
                else if (kind == ekExit)
                {
                    Debug.Assert(meterStack.Count > 0, "Meter stack is empty during ekExit");
                    MeterStackEntry s = meterStack[meterStack.Count - 1];
                    meter.stackDepth--;
                    Debug.Assert(s.meter == meter);
                    if (meter.stackDepth > 0 && meter.accumulate)
                    {
                        meter.addedTime += t - s.eventTime;
                    }
                    else if (i >= start)
                    {
                        writer.WriteLine(string.Format("{0,12:D} {1,7:D} {2}{3}{4}{5}.{6}",
                                                       ToMicroseconds(t - firstEventTime, i),
                                                       ToMicroseconds(meter.accumulate ? meter.addedTime : t - s.eventTime, i - s.eventNumber),
                                                       IndentCount(indent), "Exit ",
                                                       (meter.accumulate ? "*" : " "),
                                                       meter.category, meter.title));
                        if (!meter.accumulate)
                        {
                            indent--;
                        }
                    }
                    meterStack.RemoveAt(meterStack.Count - 1);
                }
            }
        }
コード例 #3
0
        protected void DumpEventLog(List <MeterEvent> events)
        {
            if (MeterEventsFile == null)
            {
                // Can't do anything
                return;
            }
            if (File.Exists(MeterEventsFile))
            {
                File.Delete(MeterEventsFile);
            }
            FileStream   f      = new FileStream(MeterEventsFile, FileMode.Create, FileAccess.Write);
            StreamWriter writer = new StreamWriter(f);

            writer.Write(string.Format("Dumping meter event log on {0} at {1}; GetTimestamp {2:F}; units are usecs\r\n",
                                       DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString(), costOfGetTimestamp));
            int indent = 0;
            List <MeterStackEntry> meterStack = new List <MeterStackEntry>();
            long firstEventTime = 0;

            for (int i = 0; i < events.Count; i++)
            {
                short kind = events[i].eventKind;
                long  t    = events[i].eventTime;
                if (i == 0)
                {
                    firstEventTime = t;
                }
                if (kind == ekInfo)
                {
                    writer.WriteLine(string.Format("{0,12:D}         {1}{2} {3}{4}",
                                                   ToMicroseconds(t - firstEventTime, i),
                                                   IndentCount(indent + 1), "Info ", " ",
                                                   events[i].info));
                    continue;
                }
                TimingMeter meter = GetMeterById(events[i].meterId);
                if (kind == ekEnter)
                {
                    indent++;
                    writer.WriteLine(string.Format("{0,12:D}         {1}{2} {3}.{4}",
                                                   ToMicroseconds(t - firstEventTime, i),
                                                   IndentCount(indent),
                                                   "Enter",
                                                   meter.category, meter.title));
                    meterStack.Add(new MeterStackEntry(meter, t, i));
                }
                else if (kind == ekExit)
                {
                    Debug.Assert(meterStack.Count > 0, "Meter stack is empty during ekExit");
                    MeterStackEntry s = meterStack[meterStack.Count - 1];
                    Debug.Assert(s.meter == meter, "Entered " + s.meter.title + "; Exiting " + meter.title);
                    writer.WriteLine(string.Format("{0,12:D} {1,7:D} {2}{3} {4}.{5}",
                                                   ToMicroseconds(t - firstEventTime, i),
                                                   ToMicroseconds(t - s.eventTime, i - s.eventNumber),
                                                   IndentCount(indent),
                                                   "Exit ",
                                                   meter.category, meter.title));
                    indent--;
                    meterStack.RemoveAt(meterStack.Count - 1);
                }
            }
            writer.Close();
        }