| Index: components/viz/frame_sinks/frame_evictor.cc
|
| diff --git a/components/viz/frame_sinks/frame_evictor.cc b/components/viz/frame_sinks/frame_evictor.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0207423adce69af8d7497204c89b57789286b79c
|
| --- /dev/null
|
| +++ b/components/viz/frame_sinks/frame_evictor.cc
|
| @@ -0,0 +1,56 @@
|
| +// 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 "components/viz/frame_sinks/frame_evictor.h"
|
| +
|
| +#include "base/logging.h"
|
| +
|
| +namespace viz {
|
| +
|
| +FrameEvictor::FrameEvictor(FrameEvictorClient* client)
|
| + : client_(client), has_frame_(false), visible_(false) {}
|
| +
|
| +FrameEvictor::~FrameEvictor() {
|
| + DiscardedFrame();
|
| +}
|
| +
|
| +void FrameEvictor::SwappedFrame(bool visible) {
|
| + visible_ = visible;
|
| + has_frame_ = true;
|
| + FrameEvictionManager::GetInstance()->AddFrame(this, visible);
|
| +}
|
| +
|
| +void FrameEvictor::DiscardedFrame() {
|
| + FrameEvictionManager::GetInstance()->RemoveFrame(this);
|
| + has_frame_ = false;
|
| +}
|
| +
|
| +void FrameEvictor::SetVisible(bool visible) {
|
| + if (visible_ == visible)
|
| + return;
|
| + visible_ = visible;
|
| + if (has_frame_) {
|
| + if (visible) {
|
| + LockFrame();
|
| + } else {
|
| + UnlockFrame();
|
| + }
|
| + }
|
| +}
|
| +
|
| +void FrameEvictor::LockFrame() {
|
| + DCHECK(has_frame_);
|
| + FrameEvictionManager::GetInstance()->LockFrame(this);
|
| +}
|
| +
|
| +void FrameEvictor::UnlockFrame() {
|
| + DCHECK(has_frame_);
|
| + FrameEvictionManager::GetInstance()->UnlockFrame(this);
|
| +}
|
| +
|
| +void FrameEvictor::EvictCurrentFrame() {
|
| + client_->EvictDelegatedFrame();
|
| +}
|
| +
|
| +} // namespace viz
|
|
|