Index: runtime/vm/profiler.cc |
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc |
index e9ad1ccfa0de04fc67062c904699b5e00d6f3dba..c75f1362008c444430ae74f4c5ec4bf06fd66d88 100644 |
--- a/runtime/vm/profiler.cc |
+++ b/runtime/vm/profiler.cc |
@@ -965,11 +965,6 @@ void Profiler::RecordAllocation(Isolate* isolate, intptr_t cid) { |
const bool exited_dart_code = ExitedDart(isolate); |
- if (!exited_dart_code && !FLAG_profile_vm) { |
- // No Dart frames on stack and we are not profiling the vm. |
- return; |
- } |
- |
SampleBuffer* sample_buffer = GetSampleBuffer(isolate); |
if (sample_buffer == NULL) { |
// Profiler not initialized. |
@@ -1010,14 +1005,22 @@ void Profiler::RecordAllocation(Isolate* isolate, intptr_t cid) { |
fp, |
sp); |
native_stack_walker.walk(); |
- } else { |
- ASSERT(exited_dart_code); |
+ } else if (exited_dart_code) { |
Sample* sample = SetupSample(isolate, |
sample_buffer, |
OSThread::GetCurrentThreadId()); |
sample->SetAllocationCid(cid); |
ProfilerDartExitStackWalker dart_exit_stack_walker(isolate, sample); |
dart_exit_stack_walker.walk(); |
+ } else { |
+ // Fall back. |
+ uintptr_t pc = GetProgramCounter(); |
+ Sample* sample = SetupSample(isolate, |
+ sample_buffer, |
+ OSThread::GetCurrentThreadId()); |
+ sample->SetAllocationCid(cid); |
+ sample->set_vm_tag(VMTag::kEmbedderTagId); |
+ sample->SetAt(0, pc); |
} |
} |