/// <summary> /// /// </summary> private void InitGridSetting() { m_ListSetting = new TraceEventListSetting(); // providers if (m_Config.Providers != null) { foreach (EtwLogViewerConfig.ProviderConfig provider in m_Config.Providers) { m_ListSetting.Providers.Add(new EtwProvider(provider.FriendlyName, provider.Name, provider.ID)); } } // fields IDictionary <TraceEventFieldIndex, TraceEventField> allFields = TraceEventField.GetAllFields(m_ListSetting, TraceEventListSetting.DefaultColumnWidth); IDictionary <string, TraceEventPayload> allPayloads = new Dictionary <string, TraceEventPayload>(); if (m_Config.KnownPayloads != null) { foreach (string name in m_Config.KnownPayloads) { allPayloads[name] = new TraceEventPayload(name, TraceEventListSetting.DefaultColumnWidth); } } m_ListSetting.AddHideFields(allFields.Values); m_ListSetting.AddHideFields(allPayloads.Values); if (m_Config.Fields != null) { foreach (EtwLogViewerConfig.FieldConfig field in m_Config.Fields) { if (field.IsTraceEventField) { if (allFields.TryGetValue(field.GetTraceEventField(), out TraceEventField found)) { m_ListSetting.VisibleFields.Add(found); m_ListSetting.HideFields.Remove(found); found.SetWidth(field.Width); } } else if (field.IsTraceEventPayload) { if (allPayloads.TryGetValue(field.GetTraceEventPayload(), out TraceEventPayload found)) { m_ListSetting.VisibleFields.Add(found); m_ListSetting.HideFields.Remove(found); found.SetWidth(field.Width); } else { m_ListSetting.VisibleFields.Add(new TraceEventPayload(field.GetTraceEventPayload(), field.Width)); } } } } }
/// <summary> /// /// </summary> /// <param name="setting"></param> /// <returns></returns> private IDictionary <string, EtwProvider> GetProviders(TraceEventListSetting setting) { if (setting == null || setting.Providers == null) { return(new Dictionary <string, EtwProvider>()); } return(setting.Providers.ToDictionary(o => o.GetNameOrID())); }
/// <summary> /// /// </summary> /// <param name="gridView"></param> /// <param name="setting"></param> private void InitGridView(DataGridView gridView, TraceEventListSetting setting) { gridView.ReadOnly = true; gridView.MultiSelect = true; gridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; gridView.AllowUserToAddRows = false; gridView.AllowUserToDeleteRows = false; gridView.RowCount = 0; gridView.CellValueNeeded += GridView_CellValueNeeded; gridView.VirtualMode = true; InitGridViewFields(gridView, setting); }
/// <summary> /// /// </summary> /// <returns></returns> internal static EtwLogViewerConfig CreateDefault() { TraceEventListSetting listSetting = new TraceEventListSetting(); EtwLogViewerConfig config = new EtwLogViewerConfig(); // providers List <ProviderConfig> providers = new List <ProviderConfig>(); providers.Add(new ProviderConfig() { FriendlyName = "provider1", Name = "providerName1", ID = Guid.NewGuid() }); providers.Add(new ProviderConfig() { FriendlyName = "provider2", Name = "providerName2" }); providers.Add(new ProviderConfig() { FriendlyName = "provider3", ID = Guid.NewGuid() }); config.Providers = providers.ToArray(); // payloads config.KnownPayloads = new string[] { "payloadName1", "payloadName2", "payloadName3" }; // fields List <FieldConfig> fields = new List <FieldConfig>(); foreach (KeyValuePair <TraceEventFieldIndex, TraceEventField> field in TraceEventField.GetAllFields(listSetting, TraceEventListSetting.DefaultColumnWidth)) { fields.Add(new FieldConfig() { Name = field.Key.ToString(), Width = field.Value.GetWidth() }); } config.Fields = fields.ToArray(); return(config); }
/// <summary> /// /// </summary> /// <param name="gridView"></param> /// <param name="fields"></param> private void InitGridViewFields(DataGridView gridView, TraceEventListSetting setting) { m_Context.SetMaxTraceEventCount(setting.MaxRowCount); gridView.Columns.Clear(); foreach (ITraceEventField field in setting.VisibleFields) { int width = field.GetWidth(); if (width <= 0) { width = TraceEventListSetting.DefaultColumnWidth; } gridView.Columns[gridView.Columns.Add(field.GetCaption(), field.GetCaption())].Width = width; } gridView.RowCount = m_Context.CurrentTraceEventCount; gridView.Invalidate(); }
/// <summary> /// /// </summary> /// <param name="listView"></param> /// <param name="setting"></param> private void InitProviderList(ListView listView, TraceEventListSetting setting) { listView.BeginUpdate(); try { listView.Items.Clear(); foreach (EtwProvider provider in setting.Providers) { if (provider == null) { continue; } listView.Items.Add(CreateProviderListItem(provider)); } } finally { listView.EndUpdate(); } }
/// <summary> /// /// </summary> /// <param name="owner"></param> /// <param name="settings"></param> /// <returns></returns> internal DialogResult ShowDialog(IWin32Window owner, TraceEventListSetting settings) { try { ShowFieldList(lstUnselected, settings.HideFields); ShowFieldList(lstSelected, settings.VisibleFields); SetMaxRowCount(settings.MaxRowCount); DialogResult result = base.ShowDialog(owner); if (result == DialogResult.OK) { CopyItems(GetUnselectedFields(), settings.HideFields); CopyItems(GetSelectedFields(), settings.VisibleFields); settings.MaxRowCount = GetMaxRowCount(); } return(result); } finally { } }
/// <summary> /// /// </summary> /// <param name="setting"></param> /// <returns></returns> private IDictionary <TraceEventFieldIndex, Func <TraceEvent, object> > CreateFieldAccessors(TraceEventListSetting setting) { Dictionary <TraceEventFieldIndex, Func <TraceEvent, object> > accessors = new Dictionary <TraceEventFieldIndex, Func <TraceEvent, object> >(); accessors.Add(TraceEventFieldIndex.ActivityID, o => o.ActivityID); accessors.Add(TraceEventFieldIndex.Channel, o => o.Channel); accessors.Add(TraceEventFieldIndex.Dump, o => o.Dump()); accessors.Add(TraceEventFieldIndex.EventData, o => o.EventData()); accessors.Add(TraceEventFieldIndex.EventDataLength, o => o.EventDataLength); accessors.Add(TraceEventFieldIndex.EventIndex, o => o.EventIndex); accessors.Add(TraceEventFieldIndex.EventName, o => o.EventName); accessors.Add(TraceEventFieldIndex.EventTypeUserData, o => o.EventTypeUserData); accessors.Add(TraceEventFieldIndex.FormattedMessage, o => o.FormattedMessage); accessors.Add(TraceEventFieldIndex.ID, o => o.ID); accessors.Add(TraceEventFieldIndex.IsClassicProvider, o => o.IsClassicProvider); accessors.Add(TraceEventFieldIndex.Keywords, o => o.Keywords); accessors.Add(TraceEventFieldIndex.Level, o => o.Level); accessors.Add(TraceEventFieldIndex.Opcode, o => o.Opcode); accessors.Add(TraceEventFieldIndex.OpcodeName, o => o.OpcodeName); accessors.Add(TraceEventFieldIndex.PointerSize, o => o.PointerSize); accessors.Add(TraceEventFieldIndex.ProcessID, o => o.ProcessID); accessors.Add(TraceEventFieldIndex.ProcessName, o => o.ProcessName); accessors.Add(TraceEventFieldIndex.ProcessorNumber, o => o.ProcessorNumber); accessors.Add(TraceEventFieldIndex.ProviderGuid, o => o.ProviderGuid); accessors.Add(TraceEventFieldIndex.ProviderName, o => o.ProviderName); accessors.Add(TraceEventFieldIndex.RelatedActivityID, o => o.RelatedActivityID); accessors.Add(TraceEventFieldIndex.Source, o => o.Source); accessors.Add(TraceEventFieldIndex.Task, o => o.Task); accessors.Add(TraceEventFieldIndex.TaskName, o => o.TaskName); accessors.Add(TraceEventFieldIndex.ThreadID, o => o.ThreadID); accessors.Add(TraceEventFieldIndex.TimeStamp, o => o.TimeStamp); accessors.Add(TraceEventFieldIndex.TimeStampRelativeMSec, o => o.TimeStampRelativeMSec); accessors.Add(TraceEventFieldIndex.Version, o => o.Version); accessors.Add(TraceEventFieldIndex.Xml, delegate(TraceEvent o) { StringBuilder sb = new StringBuilder(); o.ToXml(sb); return(sb.ToString()); } ); accessors.Add(TraceEventFieldIndex.Payloads, delegate(TraceEvent o) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < o.PayloadNames.Length; ++i) { if (sb.Length > 0) { sb.Append("; "); } sb.AppendFormat("{0}={1}", o.PayloadNames[i], o.PayloadByName(o.PayloadNames[i])); } return(sb.ToString()); } ); IDictionary <string, EtwProvider> providers = GetProviders(setting); accessors.Add(TraceEventFieldIndex.ProviderFriendlyName, delegate(TraceEvent o) { EtwProvider provider; if (providers.TryGetValue(o.ProviderGuid.ToString(), out provider)) { return(provider.FriendlyName); } else if (providers.TryGetValue(o.ProviderName, out provider)) { return(provider.FriendlyName); } return(null); } ); return(accessors); }
/// <summary> /// /// </summary> /// <param name="setting"></param> internal TraceEventAccessor(TraceEventListSetting setting) { m_Setting = setting; m_FieldAccessors = CreateFieldAccessors(setting); }
/// <summary> /// /// </summary> /// <param name="setting"></param> /// <param name="defaultWidth"></param> /// <returns></returns> internal static IDictionary <TraceEventFieldIndex, TraceEventField> GetAllFields(TraceEventListSetting setting, int defaultWidth) { TraceEventAccessor accessor = new TraceEventAccessor(setting); Array enumFields = Enum.GetValues(typeof(TraceEventFieldIndex)); Dictionary <TraceEventFieldIndex, TraceEventField> fields = new Dictionary <TraceEventFieldIndex, TraceEventField>(enumFields.Length); for (int i = 0; i < enumFields.Length; ++i) { TraceEventFieldIndex enumField = (TraceEventFieldIndex)enumFields.GetValue(i); fields.Add(enumField, new TraceEventField(enumField, defaultWidth, accessor)); } return(fields); }