| Index: cc/output/promise_list.cc
|
| diff --git a/cc/output/promise_list.cc b/cc/output/promise_list.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ce45b1602542fdb47ab2bfcf3990f2ca8602f486
|
| --- /dev/null
|
| +++ b/cc/output/promise_list.cc
|
| @@ -0,0 +1,73 @@
|
| +// Copyright 2015 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 "cc/output/promise_list.h"
|
| +
|
| +namespace cc {
|
| +
|
| +PromiseList::PromiseList() : promises_() {
|
| +}
|
| +
|
| +PromiseList::~PromiseList() {
|
| + promises_.clear();
|
| +}
|
| +
|
| +void PromiseList::QueuePromise(scoped_ptr<Promise> promise) {
|
| + DCHECK(promise);
|
| + promises_.push_back(promise.Pass());
|
| +}
|
| +
|
| +void PromiseList::PassPromises(PromiseList* other) {
|
| + other->TakePromises(this);
|
| +}
|
| +
|
| +void PromiseList::TakePromises(PromiseList* other) {
|
| + promises_.insert_and_take(promises_.end(), &other->promises_);
|
| + other->promises_.clear();
|
| +}
|
| +
|
| +namespace {
|
| +
|
| +template <typename functor>
|
| +void ResolvePromises(ScopedPtrVector<Promise>& promises, functor f) {
|
| + promises.erase(promises.remove_if(f), promises.end());
|
| +}
|
| +
|
| +}
|
| +
|
| +void PromiseList::OnDidSwap(CompositorFrameMetadata* metadata) {
|
| + ResolvePromises(promises_,
|
| + [metadata](Promise* promise) -> bool {
|
| + return promise->OnDidSwap(metadata);
|
| + });
|
| +}
|
| +
|
| +void PromiseList::OnDidNotSwap(Promise::DidNotSwap::Reason reason) {
|
| + ResolvePromises(promises_,
|
| + [reason](Promise* promise) -> bool {
|
| + return promise->OnDidNotSwap(reason);
|
| + });
|
| +}
|
| +
|
| +void PromiseList::OnDidActivate(CompositorFrameMetadata* metadata) {
|
| + ResolvePromises(promises_,
|
| + [metadata](Promise* promise) -> bool {
|
| + return promise->OnDidActivate(metadata);
|
| + });
|
| +}
|
| +
|
| +void PromiseList::OnDidNotActivate(Promise::DidNotActivate::Reason reason) {
|
| + ResolvePromises(promises_,
|
| + [reason](Promise* promise) -> bool {
|
| + return promise->OnDidNotActivate(reason);
|
| + });
|
| +}
|
| +
|
| +void PromiseList::GetTraceIds(std::vector<int64>* trace_ids) const {
|
| + trace_ids->clear();
|
| + std::transform(
|
| + promises_.begin(), promises_.end(), std::back_inserter(*trace_ids),
|
| + [](const Promise* promise) -> int64 { return promise->TraceId(); });
|
| +}
|
| +}
|
|
|