private ulong MakeCallStack(ProfilerSession ps, uint[] callStack, ObjectType type, uint size) { ulong typeid = FindType(ps, type); string flags = String.Format("1 {0} {1}", typeid, size); //"1" means a type id and size come before the call stack. return MakeCallStackInternal(ps, callStack, flags); }
private ulong FindType(_PRF.ProfilerSession ps, ObjectType type) { if (m_typeIdLookup.ContainsKey(type)) { return m_typeIdLookup[type]; } else { //FIXME: Need to know which types are finalizable StringBuilder typeName = new StringBuilder(ps.ResolveTypeName(type.Type)); for (int i = 0; i < type.Rank; i++) { typeName.Append("[]"); } ulong typeid = m_nextTypeId++; m_typeIdLookup.Add(type, typeid); m_sw.WriteLine("t {0} 0 {1}", typeid, typeName.ToString()); return typeid; } }