in DiagManager/DiagClasses/DiagFactory.cs [254:325]
static List<DiagCategory> GetEventCategoryList (string XmlFile, string CatClause, string EventClause, EventType evtType)
{
List<DiagCategory> catList = new List<DiagCategory>();
XPathDocument traceDoc = new XPathDocument(XmlFile); //new XPathDocument("TraceEvents.xml");
XPathNavigator rootnav = traceDoc.CreateNavigator();
XPathNodeIterator iter = rootnav.Select(CatClause); //rootnav.Select("TraceEvents/EventType");
while (iter.MoveNext())
{
string catname = iter.Current.GetAttribute("name", "");
DiagCategory cat = new DiagCategory(iter.Current.Name, catname);
catList.Add(cat);
PopulateTemplateFeatureVersion(iter, cat);
XPathNodeIterator iterEvents = iter.Current.Select(EventClause); // iter.Current.Select("Event");
while (iterEvents.MoveNext())
{
string evtname = iterEvents.Current.GetAttribute("name", "");
DiagItem evt = null; //set to NULL because it will create child event for each type
if (evtType == EventType.TraceEvent)
{
string trcid = iterEvents.Current.GetAttribute("id", "");
TraceEvent trcevt = new TraceEvent(cat, iterEvents.Current.Name, evtname, trcid);
evt = trcevt;
}
else if (evtType == EventType.Perfmon)
{
evt = new DiagItem(cat, iterEvents.Current.Name, evtname);
}
else if (evtType == EventType.XEvent)
{
string evtpackage = iterEvents.Current.GetAttribute("package", "");
evt = new Xevent(cat, iterEvents.Current.Name, evtname, evtpackage);
//read field elements from eventfields section
XPathNodeIterator iterEventFields = iterEvents.Current.Select("eventfields/field");
while (iterEventFields.MoveNext())
{
string name = iterEventFields.Current.GetAttribute("name", "");
bool autoinclude = Convert.ToBoolean(iterEventFields.Current.GetAttribute("AutoInclude", ""));
bool isnum = Convert.ToBoolean(iterEventFields.Current.GetAttribute("IsNum", ""));
EventField evtField = new EventField(name, autoinclude, isnum);
(evt as Xevent).EventFieldList.Add(evtField);
}
//read action elements from eventactions section
XPathNodeIterator iterEventActions = iterEvents.Current.Select("eventactions/action");
while (iterEventActions.MoveNext())
{
string package = iterEventActions.Current.GetAttribute("package", "");
string name = iterEventActions.Current.GetAttribute("name", "");
EventAction evtAction = new EventAction(package, name);
(evt as Xevent).EventActionList.Add(evtAction);
}
}
else
{
throw new ArgumentException("GetEventCategoryList doesn't know how to handle this type of event yet");
}
PopulateTemplateFeatureVersion(iterEvents, evt);
cat.DiagEventList.Add(evt);
}
}
return catList;
}