1 // Copyright 2013 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.
5 #include "content/browser/renderer_host/renderer_frame_manager.h"
7 #include "base/logging.h"
8 #include "base/sys_info.h"
12 RendererFrameManager* RendererFrameManager::GetInstance() {
13 return Singleton<RendererFrameManager>::get();
16 void RendererFrameManager::AddFrame(RendererFrameManagerClient* frame,
20 visible_frames_.insert(frame);
22 hidden_frames_.push_front(frame);
26 void RendererFrameManager::RemoveFrame(RendererFrameManagerClient* frame) {
27 visible_frames_.erase(frame);
28 hidden_frames_.remove(frame);
31 void RendererFrameManager::SetFrameVisibility(RendererFrameManagerClient* frame,
34 hidden_frames_.remove(frame);
35 visible_frames_.insert(frame);
37 visible_frames_.erase(frame);
38 hidden_frames_.push_front(frame);
43 RendererFrameManager::RendererFrameManager()
44 : max_number_of_saved_frames_(
45 std::min(5, 2 + (base::SysInfo::AmountOfPhysicalMemoryMB() / 256))) {}
47 RendererFrameManager::~RendererFrameManager() {}
49 void RendererFrameManager::CullHiddenFrames() {
50 while (!hidden_frames_.empty() &&
51 hidden_frames_.size() + visible_frames_.size() >
52 max_number_of_saved_frames()) {
53 size_t old_size = hidden_frames_.size();
54 // Should remove self from list.
55 hidden_frames_.back()->EvictCurrentFrame();
56 DCHECK_EQ(hidden_frames_.size() + 1, old_size);
60 } // namespace content