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>()); }
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)); }
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)); }