123 // Now, print the object's identity once, in detail. |
123 // Now, print the object's identity once, in detail. |
124 if (obj->is_metadata()) { |
124 if (obj->is_metadata()) { |
125 ciMetadata* mobj = obj->as_metadata(); |
125 ciMetadata* mobj = obj->as_metadata(); |
126 if (mobj->is_klass()) { |
126 if (mobj->is_klass()) { |
127 ciKlass* klass = mobj->as_klass(); |
127 ciKlass* klass = mobj->as_klass(); |
128 begin_elem("klass id='%d'", id); |
128 begin_elem("klass id='%d'", id); |
129 name(klass->name()); |
129 name(klass->name()); |
130 if (!klass->is_loaded()) { |
130 if (!klass->is_loaded()) { |
131 print(" unloaded='1'"); |
131 print(" unloaded='1'"); |
132 } else { |
132 } else { |
133 print(" flags='%d'", klass->modifier_flags()); |
133 print(" flags='%d'", klass->modifier_flags()); |
134 } |
134 } |
135 end_elem(); |
135 end_elem(); |
136 } else if (mobj->is_method()) { |
136 } else if (mobj->is_method()) { |
137 ciMethod* method = mobj->as_method(); |
137 ciMethod* method = mobj->as_method(); |
138 ciSignature* sig = method->signature(); |
138 ciSignature* sig = method->signature(); |
139 // Pre-identify items that we will need! |
139 // Pre-identify items that we will need! |
140 identify(sig->return_type()); |
140 identify(sig->return_type()); |
141 for (int i = 0; i < sig->count(); i++) { |
|
142 identify(sig->type_at(i)); |
|
143 } |
|
144 begin_elem("method id='%d' holder='%d'", |
|
145 id, identify(method->holder())); |
|
146 name(method->name()); |
|
147 print(" return='%d'", identify(sig->return_type())); |
|
148 if (sig->count() > 0) { |
|
149 print(" arguments='"); |
|
150 for (int i = 0; i < sig->count(); i++) { |
141 for (int i = 0; i < sig->count(); i++) { |
151 print((i == 0) ? "%d" : " %d", identify(sig->type_at(i))); |
142 identify(sig->type_at(i)); |
152 } |
143 } |
153 print("'"); |
144 begin_elem("method id='%d' holder='%d'", |
154 } |
145 id, identify(method->holder())); |
155 if (!method->is_loaded()) { |
146 name(method->name()); |
156 print(" unloaded='1'"); |
147 print(" return='%d'", identify(sig->return_type())); |
157 } else { |
148 if (sig->count() > 0) { |
158 print(" flags='%d'", (jchar) method->flags().as_int()); |
149 print(" arguments='"); |
159 // output a few metrics |
150 for (int i = 0; i < sig->count(); i++) { |
160 print(" bytes='%d'", method->code_size()); |
151 print((i == 0) ? "%d" : " %d", identify(sig->type_at(i))); |
161 method->log_nmethod_identity(this); |
152 } |
162 //print(" count='%d'", method->invocation_count()); |
153 print("'"); |
163 //int bec = method->backedge_count(); |
154 } |
164 //if (bec != 0) print(" backedge_count='%d'", bec); |
155 if (!method->is_loaded()) { |
165 print(" iicount='%d'", method->interpreter_invocation_count()); |
156 print(" unloaded='1'"); |
166 } |
157 } else { |
167 end_elem(); |
158 print(" flags='%d'", (jchar) method->flags().as_int()); |
|
159 // output a few metrics |
|
160 print(" bytes='%d'", method->code_size()); |
|
161 method->log_nmethod_identity(this); |
|
162 //print(" count='%d'", method->invocation_count()); |
|
163 //int bec = method->backedge_count(); |
|
164 //if (bec != 0) print(" backedge_count='%d'", bec); |
|
165 print(" iicount='%d'", method->interpreter_invocation_count()); |
|
166 } |
|
167 end_elem(); |
168 } else if (mobj->is_type()) { |
168 } else if (mobj->is_type()) { |
169 BasicType type = mobj->as_type()->basic_type(); |
169 BasicType type = mobj->as_type()->basic_type(); |
170 elem("type id='%d' name='%s'", id, type2name(type)); |
170 elem("type id='%d' name='%s'", id, type2name(type)); |
171 } else { |
171 } else { |
172 // Should not happen. |
172 // Should not happen. |