Example #1
0
        private static unsafe void Warmup(TraceLogFilterPredicate predicate)
        {
            var record = new EVENT_RECORD();
            var info   = new TRACE_EVENT_INFO();

            predicate((IntPtr)(&record), (IntPtr)(&info), (UIntPtr)Marshal.SizeOf <TRACE_EVENT_INFO>());
        }
Example #2
0
        public unsafe TraceEventInfoCPtr Build()
        {
            var strings = new[] {
                ProviderName,
                LevelName,
                ChannelName,
                KeywordsName,
                TaskName,
                OpcodeName,
                EventMessage,
                ProviderMessage,
                ActivityIDName,
                RelatedActivityIDName
            };

            var size = sizeof(TRACE_EVENT_INFO);

            size += sizeof(EVENT_PROPERTY_INFO) * Math.Max(0, (int)PropertyCount - 1);
            int stringsOffset = size;

            foreach (var s in strings)
            {
                if (!string.IsNullOrEmpty(s))
                {
                    size += (s.Length + 1) * 2;
                }
            }

            var info = (TRACE_EVENT_INFO *)allocator.Allocate(size);

            *info = new TRACE_EVENT_INFO();
            info->ProviderGuid          = ProviderGuid;
            info->EventGuid             = EventGuid;
            info->EventDescriptor       = EventDescriptor;
            info->DecodingSource        = DecodingSource;
            info->PropertyCount         = PropertyCount;
            info->TopLevelPropertyCount = TopLevelPropertyCount;
            info->Flags = Flags;
            for (int i = 0; i < EventPropertyInfos.Length; ++i)
            {
                (&info->EventPropertyInfoArray)[i] = EventPropertyInfos[i];
            }

            uint offset = (uint)stringsOffset;

            info->ProviderNameOffset          = AddString(info, ref offset, ProviderName);
            info->LevelNameOffset             = AddString(info, ref offset, LevelName);
            info->ChannelNameOffset           = AddString(info, ref offset, ChannelName);
            info->KeywordsNameOffset          = AddString(info, ref offset, KeywordsName);
            info->TaskNameOffset              = AddString(info, ref offset, TaskName);
            info->OpcodeNameOffset            = AddString(info, ref offset, OpcodeName);
            info->EventMessageOffset          = AddString(info, ref offset, EventMessage);
            info->ProviderMessageOffset       = AddString(info, ref offset, ProviderMessage);
            info->ActivityIDNameOffset        = AddString(info, ref offset, ActivityIDName);
            info->RelatedActivityIDNameOffset = AddString(info, ref offset, RelatedActivityIDName);

            return(new TraceEventInfoCPtr(info, (uint)size));
        }
Example #3
0
        public unsafe void Create(string providerId, ushort id, bool expected)
        {
            var builder = TraceLogFilterBuilder.Instance;

            var filter = new TraceLogFilter();

            //filter.Conditions.Add(new TraceLogFilterCondition(
            //    builder.ProviderId, true, FilterRelationKind.NotEqual, FilterConditionAction.Exclude, new Guid("E53CD252-C0DA-49DD-93B0-28744D498D0F")));
            //filter.Conditions.Add(new TraceLogFilterCondition(
            //    builder.Id, true, FilterRelationKind.Equal, FilterConditionAction.Exclude, (ushort)1));

            filter.Conditions.Add(new TraceLogFilterCondition(
                                      "ProviderId == {FF4B1F18-0D41-4DE6-A576-7FD58477A869} || id != 1", true, FilterConditionAction.Include));

            var record  = new EVENT_RECORD();
            var tei     = new TRACE_EVENT_INFO();
            var teiSize = new UIntPtr((uint)Marshal.SizeOf <TRACE_EVENT_INFO>());

            record.EventHeader.ProviderId         = new Guid(providerId);
            record.EventHeader.EventDescriptor.Id = id;

            Assert.Equal(expected, filter.CreatePredicate()(new IntPtr(&record), new IntPtr(&tei), teiSize));
        }