| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <utility> |
| |
| #include "base/command_line.h" |
| #include "base/memory/discardable_memory.h" |
| #include "content/child/child_process.h" |
| #include "content/child/child_thread_impl.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/renderer/discardable_memory_utils.h" |
| |
| #if defined(OS_POSIX) |
| #include <sys/mman.h> |
| #include <sys/utsname.h> |
| |
| #include "base/memory/madv_free_discardable_memory_allocator_posix.h" |
| #include "base/memory/madv_free_discardable_memory_posix.h" |
| #endif |
| |
| #if defined(OS_ANDROID) |
| #include <third_party/ashmem/ashmem.h> |
| #endif |
| |
| namespace content { |
| |
| std::unique_ptr<base::DiscardableMemoryAllocator> |
| CreateDiscardableMemoryAllocator() { |
| #if defined(OS_POSIX) |
| if (base::GetDiscardableMemoryBacking() == |
| base::DiscardableMemoryBacking::kMadvFree) { |
| DVLOG(1) << "Using MADV_FREE for discardable memory"; |
| return std::make_unique<base::MadvFreeDiscardableMemoryAllocatorPosix>(); |
| } |
| #endif // defined(OS_POSIX) |
| DVLOG(1) << "Using shared memory for discardable memory"; |
| |
| mojo::PendingRemote<discardable_memory::mojom::DiscardableSharedMemoryManager> |
| manager_remote; |
| ChildThread::Get()->BindHostReceiver( |
| manager_remote.InitWithNewPipeAndPassReceiver()); |
| return std::make_unique< |
| discardable_memory::ClientDiscardableSharedMemoryManager>( |
| std::move(manager_remote), ChildProcess::current()->io_task_runner()); |
| } |
| |
| } // namespace content |