#ifndef BASE_TASK_SEQUENCE_MANAGER_TIME_DOMAIN_H_
#define BASE_TASK_SEQUENCE_MANAGER_TIME_DOMAIN_H_
#include <optional>
#include "base/base_export.h"
#include "base/check.h"
#include "base/memory/raw_ptr.h"
#include "base/task/common/lazy_now.h"
#include "base/task/sequence_manager/tasks.h"
#include "base/time/tick_clock.h"
#include "base/values.h"
namespace base {
namespace sequence_manager {
class SequenceManager;
namespace internal {
class SequenceManagerImpl;
}
class BASE_EXPORT TimeDomain : public TickClock {
public:
TimeDomain(const TimeDomain&) = delete;
TimeDomain& operator=(const TimeDomain&) = delete;
~TimeDomain() override = default;
virtual bool MaybeFastForwardToWakeUp(std::optional<WakeUp> next_wake_up,
bool quit_when_idle_requested) = 0;
Value::Dict AsValue() const;
protected:
TimeDomain() = default;
virtual const char* GetName() const = 0;
void NotifyPolicyChanged();
void OnAssignedToSequenceManager(
internal::SequenceManagerImpl* sequence_manager);
private:
friend class internal::SequenceManagerImpl;
raw_ptr<internal::SequenceManagerImpl, DanglingUntriaged> sequence_manager_ =
nullptr;
};
}
}
#endif