From 3f694c96ba044796f4031fb1df7a164d7da3efb1 Mon Sep 17 00:00:00 2001 From: "johnmccutchan@google.com" Date: Thu, 14 May 2015 22:47:21 +0000 Subject: [PATCH] Attempt to fix Windows Dartium #2 BUG= Review URL: https://codereview.chromium.org//1129903007 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45802 260f80e4-7a28-3924-810f-c04153c831b5 --- runtime/vm/profiler.cc | 58 ++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc index f5899b6c54c..c4e27e3e374 100644 --- a/runtime/vm/profiler.cc +++ b/runtime/vm/profiler.cc @@ -948,28 +948,10 @@ static void CollectSample(Isolate* isolate, bool exited_dart_code, bool in_dart_code, Sample* sample, - uword stack_lower, - uword stack_upper, - uword pc, - uword fp, - uword sp) { - ProfilerNativeStackWalker nativeStackWalker(sample, - stack_lower, - stack_upper, - pc, - fp, - sp); - - ProfilerDartExitStackWalker dartExitStackWalker(isolate, sample); - - ProfilerDartStackWalker dartStackWalker(isolate, - sample, - stack_lower, - stack_upper, - pc, - fp, - sp); - + ProfilerNativeStackWalker* native_stack_walker, + ProfilerDartExitStackWalker* dart_exit_stack_walker, + ProfilerDartStackWalker* dart_stack_walker, + uword pc) { #if defined(TARGET_OS_WINDOWS) // Use structured exception handling to trap guard page access on Windows. __try { @@ -980,13 +962,13 @@ static void CollectSample(Isolate* isolate, if (FLAG_profile_vm) { // Always walk the native stack collecting both native and Dart frames. - nativeStackWalker.walk(); + native_stack_walker->walk(); } else if (exited_dart_code) { // We have a valid exit frame info, use the Dart stack walker. - dartExitStackWalker.walk(); + dart_exit_stack_walker->walk(); } else if (in_dart_code) { // We are executing Dart code. We have frame pointers. - dartStackWalker.walk(); + dart_stack_walker->walk(); } else { sample->set_vm_tag(VMTag::kEmbedderTagId); sample->SetAt(0, pc); @@ -1154,16 +1136,32 @@ void Profiler::RecordSampleInterruptCallback( sample->set_fp(fp); sample->set_lr(lr); + ProfilerNativeStackWalker native_stack_walker(sample, + stack_lower, + stack_upper, + pc, + fp, + sp); + + ProfilerDartExitStackWalker dart_exit_stack_walker(isolate, sample); + + ProfilerDartStackWalker dart_stack_walker(isolate, + sample, + stack_lower, + stack_upper, + pc, + fp, + sp); + // All memory access is done inside CollectSample. CollectSample(isolate, exited_dart_code, in_dart_code, sample, - stack_lower, - stack_upper, - pc, - fp, - sp); + &native_stack_walker, + &dart_exit_stack_walker, + &dart_stack_walker, + pc); } } // namespace dart