| Index: cc/surfaces/primary_begin_frame_source.cc
|
| diff --git a/cc/surfaces/primary_begin_frame_source.cc b/cc/surfaces/primary_begin_frame_source.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e8ec7b61e9c8409d7d4efae0e9244552cb875271
|
| --- /dev/null
|
| +++ b/cc/surfaces/primary_begin_frame_source.cc
|
| @@ -0,0 +1,92 @@
|
| +// 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.
|
| +
|
| +#include "cc/surfaces/primary_begin_frame_source.h"
|
| +#include "cc/surfaces/frame_sink_manager.h"
|
| +
|
| +namespace cc {
|
| +
|
| +PrimaryBeginFrameSource::PrimaryBeginFrameSource() = default;
|
| +
|
| +PrimaryBeginFrameSource::~PrimaryBeginFrameSource() {
|
| + frame_sink_manager_->RemoveObserver(this);
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::Init(FrameSinkManager* frame_sink_manager) {
|
| + frame_sink_manager_ = frame_sink_manager;
|
| + frame_sink_manager_->AddObserver(this);
|
| + begin_frame_source_ = base::MakeUnique<ExternalBeginFrameSource>(this);
|
| + primary_begin_frame_source_ =
|
| + frame_sink_manager_->GetPrimaryBeginFrameSource();
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) {
|
| + begin_frame_source_->OnBeginFrame(args);
|
| + last_begin_frame_args_ = args;
|
| +}
|
| +
|
| +const BeginFrameArgs& PrimaryBeginFrameSource::LastUsedBeginFrameArgs() const {
|
| + return last_begin_frame_args_;
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::OnBeginFrameSourcePausedChanged(bool paused) {}
|
| +
|
| +void PrimaryBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs,
|
| + const BeginFrameAck& ack) {
|
| + begin_frame_source_->DidFinishFrame(obs, ack);
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
|
| + begin_frame_source_->AddObserver(obs);
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
|
| + begin_frame_source_->RemoveObserver(obs);
|
| +}
|
| +
|
| +bool PrimaryBeginFrameSource::IsThrottled() const {
|
| + return begin_frame_source_->IsThrottled();
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::OnNeedsBeginFrames(bool needs_begin_frames) {
|
| + if (needs_begin_frames_ == needs_begin_frames)
|
| + return;
|
| +
|
| + needs_begin_frames_ = needs_begin_frames;
|
| +
|
| + if (!primary_begin_frame_source_)
|
| + return;
|
| +
|
| + if (needs_begin_frames_)
|
| + primary_begin_frame_source_->AddObserver(this);
|
| + else
|
| + primary_begin_frame_source_->RemoveObserver(this);
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::OnBeginFrameSourceAdded(
|
| + BeginFrameSource* begin_frame_source) {
|
| + if (primary_begin_frame_source_)
|
| + return;
|
| +
|
| + primary_begin_frame_source_ = begin_frame_source;
|
| + if (needs_begin_frames_ && primary_begin_frame_source_)
|
| + primary_begin_frame_source_->AddObserver(this);
|
| +}
|
| +
|
| +void PrimaryBeginFrameSource::OnBeginFrameSourceRemoved(
|
| + BeginFrameSource* begin_frame_source) {
|
| + if (primary_begin_frame_source_ != begin_frame_source)
|
| + return;
|
| +
|
| + if (needs_begin_frames_)
|
| + primary_begin_frame_source_->RemoveObserver(this);
|
| +
|
| + primary_begin_frame_source_ =
|
| + frame_sink_manager_->GetPrimaryBeginFrameSource();
|
| +
|
| + if (needs_begin_frames_ && primary_begin_frame_source_)
|
| + primary_begin_frame_source_->AddObserver(this);
|
| +}
|
| +
|
| +} // namespace cc
|
|
|