diff options
Diffstat (limited to 'base/trace_event/memory_dump_scheduler.h')
-rw-r--r-- | base/trace_event/memory_dump_scheduler.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/base/trace_event/memory_dump_scheduler.h b/base/trace_event/memory_dump_scheduler.h new file mode 100644 index 0000000000..21334f0edd --- /dev/null +++ b/base/trace_event/memory_dump_scheduler.h @@ -0,0 +1,76 @@ +// 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 |