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 
8 namespace viz {
9 
FrameEvictor(FrameEvictorClient * client)10 FrameEvictor::FrameEvictor(FrameEvictorClient* client) : client_(client) {}
11 
~FrameEvictor()12 FrameEvictor::~FrameEvictor() {
13   OnSurfaceDiscarded();
14 }
15 
OnNewSurfaceEmbedded()16 void FrameEvictor::OnNewSurfaceEmbedded() {
17   has_surface_ = true;
18   FrameEvictionManager::GetInstance()->AddFrame(this, visible_);
19 }
20 
OnSurfaceDiscarded()21 void FrameEvictor::OnSurfaceDiscarded() {
22   FrameEvictionManager::GetInstance()->RemoveFrame(this);
23   has_surface_ = false;
24 }
25 
SetVisible(bool visible)26 void FrameEvictor::SetVisible(bool visible) {
27   if (visible_ == visible)
28     return;
29   visible_ = visible;
30   if (has_surface_) {
31     if (visible)
32       FrameEvictionManager::GetInstance()->LockFrame(this);
33     else
34       FrameEvictionManager::GetInstance()->UnlockFrame(this);
35   }
36 }
37 
EvictCurrentFrame()38 void FrameEvictor::EvictCurrentFrame() {
39   client_->EvictDelegatedFrame();
40 }
41 
42 }  // namespace viz
43