| Index: runtime/vm/profiler.cc
|
| diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
|
| index 067f382e2e699357a16bf89317a9969cbf97e406..50a202a6e537195716d03f93d6b6858cd044a5fb 100644
|
| --- a/runtime/vm/profiler.cc
|
| +++ b/runtime/vm/profiler.cc
|
| @@ -65,11 +65,11 @@ void Profiler::InitOnce() {
|
| }
|
| ASSERT(!initialized_);
|
| sample_buffer_ = new SampleBuffer();
|
| + // Zero counters.
|
| + memset(&counters_, 0, sizeof(counters_));
|
| NativeSymbolResolver::InitOnce();
|
| ThreadInterrupter::SetInterruptPeriod(FLAG_profile_period);
|
| ThreadInterrupter::Startup();
|
| - // Zero counters.
|
| - memset(&counters_, 0, sizeof(counters_));
|
| initialized_ = true;
|
| }
|
|
|
| @@ -786,18 +786,18 @@ static void CollectSample(Isolate* isolate,
|
|
|
| if (FLAG_profile_vm) {
|
| // Always walk the native stack collecting both native and Dart frames.
|
| - counters->stack_walker_native++;
|
| + AtomicOperations::IncrementInt64By(&counters->stack_walker_native, 1);
|
| native_stack_walker->walk();
|
| } else if (StubCode::HasBeenInitialized() && exited_dart_code) {
|
| - counters->stack_walker_dart_exit++;
|
| + AtomicOperations::IncrementInt64By(&counters->stack_walker_dart_exit, 1);
|
| // We have a valid exit frame info, use the Dart stack walker.
|
| dart_exit_stack_walker->walk();
|
| } else if (StubCode::HasBeenInitialized() && in_dart_code) {
|
| - counters->stack_walker_dart++;
|
| + AtomicOperations::IncrementInt64By(&counters->stack_walker_dart, 1);
|
| // We are executing Dart code. We have frame pointers.
|
| dart_stack_walker->walk();
|
| } else {
|
| - counters->stack_walker_none++;
|
| + AtomicOperations::IncrementInt64By(&counters->stack_walker_none, 1);
|
| sample->SetAt(0, pc);
|
| }
|
|
|
| @@ -1139,7 +1139,7 @@ void Profiler::SampleThread(Thread* thread,
|
|
|
| // Thread is not doing VM work.
|
| if (thread->task_kind() == Thread::kUnknownTask) {
|
| - counters_.bail_out_unknown_task++;
|
| + AtomicOperations::IncrementInt64By(&counters_.bail_out_unknown_task, 1);
|
| return;
|
| }
|
|
|
| @@ -1148,7 +1148,8 @@ void Profiler::SampleThread(Thread* thread,
|
| // The JumpToExceptionHandler stub manually adjusts the stack pointer,
|
| // frame pointer, and some isolate state before jumping to a catch entry.
|
| // It is not safe to walk the stack when executing this stub.
|
| - counters_.bail_out_jump_to_exception_handler++;
|
| + AtomicOperations::IncrementInt64By(
|
| + &counters_.bail_out_jump_to_exception_handler, 1);
|
| return;
|
| }
|
|
|
| @@ -1182,18 +1183,20 @@ void Profiler::SampleThread(Thread* thread,
|
| }
|
|
|
| if (!CheckIsolate(isolate)) {
|
| - counters_.bail_out_check_isolate++;
|
| + AtomicOperations::IncrementInt64By(&counters_.bail_out_check_isolate, 1);
|
| return;
|
| }
|
|
|
| if (thread->IsMutatorThread() && isolate->IsDeoptimizing()) {
|
| - counters_.single_frame_sample_deoptimizing++;
|
| + AtomicOperations::IncrementInt64By(
|
| + &counters_.single_frame_sample_deoptimizing, 1);
|
| SampleThreadSingleFrame(thread, pc);
|
| return;
|
| }
|
|
|
| if (!InitialRegisterCheck(pc, fp, sp)) {
|
| - counters_.single_frame_sample_register_check++;
|
| + AtomicOperations::IncrementInt64By(
|
| + &counters_.single_frame_sample_register_check, 1);
|
| SampleThreadSingleFrame(thread, pc);
|
| return;
|
| }
|
| @@ -1205,7 +1208,8 @@ void Profiler::SampleThread(Thread* thread,
|
| sp,
|
| &stack_lower,
|
| &stack_upper)) {
|
| - counters_.single_frame_sample_get_and_validate_stack_bounds++;
|
| + AtomicOperations::IncrementInt64By(
|
| + &counters_.single_frame_sample_get_and_validate_stack_bounds, 1);
|
| // Could not get stack boundary.
|
| SampleThreadSingleFrame(thread, pc);
|
| return;
|
|
|