1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/viz/client/frame_evictor.h"
6 
7 #include "base/logging.h"
8 
9 namespace viz {
10 
FrameEvictor(FrameEvictorClient * client)11 FrameEvictor::FrameEvictor(FrameEvictorClient* client) : client_(client) {}
12 
~FrameEvictor()13 FrameEvictor::~FrameEvictor() {
14   OnSurfaceDiscarded();
15 }
16 
OnNewSurfaceEmbedded()17 void FrameEvictor::OnNewSurfaceEmbedded() {
18   has_surface_ = true;
19   FrameEvictionManager::GetInstance()->AddFrame(this, visible_);
20 }
21 
OnSurfaceDiscarded()22 void FrameEvictor::OnSurfaceDiscarded() {
23   FrameEvictionManager::GetInstance()->RemoveFrame(this);
24   has_surface_ = false;
25 }
26 
SetVisible(bool visible)27 void FrameEvictor::SetVisible(bool visible) {
28   if (visible_ == visible)
29     return;
30   visible_ = visible;
31   if (has_surface_) {
32     if (visible)
33       FrameEvictionManager::GetInstance()->LockFrame(this);
34     else
35       FrameEvictionManager::GetInstance()->UnlockFrame(this);
36   }
37 }
38 
EvictCurrentFrame()39 void FrameEvictor::EvictCurrentFrame() {
40   client_->EvictDelegatedFrame();
41 }
42 
43 }  // namespace viz
44