summaryrefslogtreecommitdiff
path: root/content/common/gpu/gpu_memory_manager.cc
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-11-06 12:27:47 +0000
committerTorne (Richard Coles) <torne@google.com>2013-11-06 12:27:47 +0000
commit0f1bc08d4cfcc34181b0b5cbf065c40f687bf740 (patch)
tree08e3fb2fdca3674ceb4d6cf527cb65e755cd993e /content/common/gpu/gpu_memory_manager.cc
parent0bdaf95291fc46702f274f40e8e5081e9ef23011 (diff)
downloadchromium_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.cc132
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_);
}