private NodeTypeIndex GetNodeTypeIndex(ProfilerTypeID typeId) { var typeIdasInt = (int)typeId; NodeTypeIndex ret = NodeTypeIndex.Invalid; if (typeIdasInt >= m_profilerTypeToNodeType.Count) { int prevSize = m_profilerTypeToNodeType.Count; int newSize = typeIdasInt + 100; m_profilerTypeToNodeType.Count = newSize; for (int i = prevSize; i < newSize; i++) { m_profilerTypeToNodeType[i] = NodeTypeIndex.Invalid; } } else { ret = m_profilerTypeToNodeType[typeIdasInt]; } if (ret == NodeTypeIndex.Invalid) { ProfilerType profilerType = m_clrProfilerParser.GetTypeById(typeId); ret = CreateType(profilerType.name); m_profilerTypeToNodeType[typeIdasInt] = ret; // TODO FIX NOW don't allocate every time GetType(ret, AllocTypeNodeStorage()).ModuleName = profilerType.ModuleName; } return(ret); }
// Callbacks from various records in the ClrProfiler log. private void OnStaticVar(Address objectAddress, string fieldName, ProfilerTypeID typeID, uint threadID, string appDomainName) { // Unfortunately we don't know the module name until late in the trace, so // we have to defer the work until then. So just remember what we needs to do. m_deferedRoots.Add(new DeferedRoot { name = fieldName, nodeIndex = GetNodeIndex(objectAddress), typeID = typeID, prefix = threadID == 0 ? "static" : "threadStatic", appDomainName = appDomainName, }); }
private void OnObjectDescription(Address objectAddress, ProfilerTypeID typeId, uint size, List <Address> pointsTo) { var nodeIndex = GetNodeIndex(objectAddress); m_tempChildren.Clear(); for (int i = 0; i < pointsTo.Count; i++) { m_tempChildren.Add(GetNodeIndex(pointsTo[i])); } var typeIndex = GetNodeTypeIndex(typeId); this.SetNode(nodeIndex, typeIndex, (int)size, m_tempChildren); }
private void OnLocalVar(Address objectAddress, string localVarName, string methodName, ProfilerTypeID typeID, uint threadID, string appDomainName) { m_deferedRoots.Add(new DeferedRoot { // Unfortunately we don't know the module name until late in the trace, so // we have to defer the work until then. So just remember what we needs to do. name = methodName + " " + localVarName, nodeIndex = GetNodeIndex(objectAddress), typeID = typeID, prefix = "local", appDomainName = appDomainName, }); }