| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_SCHEDULER_H |
| #define BASE_TRACE_EVENT_MEMORY_DUMP_SCHEDULER_H |
| |
| #include <stdint.h> |
| |
| #include <vector> |
| |
| #include "base/base_export.h" |
| #include "base/callback.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/trace_event/memory_dump_request_args.h" |
| |
| namespace base { |
| class SequencedTaskRunner; |
| |
| namespace trace_event { |
| |
| // Schedules global dump requests based on the triggers added. The methods of |
| // this class are NOT thread safe and the client has to take care of invoking |
| // all the methods of the class safely. |
| class BASE_EXPORT MemoryDumpScheduler { |
| public: |
| using PeriodicCallback = RepeatingCallback<void(MemoryDumpLevelOfDetail)>; |
| |
| // Passed to Start(). |
| struct BASE_EXPORT Config { |
| struct Trigger { |
| MemoryDumpLevelOfDetail level_of_detail; |
| uint32_t period_ms; |
| }; |
| |
| Config(); |
| Config(const Config&); |
| ~Config(); |
| |
| std::vector<Trigger> triggers; |
| PeriodicCallback callback; |
| }; |
| |
| static MemoryDumpScheduler* GetInstance(); |
| |
| void Start(Config, scoped_refptr<SequencedTaskRunner> task_runner); |
| void Stop(); |
| bool is_enabled_for_testing() const { return bool(task_runner_); } |
| |
| private: |
| friend class MemoryDumpSchedulerTest; |
| MemoryDumpScheduler(); |
| ~MemoryDumpScheduler(); |
| |
| void StartInternal(Config); |
| void StopInternal(); |
| void Tick(uint32_t expected_generation); |
| |
| // Accessed only by the public methods (never from the task runner itself). |
| scoped_refptr<SequencedTaskRunner> task_runner_; |
| |
| // These fields instead are only accessed from within the task runner. |
| uint32_t period_ms_; // 0 == disabled. |
| uint32_t generation_; // Used to invalidate outstanding tasks after Stop(). |
| uint32_t tick_count_; |
| uint32_t light_dump_rate_; |
| uint32_t heavy_dump_rate_; |
| PeriodicCallback callback_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MemoryDumpScheduler); |
| }; |
| |
| } // namespace trace_event |
| } // namespace base |
| |
| #endif // BASE_TRACE_EVENT_MEMORY_DUMP_SCHEDULER_H |