Index: base/profiler/stack_sampling_profiler.h |
diff --git a/base/profiler/stack_sampling_profiler.h b/base/profiler/stack_sampling_profiler.h |
index 622f6e5764a5b4e59fbf0a6eed6c7d328d737fc3..d2db971c96f42812a2c624d69a796c77aa9578a8 100644 |
--- a/base/profiler/stack_sampling_profiler.h |
+++ b/base/profiler/stack_sampling_profiler.h |
@@ -221,6 +221,27 @@ class BASE_EXPORT StackSamplingProfiler { |
// whichever occurs first. |
void Stop(); |
+ // Stops all active profiles and cleans up any resources in anticipation of |
+ // a shutdown of the current process. |
+ static void Shutdown(); |
+ |
+ // Resets the "shutdown" state so that the sampling thread can be restarted. |
+ static void UndoShutdownForTesting(); |
+ |
+ // Returns whether the sampling thread is currently running or not. |
+ static bool IsSamplingThreadRunningForTesting(); |
+ |
+ // Sets the auto-shutdown delay time for the sampling thread, in ms. Set this |
+ // to zero to disable it. |
+ static void SetSamplingThreadIdleShutdownTimeForTesting(int shutdown_ms); |
+ |
+ // Initiates an idle shutdown task, as though the idle timer had expired, |
+ // causing the thread to exit if there are no more sampling tasks pending. |
+ // This returns immediately. Watch IsSamplingThreadRunningForTesting() to |
+ // know when the thread has exited, though it will never do so if it is |
+ // not idle. |
+ static void InitiateSamplingThreadIdleShutdownForTesting(); |
+ |
// Set the current system state that is recorded with each captured stack |
// frame. This is thread-safe so can be called from anywhere. The parameter |
// value should be from an enumeration of the appropriate type with values |
@@ -233,44 +254,7 @@ class BASE_EXPORT StackSamplingProfiler { |
private: |
// SamplingThread is a separate thread used to suspend and sample stacks from |
// the target thread. |
- class SamplingThread : public PlatformThread::Delegate { |
- public: |
- // Samples stacks using |native_sampler|. When complete, invokes |
- // |completed_callback| with the collected call stack profiles. |
- // |completed_callback| must be callable on any thread. |
- SamplingThread(std::unique_ptr<NativeStackSampler> native_sampler, |
- const SamplingParams& params, |
- const CompletedCallback& completed_callback); |
- ~SamplingThread() override; |
- |
- // PlatformThread::Delegate: |
- void ThreadMain() override; |
- |
- void Stop(); |
- |
- private: |
- // Collects |profile| from a single burst. If the profiler was stopped |
- // during collection, sets |was_stopped| and provides the set of samples |
- // collected up to that point. |
- void CollectProfile(CallStackProfile* profile, TimeDelta* elapsed_time, |
- bool* was_stopped); |
- |
- // Collects call stack profiles from all bursts, or until the sampling is |
- // stopped. If stopped before complete, the last profile in |
- // |call_stack_profiles| may contain a partial burst. |
- void CollectProfiles(CallStackProfiles* profiles); |
- |
- std::unique_ptr<NativeStackSampler> native_sampler_; |
- const SamplingParams params_; |
- |
- // If Stop() is called, it signals this event to force the sampling to |
- // terminate before all the samples specified in |params_| are collected. |
- WaitableEvent stop_event_; |
- |
- const CompletedCallback completed_callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SamplingThread); |
- }; |
+ class SamplingThread; |
// Adds annotations to a Sample. |
static void RecordAnnotations(Sample* sample); |
@@ -287,11 +271,11 @@ class BASE_EXPORT StackSamplingProfiler { |
const SamplingParams params_; |
- std::unique_ptr<SamplingThread> sampling_thread_; |
- PlatformThreadHandle sampling_thread_handle_; |
- |
const CompletedCallback completed_callback_; |
+ // An ID uniquely identifying this collection to the sampling thread. |
+ int collection_id_ = -1; |
+ |
// Stored until it can be passed to the NativeStackSampler created in Start(). |
NativeStackSamplerTestDelegate* const test_delegate_; |