OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/profiler_service.h" | 5 #include "vm/profiler_service.h" |
6 | 6 |
7 #include "vm/growable_array.h" | 7 #include "vm/growable_array.h" |
8 #include "vm/hash_map.h" | 8 #include "vm/hash_map.h" |
9 #include "vm/log.h" | 9 #include "vm/log.h" |
10 #include "vm/malloc_hooks.h" | 10 #include "vm/malloc_hooks.h" |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 void ProfileFunction::PrintToJSONObject(JSONObject* func) { | 222 void ProfileFunction::PrintToJSONObject(JSONObject* func) { |
223 func->AddProperty("type", "@Function"); | 223 func->AddProperty("type", "@Function"); |
224 func->AddProperty("name", name()); | 224 func->AddProperty("name", name()); |
225 func->AddProperty("_kind", KindToCString(kind())); | 225 func->AddProperty("_kind", KindToCString(kind())); |
226 } | 226 } |
227 | 227 |
228 | 228 |
229 void ProfileFunction::PrintToJSONArray(JSONArray* functions) { | 229 void ProfileFunction::PrintToJSONArray(JSONArray* functions) { |
230 JSONObject obj(functions); | 230 JSONObject obj(functions); |
231 obj.AddProperty("kind", KindToCString(kind())); | 231 obj.AddProperty("kind", KindToCString(kind())); |
232 obj.AddPropertyF("inclusiveTicks", "%" Pd "", inclusive_ticks()); | 232 obj.AddProperty("inclusiveTicks", inclusive_ticks()); |
233 obj.AddPropertyF("exclusiveTicks", "%" Pd "", exclusive_ticks()); | 233 obj.AddProperty("exclusiveTicks", exclusive_ticks()); |
234 if (kind() == kDartFunction) { | 234 if (kind() == kDartFunction) { |
235 ASSERT(!function_.IsNull()); | 235 ASSERT(!function_.IsNull()); |
236 obj.AddProperty("function", function_); | 236 obj.AddProperty("function", function_); |
237 } else { | 237 } else { |
238 JSONObject func(&obj, "function"); | 238 JSONObject func(&obj, "function"); |
239 PrintToJSONObject(&func); | 239 PrintToJSONObject(&func); |
240 } | 240 } |
241 { | 241 { |
242 JSONArray codes(&obj, "codes"); | 242 JSONArray codes(&obj, "codes"); |
243 for (intptr_t i = 0; i < profile_codes_.length(); i++) { | 243 for (intptr_t i = 0; i < profile_codes_.length(); i++) { |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 return "Tag"; | 500 return "Tag"; |
501 } | 501 } |
502 UNREACHABLE(); | 502 UNREACHABLE(); |
503 return NULL; | 503 return NULL; |
504 } | 504 } |
505 | 505 |
506 | 506 |
507 void ProfileCode::PrintToJSONArray(JSONArray* codes) { | 507 void ProfileCode::PrintToJSONArray(JSONArray* codes) { |
508 JSONObject obj(codes); | 508 JSONObject obj(codes); |
509 obj.AddProperty("kind", ProfileCode::KindToCString(kind())); | 509 obj.AddProperty("kind", ProfileCode::KindToCString(kind())); |
510 obj.AddPropertyF("inclusiveTicks", "%" Pd "", inclusive_ticks()); | 510 obj.AddProperty("inclusiveTicks", inclusive_ticks()); |
511 obj.AddPropertyF("exclusiveTicks", "%" Pd "", exclusive_ticks()); | 511 obj.AddProperty("exclusiveTicks", exclusive_ticks()); |
512 if (kind() == kDartCode) { | 512 if (kind() == kDartCode) { |
513 ASSERT(!code_.IsNull()); | 513 ASSERT(!code_.IsNull()); |
514 obj.AddProperty("code", code_); | 514 obj.AddProperty("code", code_); |
515 } else if (kind() == kCollectedCode) { | 515 } else if (kind() == kCollectedCode) { |
516 PrintCollectedCode(&obj); | 516 PrintCollectedCode(&obj); |
517 } else if (kind() == kReusedCode) { | 517 } else if (kind() == kReusedCode) { |
518 PrintOverwrittenCode(&obj); | 518 PrintOverwrittenCode(&obj); |
519 } else if (kind() == kTagCode) { | 519 } else if (kind() == kTagCode) { |
520 PrintTagCode(&obj); | 520 PrintTagCode(&obj); |
521 } else { | 521 } else { |
522 ASSERT(kind() == kNativeCode); | 522 ASSERT(kind() == kNativeCode); |
523 PrintNativeCode(&obj); | 523 PrintNativeCode(&obj); |
524 } | 524 } |
525 { | 525 { |
526 JSONArray ticks(&obj, "ticks"); | 526 JSONArray ticks(&obj, "ticks"); |
527 for (intptr_t i = 0; i < address_ticks_.length(); i++) { | 527 for (intptr_t i = 0; i < address_ticks_.length(); i++) { |
528 const ProfileCodeAddress& entry = address_ticks_[i]; | 528 const ProfileCodeAddress& entry = address_ticks_[i]; |
529 ticks.AddValueF("%" Px "", entry.pc()); | 529 ticks.AddValueF("%" Px "", entry.pc()); |
530 ticks.AddValueF("%" Pd "", entry.exclusive_ticks()); | 530 ticks.AddValue(entry.exclusive_ticks()); |
531 ticks.AddValueF("%" Pd "", entry.inclusive_ticks()); | 531 ticks.AddValue(entry.inclusive_ticks()); |
532 } | 532 } |
533 } | 533 } |
534 } | 534 } |
535 | 535 |
536 | 536 |
537 class ProfileFunctionTable : public ZoneAllocated { | 537 class ProfileFunctionTable : public ZoneAllocated { |
538 public: | 538 public: |
539 ProfileFunctionTable() | 539 ProfileFunctionTable() |
540 : null_function_(Function::ZoneHandle()), | 540 : null_function_(Function::ZoneHandle()), |
541 unknown_function_(NULL), | 541 unknown_function_(NULL), |
(...skipping 2342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2884 // Disable thread interrupts while processing the buffer. | 2884 // Disable thread interrupts while processing the buffer. |
2885 DisableThreadInterruptsScope dtis(thread); | 2885 DisableThreadInterruptsScope dtis(thread); |
2886 | 2886 |
2887 ClearProfileVisitor clear_profile(isolate); | 2887 ClearProfileVisitor clear_profile(isolate); |
2888 sample_buffer->VisitSamples(&clear_profile); | 2888 sample_buffer->VisitSamples(&clear_profile); |
2889 } | 2889 } |
2890 | 2890 |
2891 #endif // !PRODUCT | 2891 #endif // !PRODUCT |
2892 | 2892 |
2893 } // namespace dart | 2893 } // namespace dart |
OLD | NEW |