Esempio n. 1
0
        /// <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()));
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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();
        }
Esempio n. 6
0
        /// <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);
 }
Esempio n. 10
0
        /// <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);
        }