Index: content/renderer/render_thread_impl.cc |
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
index 5e8db708edbb397c655e02f4a414fad57bd1aaff..ec28fe54cd9e1dc2da8eb7767577718c6a3dc9ef 100644 |
--- a/content/renderer/render_thread_impl.cc |
+++ b/content/renderer/render_thread_impl.cc |
@@ -406,6 +406,29 @@ void RenderThreadImpl::Init() { |
renderer_process_id_ = base::kNullProcessId; |
+ std::vector<base::DiscardableMemoryType> supported_types; |
+ base::DiscardableMemory::GetSupportedTypes(&supported_types); |
+ DCHECK(!supported_types.empty()); |
+ |
+ // The default preferred type is always the first one in list. |
+ base::DiscardableMemoryType type = supported_types[0]; |
+ |
+ if (command_line.HasSwitch(switches::kUseDiscardableMemory)) { |
+ std::string requested_type_name = command_line.GetSwitchValueASCII( |
+ switches::kUseDiscardableMemory); |
+ base::DiscardableMemoryType requested_type = |
+ base::DiscardableMemory::GetNamedType(requested_type_name); |
+ if (std::find(supported_types.begin(), |
+ supported_types.end(), |
+ requested_type) != supported_types.end()) { |
+ type = requested_type; |
+ } else { |
+ LOG(ERROR) << "Requested discardable memory type is not supported."; |
+ } |
+ } |
+ |
+ base::DiscardableMemory::SetPreferredType(type); |
+ |
// AllocateGpuMemoryBuffer must be used exclusively on one thread but |
// it doesn't have to be the same thread RenderThreadImpl is created on. |
allocate_gpu_memory_buffer_thread_checker_.DetachFromThread(); |