summaryrefslogtreecommitdiff
path: root/base/trace_event/memory_dump_scheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/trace_event/memory_dump_scheduler.h')
-rw-r--r--base/trace_event/memory_dump_scheduler.h76
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