Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: runtime/vm/profiler.cc

Issue 1307593003: Reland More allocation tracing unit tests (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/profiler_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/profiler_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698