Index: runtime/vm/profiler_linux.cc |
diff --git a/runtime/vm/profiler_linux.cc b/runtime/vm/profiler_linux.cc |
index 711dcc785982765c08d6220d391f975194e198e5..1eb650553f7c5502ac13d9fa0c39c2b39e216ac3 100644 |
--- a/runtime/vm/profiler_linux.cc |
+++ b/runtime/vm/profiler_linux.cc |
@@ -13,6 +13,7 @@ |
namespace dart { |
DECLARE_FLAG(bool, profile); |
+DECLARE_FLAG(bool, trace_profiled_isolates); |
static void CollectSample(IsolateProfilerData* profiler_data, |
uintptr_t pc, |
@@ -129,12 +130,30 @@ void ProfilerManager::ThreadMain(uword parameters) { |
ASSERT(initialized_); |
ASSERT(FLAG_profile); |
SignalHandler::Install(ProfileSignalAction); |
+ if (FLAG_trace_profiled_isolates) { |
+ OS::Print("ProfilerManager Linux ready.\n"); |
+ } |
+ thread_running_ = true; |
+ { |
+ // Signal to main thread we are ready. |
+ ScopedMonitor startup_lock(start_stop_monitor_); |
+ startup_lock.Notify(); |
+ } |
ScopedMonitor lock(monitor_); |
while (!shutdown_) { |
int64_t current_time = OS::GetCurrentTimeMicros(); |
int64_t next_sample = SampleAndRescheduleIsolates(current_time); |
lock.WaitMicros(next_sample); |
} |
+ if (FLAG_trace_profiled_isolates) { |
+ OS::Print("ProfilerManager Linux exiting.\n"); |
+ } |
+ thread_running_ = false; |
+ { |
+ // Signal to main thread we are exiting. |
+ ScopedMonitor shutdown_lock(start_stop_monitor_); |
+ shutdown_lock.Notify(); |
+ } |
} |