Chromium Code Reviews| Index: content/browser/renderer_host/renderer_frame_manager.cc |
| diff --git a/content/browser/renderer_host/renderer_frame_manager.cc b/content/browser/renderer_host/renderer_frame_manager.cc |
| index 15c9814d61075f032ec5d3196f6eec2071c573d5..8ad31c42fb61609b8e435562acb93450573c22a2 100644 |
| --- a/content/browser/renderer_host/renderer_frame_manager.cc |
| +++ b/content/browser/renderer_host/renderer_frame_manager.cc |
| @@ -7,7 +7,9 @@ |
| #include <algorithm> |
| #include "base/logging.h" |
| +#include "base/memory/shared_memory.h" |
| #include "base/sys_info.h" |
| +#include "content/common/host_shared_bitmap_manager.h" |
| namespace content { |
| @@ -71,9 +73,23 @@ RendererFrameManager::RendererFrameManager() { |
| RendererFrameManager::~RendererFrameManager() {} |
| void RendererFrameManager::CullUnlockedFrames() { |
| + uint32 saved_frame_limit = max_number_of_saved_frames(); |
| + |
| + if (saved_frame_limit > 2) { |
| + // Reduce the number of saved frames to attempt to limit browser to using at |
| + // most 1/8 of the available shared memory handles. This is only a soft |
| + // limit, and it may go over as necessary. |
| + const float kHandleMaxFraction = 1 / 8.0f; |
| + float memory_handle_fraction = |
| + HostSharedBitmapManager::current()->AllocatedBitmapCount() * 1.0f / |
| + base::SharedMemory::GetHandleLimit(); |
| + float fraction_to_reduce = |
| + std::min(1.0f, memory_handle_fraction / kHandleMaxFraction); |
| + saved_frame_limit -= |
| + static_cast<uint32>((saved_frame_limit - 2) * fraction_to_reduce); |
|
piman
2014/04/23 00:32:02
I'm not sure I agree with this computation. If we'
|
| + } |
|
piman
2014/04/23 00:32:02
RenderWidgetHostViewAuraTest.DiscardDelegatedFrame
|
| while (!unlocked_frames_.empty() && |
| - unlocked_frames_.size() + locked_frames_.size() > |
| - max_number_of_saved_frames()) { |
| + unlocked_frames_.size() + locked_frames_.size() > saved_frame_limit) { |
| size_t old_size = unlocked_frames_.size(); |
| // Should remove self from list. |
| unlocked_frames_.back()->EvictCurrentFrame(); |