1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
using System.Text;
namespace Mono.Profiler.Aot
{
//
// Represents the contents of an .aotprofile file created by the
// AOT profiler
//
public class ProfileRecord
{
public ProfileRecord (int id)
{
Id = id;
}
public int Id {
get; set;
}
}
public class ModuleRecord : ProfileRecord
{
public ModuleRecord (int id, string name, string mvid) : base (id)
{
Name = name;
Mvid = mvid;
}
public string Name {
get; set;
}
public string Mvid {
get; set;
}
public override string ToString ()
{
return Name;
}
}
public class GenericInstRecord : ProfileRecord
{
public GenericInstRecord (int id, TypeRecord[] types) : base (id)
{
Types = types;
}
public TypeRecord[] Types {
get; set;
}
public override string ToString ()
{
if (Types == null || Types.Length <= 0)
return "";
var sb = new StringBuilder ("<");
var first = true;
foreach (var type in Types) {
if (!first)
sb.Append (", ");
else
first = false;
sb.Append (type.ToString ());
}
sb.Append (">");
return sb.ToString ();
}
}
public class TypeRecord : ProfileRecord
{
public TypeRecord (int id, ModuleRecord module, string name, GenericInstRecord ginst) : base (id)
{
Module = module;
Name = name;
GenericInst = ginst;
}
public ModuleRecord Module {
get; set;
}
public string Name {
get; set;
}
public string FullName {
get {
string prefix;
if (Name.Length > 0 && Name [0] == '.')
prefix = Module.ToString ();
else
prefix = "";
return $"{prefix}{Name}{GenericInst}";
}
}
public GenericInstRecord GenericInst {
get; set;
}
public override string ToString ()
{
return FullName;
}
}
public class MethodRecord : ProfileRecord
{
public MethodRecord (int id, TypeRecord type, GenericInstRecord ginst, string name, string sig, int param_count) : base (id)
{
Type = type;
GenericInst = ginst;
Name = name;
Signature = sig;
ParamCount = param_count;
}
public TypeRecord Type {
get; set;
}
public GenericInstRecord GenericInst {
get; set;
}
public string Name {
get; set;
}
public string Signature {
get; set;
}
public int ParamCount {
get; set;
}
public override string ToString ()
{
return $"{Signature.Replace ("(", $" {Type}:{Name} (")}";
}
}
}
|