diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-11-06 12:27:47 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-11-06 12:27:47 +0000 |
commit | 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740 (patch) | |
tree | 08e3fb2fdca3674ceb4d6cf527cb65e755cd993e /content/common/gpu/gpu_memory_manager.cc | |
parent | 0bdaf95291fc46702f274f40e8e5081e9ef23011 (diff) | |
download | chromium_org-0f1bc08d4cfcc34181b0b5cbf065c40f687bf740.tar.gz |
Merge from Chromium at DEPS revision 232870
This commit was generated by merge_to_master.py.
Change-Id: I9cd2139013538e8bcd17966e8ff30ca5651d1a3d
Diffstat (limited to 'content/common/gpu/gpu_memory_manager.cc')
-rw-r--r-- | content/common/gpu/gpu_memory_manager.cc | 132 |
1 files changed, 1 insertions, 131 deletions
diff --git a/content/common/gpu/gpu_memory_manager.cc b/content/common/gpu/gpu_memory_manager.cc index df9b24b2d4..95b02bca11 100644 --- a/content/common/gpu/gpu_memory_manager.cc +++ b/content/common/gpu/gpu_memory_manager.cc @@ -59,8 +59,6 @@ GpuMemoryManager::GpuMemoryManager( bytes_minimum_per_client_(0), bytes_default_per_client_(0), bytes_allocated_managed_current_(0), - bytes_allocated_managed_visible_(0), - bytes_allocated_managed_nonvisible_(0), bytes_allocated_unmanaged_current_(0), bytes_allocated_historical_max_(0), bytes_allocated_unmanaged_high_(0), @@ -81,18 +79,6 @@ GpuMemoryManager::GpuMemoryManager( bytes_minimum_per_client_ = 64 * 1024 * 1024; #endif - // On Android, always discard everything that is nonvisible. - // On Linux and Mac, use as little memory as possible to avoid stability - // issues. - // http://crbug.com/145600 (Linux) - // http://crbug.com/141377 (Mac) -#if defined(OS_ANDROID) || defined(OS_MACOSX) || \ - (defined(OS_LINUX) && !defined(OS_CHROMEOS)) - allow_nonvisible_memory_ = false; -#else - allow_nonvisible_memory_ = true; -#endif - if (command_line->HasSwitch(switches::kForceGpuMemAvailableMb)) { base::StringToUint64( command_line->GetSwitchValueASCII(switches::kForceGpuMemAvailableMb), @@ -110,8 +96,6 @@ GpuMemoryManager::~GpuMemoryManager() { DCHECK(clients_nonsurface_.empty()); DCHECK(!bytes_allocated_managed_current_); DCHECK(!bytes_allocated_unmanaged_current_); - DCHECK(!bytes_allocated_managed_visible_); - DCHECK(!bytes_allocated_managed_nonvisible_); } uint64 GpuMemoryManager::GetAvailableGpuMemory() const { @@ -298,10 +282,6 @@ GpuMemoryManagerClientState* GpuMemoryManager::CreateClientState( GpuMemoryManagerClientState* client_state = new GpuMemoryManagerClientState( this, client, tracking_group, has_surface, visible); - TrackValueChanged(0, client_state->managed_memory_stats_.bytes_allocated, - client_state->visible_ ? - &bytes_allocated_managed_visible_ : - &bytes_allocated_managed_nonvisible_); AddClientToList(client_state); ScheduleManage(kScheduleManageNow); return client_state; @@ -310,10 +290,6 @@ GpuMemoryManagerClientState* GpuMemoryManager::CreateClientState( void GpuMemoryManager::OnDestroyClientState( GpuMemoryManagerClientState* client_state) { RemoveClientFromList(client_state); - TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated, 0, - client_state->visible_ ? - &bytes_allocated_managed_visible_ : - &bytes_allocated_managed_nonvisible_); ScheduleManage(kScheduleManageLater); } @@ -326,15 +302,6 @@ void GpuMemoryManager::SetClientStateVisible( RemoveClientFromList(client_state); client_state->visible_ = visible; AddClientToList(client_state); - - TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated, 0, - client_state->visible_ ? - &bytes_allocated_managed_nonvisible_ : - &bytes_allocated_managed_visible_); - TrackValueChanged(0, client_state->managed_memory_stats_.bytes_allocated, - client_state->visible_ ? - &bytes_allocated_managed_visible_ : - &bytes_allocated_managed_nonvisible_); ScheduleManage(visible ? kScheduleManageNow : kScheduleManageLater); } @@ -342,11 +309,6 @@ void GpuMemoryManager::SetClientStateManagedMemoryStats( GpuMemoryManagerClientState* client_state, const ManagedMemoryStats& stats) { - TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated, - stats.bytes_allocated, - client_state->visible_ ? - &bytes_allocated_managed_visible_ : - &bytes_allocated_managed_nonvisible_); client_state->managed_memory_stats_ = stats; // If this is the first time that stats have been received for this @@ -501,17 +463,6 @@ uint64 GpuMemoryManager::ComputeClientAllocationWhenVisible( return allocation; } -uint64 GpuMemoryManager::ComputeClientAllocationWhenNonvisible( - GpuMemoryManagerClientState* client_state) { - if (!client_state->managed_memory_stats_received_) - return 0; - - if (!allow_nonvisible_memory_) - return 0; - - return 9 * client_state->managed_memory_stats_.bytes_required / 8; -} - void GpuMemoryManager::ComputeVisibleSurfacesAllocations() { uint64 bytes_available_total = GetAvailableGpuMemory(); uint64 bytes_above_required_cap = std::numeric_limits<uint64>::max(); @@ -610,7 +561,7 @@ void GpuMemoryManager::ComputeVisibleSurfacesAllocations() { } // Set the limit for nonvisible clients for when they become visible. - // Use the same formula, with a lowered overall cap to in case any of the + // Use the same formula, with a lowered overall cap in case any of the // currently-nonvisible clients are much more resource-intensive than any // of the existing clients. uint64 bytes_overall_cap_nonvisible = bytes_allocated_max_client_allocation; @@ -633,75 +584,6 @@ void GpuMemoryManager::ComputeVisibleSurfacesAllocations() { } } -void GpuMemoryManager::ComputeNonvisibleSurfacesAllocations() { - uint64 bytes_allocated_visible = 0; - for (ClientStateList::const_iterator it = clients_visible_mru_.begin(); - it != clients_visible_mru_.end(); - ++it) { - GpuMemoryManagerClientState* client_state = *it; - bytes_allocated_visible += client_state->bytes_allocation_when_visible_; - } - - // Allow up to 1/4 of the memory that was available for visible clients to - // go to nonvisible clients. - uint64 bytes_available_total = GetAvailableGpuMemory(); - uint64 bytes_available_nonvisible = 0; - uint64 bytes_allocated_nonvisible = 0; - if (bytes_available_total > bytes_allocated_visible) { - bytes_available_nonvisible = std::min( - bytes_available_total / 4, - bytes_available_total - bytes_allocated_visible); - } - - // Determine which now-visible clients should keep their contents when - // they are made nonvisible. - for (ClientStateList::const_iterator it = clients_visible_mru_.begin(); - it != clients_visible_mru_.end(); - ++it) { - GpuMemoryManagerClientState* client_state = *it; - - // Compute the amount of space available have for this renderer when it is - // nonvisible. Do not count this client's allocation while visible against - // the nonvisible clients' allocation total. - uint64 bytes_available_nonvisible_adjusted = std::min( - bytes_available_nonvisible + - client_state->bytes_allocation_when_visible_ / 4, - bytes_available_total / 4); - - // Allow this client to keep its contents if they fit in the allocation. - client_state->bytes_allocation_when_nonvisible_ = - ComputeClientAllocationWhenNonvisible(client_state); - if (client_state->bytes_allocation_when_nonvisible_ > - bytes_available_nonvisible_adjusted) - client_state->bytes_allocation_when_nonvisible_ = 0; - } - - // Compute which currently nonvisible clients should keep their contents. - for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin(); - it != clients_nonvisible_mru_.end(); - ++it) { - GpuMemoryManagerClientState* client_state = *it; - - // If this client is nonvisible and has already had its contents discarded, - // don't re-generate the contents until the client becomes visible again. - if (!client_state->bytes_allocation_when_nonvisible_) - continue; - - client_state->bytes_allocation_when_nonvisible_ = - ComputeClientAllocationWhenNonvisible(client_state); - - // Take into account all more recently used nonvisible clients, and only if - // this client still fits, all it to keep its contents. - if (bytes_allocated_nonvisible + - client_state->bytes_allocation_when_nonvisible_ > - bytes_available_nonvisible) { - client_state->bytes_allocation_when_nonvisible_ = 0; - } - bytes_allocated_nonvisible += - client_state->bytes_allocation_when_nonvisible_; - } -} - void GpuMemoryManager::DistributeRemainingMemoryToVisibleSurfaces() { uint64 bytes_available_total = GetAvailableGpuMemory(); uint64 bytes_allocated_total = 0; @@ -712,12 +594,6 @@ void GpuMemoryManager::DistributeRemainingMemoryToVisibleSurfaces() { GpuMemoryManagerClientState* client_state = *it; bytes_allocated_total += client_state->bytes_allocation_when_visible_; } - for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin(); - it != clients_nonvisible_mru_.end(); - ++it) { - GpuMemoryManagerClientState* client_state = *it; - bytes_allocated_total += client_state->bytes_allocation_when_nonvisible_; - } if (bytes_allocated_total >= bytes_available_total) return; @@ -749,7 +625,6 @@ void GpuMemoryManager::DistributeRemainingMemoryToVisibleSurfaces() { void GpuMemoryManager::AssignSurfacesAllocations() { // Compute allocation when for all clients. ComputeVisibleSurfacesAllocations(); - ComputeNonvisibleSurfacesAllocations(); // Distribute the remaining memory to visible clients. DistributeRemainingMemoryToVisibleSurfaces(); @@ -787,11 +662,6 @@ void GpuMemoryManager::AssignSurfacesAllocations() { MemoryAllocation::CUTOFF_ALLOW_EVERYTHING; #endif - allocation.bytes_limit_when_not_visible = - client_state->bytes_allocation_when_nonvisible_; - allocation.priority_cutoff_when_not_visible = - MemoryAllocation::CUTOFF_ALLOW_REQUIRED_ONLY; - client_state->client_->SetMemoryAllocation(allocation); client_state->client_->SuggestHaveFrontBuffer(!client_state->hibernated_); } |