// 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 <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"
#include "starboard/types.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
