X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontent%2Fbrowser%2Frenderer_host%2Frenderer_frame_manager.cc;h=0a93e2989438d20b8373ae99c6fe51a2b051a159;hb=8be7648e3bc188a587d5050c5a945c1099957e8b;hp=15c9814d61075f032ec5d3196f6eec2071c573d5;hpb=3cb1527a1d0111fd75188ac2c34c117944473076;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/content/browser/renderer_host/renderer_frame_manager.cc b/src/content/browser/renderer_host/renderer_frame_manager.cc index 15c9814..0a93e29 100644 --- a/src/content/browser/renderer_host/renderer_frame_manager.cc +++ b/src/content/browser/renderer_host/renderer_frame_manager.cc @@ -7,7 +7,9 @@ #include #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 { @@ -66,14 +68,26 @@ RendererFrameManager::RendererFrameManager() { #else std::min(5, 2 + (base::SysInfo::AmountOfPhysicalMemoryMB() / 256)); #endif + max_handles_ = base::SharedMemory::GetHandleLimit() / 8.0f; } RendererFrameManager::~RendererFrameManager() {} void RendererFrameManager::CullUnlockedFrames() { + uint32 saved_frame_limit = max_number_of_saved_frames(); + + if (unlocked_frames_.size() + locked_frames_.size() > 0) { + float handles_per_frame = + HostSharedBitmapManager::current()->AllocatedBitmapCount() * 1.0f / + (unlocked_frames_.size() + locked_frames_.size()); + + saved_frame_limit = std::max( + 1, + static_cast(std::min(static_cast(saved_frame_limit), + max_handles_ / handles_per_frame))); + } 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();