blob: bcb379405e3a7a54a7f80f7e66ec2d2b7ba637e6 [file] [log] [blame]
// Copyright 2020 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 "third_party/blink/renderer/platform/widget/compositing/widget_swap_queue.h"
namespace blink {
void WidgetSwapQueue::Queue(int source_frame_number,
VisualStateRequestCallback callback,
bool* is_first) {
base::AutoLock lock(lock_);
if (is_first)
*is_first = (queue_.count(source_frame_number) == 0);
queue_[source_frame_number].push_back(std::move(callback));
}
void WidgetSwapQueue::Drain(int source_frame_number) {
base::AutoLock lock(lock_);
auto end = queue_.upper_bound(source_frame_number);
for (auto i = queue_.begin(); i != end; i++) {
DCHECK(i->first <= source_frame_number);
std::move(i->second.begin(), i->second.end(),
std::back_inserter(next_callbacks_));
}
queue_.erase(queue_.begin(), end);
}
void WidgetSwapQueue::GetCallbacks(
Vector<VisualStateRequestCallback>* callbacks) {
std::move(next_callbacks_.begin(), next_callbacks_.end(),
std::back_inserter(*callbacks));
next_callbacks_.clear();
}
} // namespace blink