| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/common/gpu/gpu_memory_manager.h" | 5 #include "content/common/gpu/gpu_memory_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 bytes_minimum_per_client_ = 16 * 1024 * 1024; | 72 bytes_minimum_per_client_ = 16 * 1024 * 1024; |
| 73 #elif defined(OS_CHROMEOS) | 73 #elif defined(OS_CHROMEOS) |
| 74 bytes_default_per_client_ = 64 * 1024 * 1024; | 74 bytes_default_per_client_ = 64 * 1024 * 1024; |
| 75 bytes_minimum_per_client_ = 4 * 1024 * 1024; | 75 bytes_minimum_per_client_ = 4 * 1024 * 1024; |
| 76 #else | 76 #else |
| 77 bytes_default_per_client_ = 64 * 1024 * 1024; | 77 bytes_default_per_client_ = 64 * 1024 * 1024; |
| 78 bytes_minimum_per_client_ = 64 * 1024 * 1024; | 78 bytes_minimum_per_client_ = 64 * 1024 * 1024; |
| 79 #endif | 79 #endif |
| 80 | 80 |
| 81 // On Android, always discard everything that is nonvisible. | 81 // On Android, always discard everything that is nonvisible. |
| 82 // On Mac, use as little memory as possible to avoid stability issues. | 82 // On Linux and Mac, use as little memory as possible to avoid stability |
| 83 #if defined(OS_ANDROID) || defined(OS_MACOSX) | 83 // issues. |
| 84 // http://crbug.com/145600 (Linux) |
| 85 // http://crbug.com/141377 (Mac) |
| 86 #if defined(OS_ANDROID) || defined(OS_MACOSX) || \ |
| 87 (defined(OS_LINUX) && !defined(OS_CHROMEOS)) |
| 84 allow_nonvisible_memory_ = false; | 88 allow_nonvisible_memory_ = false; |
| 85 #else | 89 #else |
| 86 allow_nonvisible_memory_ = true; | 90 allow_nonvisible_memory_ = true; |
| 87 #endif | 91 #endif |
| 88 | 92 |
| 89 if (command_line->HasSwitch(switches::kForceGpuMemAvailableMb)) { | 93 if (command_line->HasSwitch(switches::kForceGpuMemAvailableMb)) { |
| 90 base::StringToUint64( | 94 base::StringToUint64( |
| 91 command_line->GetSwitchValueASCII(switches::kForceGpuMemAvailableMb), | 95 command_line->GetSwitchValueASCII(switches::kForceGpuMemAvailableMb), |
| 92 &bytes_available_gpu_memory_); | 96 &bytes_available_gpu_memory_); |
| 93 bytes_available_gpu_memory_ *= 1024 * 1024; | 97 bytes_available_gpu_memory_ *= 1024 * 1024; |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 3 * client_state->managed_memory_stats_.bytes_nice_to_have / 4; | 771 3 * client_state->managed_memory_stats_.bytes_nice_to_have / 4; |
| 768 | 772 |
| 769 // Populate and send the allocation to the client | 773 // Populate and send the allocation to the client |
| 770 GpuMemoryAllocation allocation; | 774 GpuMemoryAllocation allocation; |
| 771 | 775 |
| 772 allocation.browser_allocation.suggest_have_frontbuffer = | 776 allocation.browser_allocation.suggest_have_frontbuffer = |
| 773 !client_state->hibernated_; | 777 !client_state->hibernated_; |
| 774 | 778 |
| 775 allocation.renderer_allocation.bytes_limit_when_visible = | 779 allocation.renderer_allocation.bytes_limit_when_visible = |
| 776 client_state->bytes_allocation_when_visible_; | 780 client_state->bytes_allocation_when_visible_; |
| 777 // Use a more conservative memory allocation policy on Mac because the | 781 // Use a more conservative memory allocation policy on Linux and Mac |
| 778 // platform is unstable when under memory pressure. | 782 // because the platform is unstable when under memory pressure. |
| 779 // http://crbug.com/141377 | 783 // http://crbug.com/145600 (Linux) |
| 784 // http://crbug.com/141377 (Mac) |
| 780 allocation.renderer_allocation.priority_cutoff_when_visible = | 785 allocation.renderer_allocation.priority_cutoff_when_visible = |
| 781 #if defined(OS_MACOSX) | 786 #if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) |
| 782 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowNiceToHave; | 787 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowNiceToHave; |
| 783 #else | 788 #else |
| 784 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowEverything; | 789 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowEverything; |
| 785 #endif | 790 #endif |
| 786 | 791 |
| 787 allocation.renderer_allocation.bytes_limit_when_not_visible = | 792 allocation.renderer_allocation.bytes_limit_when_not_visible = |
| 788 client_state->bytes_allocation_when_nonvisible_; | 793 client_state->bytes_allocation_when_nonvisible_; |
| 789 allocation.renderer_allocation.priority_cutoff_when_not_visible = | 794 allocation.renderer_allocation.priority_cutoff_when_not_visible = |
| 790 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowOnlyRequired; | 795 GpuMemoryAllocationForRenderer::kPriorityCutoffAllowOnlyRequired; |
| 791 | 796 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 | 894 |
| 890 void GpuMemoryManager::RemoveClientFromList( | 895 void GpuMemoryManager::RemoveClientFromList( |
| 891 GpuMemoryManagerClientState* client_state) { | 896 GpuMemoryManagerClientState* client_state) { |
| 892 DCHECK(client_state->list_iterator_valid_); | 897 DCHECK(client_state->list_iterator_valid_); |
| 893 ClientStateList* client_list = GetClientList(client_state); | 898 ClientStateList* client_list = GetClientList(client_state); |
| 894 client_list->erase(client_state->list_iterator_); | 899 client_list->erase(client_state->list_iterator_); |
| 895 client_state->list_iterator_valid_ = false; | 900 client_state->list_iterator_valid_ = false; |
| 896 } | 901 } |
| 897 | 902 |
| 898 } // namespace content | 903 } // namespace content |
| OLD | NEW |