public HeapDumpObjectPacket(_DBG.BitStream stream) : base(Commands.c_Profiling_HeapDump_Object) { m_address = ReadAndUnpackBits(stream); m_size = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize; m_dt = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType); if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE) { m_typedef = ReadTypeDefIndex(stream); } else if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY) { m_arrayElementType = ReadTypeDefIndex(stream); m_arrayLevels = (ushort)ReadAndUnpackBits(stream); } m_refs = new List <uint>(); bool moreRefs; while (moreRefs = ReadBoolean(stream)) { m_refs.Add(ReadAndUnpackBits(stream)); } }
public ObjectAllocationPacket(_DBG.BitStream stream) : base(Commands.c_Profiling_Allocs_Alloc) { m_address = ReadAndUnpackBits(stream); m_size = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize; m_dt = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType); if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE || m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY) { m_type = ReadTypeDefIndex(stream); if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY) { m_rank = (ushort)ReadAndUnpackBits(stream); } } else { m_type = (uint)m_dt; } }
internal override void Process(ProfilerSession sess) { if (sess.m_currentHeapDump == null) { //Lost heap-dump start packet, and probably the roots too. throw new System.IO.IOException(); } HeapDumpObject hdo = new HeapDumpObject(); hdo.m_address = m_address; hdo.m_size = m_size; if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE) { sess.ResolveTypeName(m_typedef); //Cache type name. hdo.m_type = new ObjectType(m_typedef); } else { _DBG.RuntimeDataType dt = (_DBG.RuntimeDataType)m_dt; if (dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY) { sess.ResolveTypeName(m_arrayElementType); //Cache type name. hdo.m_type = new ObjectType(m_arrayElementType, m_arrayLevels); } else { hdo.m_type = new ObjectType((uint)m_dt); } } hdo.m_references = m_refs; Tracing.PacketTrace("object @ {0} ({1})", m_address, hdo.m_type); sess.m_currentHeapDump.m_objectTable.Add(hdo); }
public HeapDumpObjectPacket(_DBG.BitStream stream) : base(Commands.c_Profiling_HeapDump_Object) { m_address = ReadAndUnpackBits(stream); m_size = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize; m_dt = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType); if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE) { m_typedef = ReadTypeDefIndex(stream); } else if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY) { m_arrayElementType = ReadTypeDefIndex(stream); m_arrayLevels = (ushort)ReadAndUnpackBits(stream); } m_refs = new List<uint>(); bool moreRefs; while (moreRefs = ReadBoolean(stream)) { m_refs.Add(ReadAndUnpackBits(stream)); } }