blob: 07f185a708ae255d6ff4ac2d9f4e8f62904a73a0 [file] [log] [blame]
// Copyright 2018 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.
#include <algorithm>
#include "chrome/browser/vr/sequence.h"
namespace vr {
Sequence::SequencedTask::SequencedTask(base::OnceCallback<void()> task,
base::TimeDelta delta)
: task(std::move(task)), delta(delta) {}
Sequence::SequencedTask::SequencedTask(Sequence::SequencedTask&& other)
: task(std::move(other.task)), delta(other.delta) {}
Sequence::SequencedTask::~SequencedTask() = default;
Sequence::Sequence() = default;
Sequence::~Sequence() = default;
void Sequence::Tick(base::TimeTicks now) {
if (!started_) {
started_ = true;
start_time_ = now;
}
auto delta = now - start_time_;
while (!empty() && tasks_.front().delta <= delta) {
std::move(tasks_.front().task).Run();
tasks_.pop_front();
}
}
void Sequence::Add(base::OnceCallback<void()> task, base::TimeDelta delta) {
DCHECK(empty() || tasks_.back().delta <= delta);
SequencedTask sequenced_task(std::move(task), delta);
tasks_.push_back(std::move(sequenced_task));
}
} // namespace vr