public Expression Build(IEventTraceOperand operand, ParameterExpression eventRecordReader, ParameterExpression eventRecordWriter, ParameterExpression eventMetadataTable, ParameterExpression runtimeMetadata) { var eventMetadata = Expression.Parameter(typeof(EventMetadata)); var properties = Expression.Parameter(typeof(PropertyMetadata[])); var variables = new List <ParameterExpression> { eventMetadata, properties }; var expGenerator = new ExpressionGenerator(eventRecordReader, eventRecordWriter, properties); var list = new List <Expression> { Expression.Assign(eventMetadata, Expression.ArrayAccess(eventMetadataTable, Expression.Constant(operand.EventMetadataTableIndex))), Expression.Assign(properties, Expression.PropertyOrField(eventMetadata, "Properties")), eventRecordWriter.Call("WriteEventBegin", eventMetadata, runtimeMetadata), expGenerator.CodeGenerate(operand.EventPropertyOperands), eventRecordWriter.Call("WriteEventEnd") }; var returnExpression = Expression.Block(variables, list); return(returnExpression); }
public static Expression Build( IEventTraceOperand operand, ParameterExpression eventRecordReader, ParameterExpression eventRecordWriter, ParameterExpression eventMetadataTable, ParameterExpression runtimeMetadata) { return new EventTraceOperandExpressionBuilderImpl().Build(operand, eventRecordReader, eventRecordWriter, eventMetadataTable, runtimeMetadata); }
public static Expression Build( IEventTraceOperand operand, ParameterExpression eventRecordReader, ParameterExpression eventRecordWriter, ParameterExpression eventMetadataTable, ParameterExpression runtimeMetadata) { return(new EventTraceOperandExpressionBuilderImpl().Build(operand, eventRecordReader, eventRecordWriter, eventMetadataTable, runtimeMetadata)); }
private static unsafe IEventTraceOperand BuildOperandFromTdh(EVENT_RECORD *eventRecord, int metadataTableIndex) { uint bufferSize; byte *buffer = (byte *)0; // Not Found if (Tdh.GetEventInformation(eventRecord, 0, IntPtr.Zero, buffer, out bufferSize) == 1168) { return(null); } buffer = (byte *)Marshal.AllocHGlobal((int)bufferSize); Tdh.GetEventInformation(eventRecord, 0, IntPtr.Zero, buffer, out bufferSize); var traceEventInfo = (TRACE_EVENT_INFO *)buffer; IEventTraceOperand traceEventOperand = EventTraceOperandBuilder.Build(traceEventInfo, metadataTableIndex); Marshal.FreeHGlobal((IntPtr)buffer); return(traceEventOperand); }
public Expression Build(IEventTraceOperand operand, ParameterExpression eventRecordReader, ParameterExpression eventRecordWriter, ParameterExpression eventMetadataTable, ParameterExpression runtimeMetadata) { var eventMetadata = Expression.Parameter(typeof(EventMetadata)); var properties = Expression.Parameter(typeof(PropertyMetadata[])); var variables = new List<ParameterExpression> { eventMetadata, properties }; var expGenerator = new ExpressionGenerator(eventRecordReader, eventRecordWriter, properties); var list = new List<Expression> { Expression.Assign(eventMetadata, Expression.ArrayAccess(eventMetadataTable, Expression.Constant(operand.EventMetadataTableIndex))), Expression.Assign(properties, Expression.PropertyOrField(eventMetadata, "Properties")), eventRecordWriter.Call("WriteEventBegin", eventMetadata, runtimeMetadata), expGenerator.CodeGenerate(operand.EventPropertyOperands), eventRecordWriter.Call("WriteEventEnd") }; var returnExpression = Expression.Block(variables, list); return returnExpression; }