| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "platform/address_sanitizer.h" | 5 #include "platform/address_sanitizer.h" |
| 6 #include "platform/memory_sanitizer.h" | 6 #include "platform/memory_sanitizer.h" |
| 7 #include "platform/utils.h" | 7 #include "platform/utils.h" |
| 8 | 8 |
| 9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
| 10 #include "vm/atomic.h" | 10 #include "vm/atomic.h" |
| (...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 } | 958 } |
| 959 #endif | 959 #endif |
| 960 | 960 |
| 961 void Profiler::RecordAllocation(Isolate* isolate, intptr_t cid) { | 961 void Profiler::RecordAllocation(Isolate* isolate, intptr_t cid) { |
| 962 if (!CheckIsolate(isolate)) { | 962 if (!CheckIsolate(isolate)) { |
| 963 return; | 963 return; |
| 964 } | 964 } |
| 965 | 965 |
| 966 const bool exited_dart_code = ExitedDart(isolate); | 966 const bool exited_dart_code = ExitedDart(isolate); |
| 967 | 967 |
| 968 if (!exited_dart_code && !FLAG_profile_vm) { | |
| 969 // No Dart frames on stack and we are not profiling the vm. | |
| 970 return; | |
| 971 } | |
| 972 | |
| 973 SampleBuffer* sample_buffer = GetSampleBuffer(isolate); | 968 SampleBuffer* sample_buffer = GetSampleBuffer(isolate); |
| 974 if (sample_buffer == NULL) { | 969 if (sample_buffer == NULL) { |
| 975 // Profiler not initialized. | 970 // Profiler not initialized. |
| 976 return; | 971 return; |
| 977 } | 972 } |
| 978 | 973 |
| 979 if (FLAG_profile_vm) { | 974 if (FLAG_profile_vm) { |
| 980 uintptr_t sp = Isolate::GetCurrentStackPointer(); | 975 uintptr_t sp = Isolate::GetCurrentStackPointer(); |
| 981 uintptr_t fp = 0; | 976 uintptr_t fp = 0; |
| 982 uintptr_t pc = GetProgramCounter(); | 977 uintptr_t pc = GetProgramCounter(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1003 sample_buffer, | 998 sample_buffer, |
| 1004 OSThread::GetCurrentThreadId()); | 999 OSThread::GetCurrentThreadId()); |
| 1005 sample->SetAllocationCid(cid); | 1000 sample->SetAllocationCid(cid); |
| 1006 ProfilerNativeStackWalker native_stack_walker(sample, | 1001 ProfilerNativeStackWalker native_stack_walker(sample, |
| 1007 stack_lower, | 1002 stack_lower, |
| 1008 stack_upper, | 1003 stack_upper, |
| 1009 pc, | 1004 pc, |
| 1010 fp, | 1005 fp, |
| 1011 sp); | 1006 sp); |
| 1012 native_stack_walker.walk(); | 1007 native_stack_walker.walk(); |
| 1013 } else { | 1008 } else if (exited_dart_code) { |
| 1014 ASSERT(exited_dart_code); | |
| 1015 Sample* sample = SetupSample(isolate, | 1009 Sample* sample = SetupSample(isolate, |
| 1016 sample_buffer, | 1010 sample_buffer, |
| 1017 OSThread::GetCurrentThreadId()); | 1011 OSThread::GetCurrentThreadId()); |
| 1018 sample->SetAllocationCid(cid); | 1012 sample->SetAllocationCid(cid); |
| 1019 ProfilerDartExitStackWalker dart_exit_stack_walker(isolate, sample); | 1013 ProfilerDartExitStackWalker dart_exit_stack_walker(isolate, sample); |
| 1020 dart_exit_stack_walker.walk(); | 1014 dart_exit_stack_walker.walk(); |
| 1015 } else { |
| 1016 // Fall back. |
| 1017 uintptr_t pc = GetProgramCounter(); |
| 1018 Sample* sample = SetupSample(isolate, |
| 1019 sample_buffer, |
| 1020 OSThread::GetCurrentThreadId()); |
| 1021 sample->SetAllocationCid(cid); |
| 1022 sample->set_vm_tag(VMTag::kEmbedderTagId); |
| 1023 sample->SetAt(0, pc); |
| 1021 } | 1024 } |
| 1022 } | 1025 } |
| 1023 | 1026 |
| 1024 | 1027 |
| 1025 void Profiler::RecordSampleInterruptCallback( | 1028 void Profiler::RecordSampleInterruptCallback( |
| 1026 const InterruptedThreadState& state, | 1029 const InterruptedThreadState& state, |
| 1027 void* data) { | 1030 void* data) { |
| 1028 Isolate* isolate = reinterpret_cast<Isolate*>(data); | 1031 Isolate* isolate = reinterpret_cast<Isolate*>(data); |
| 1029 if ((isolate == NULL) || (Dart::vm_isolate() == NULL)) { | 1032 if ((isolate == NULL) || (Dart::vm_isolate() == NULL)) { |
| 1030 // No isolate. | 1033 // No isolate. |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 uword pc) { | 1322 uword pc) { |
| 1320 return vm_isolate->heap()->CodeContains(pc) | 1323 return vm_isolate->heap()->CodeContains(pc) |
| 1321 || isolate->heap()->CodeContains(pc); | 1324 || isolate->heap()->CodeContains(pc); |
| 1322 } | 1325 } |
| 1323 | 1326 |
| 1324 | 1327 |
| 1325 ProcessedSampleBuffer::ProcessedSampleBuffer() { | 1328 ProcessedSampleBuffer::ProcessedSampleBuffer() { |
| 1326 } | 1329 } |
| 1327 | 1330 |
| 1328 } // namespace dart | 1331 } // namespace dart |
| OLD | NEW |