| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/discardable_memory/service/discardable_shared_memory_manage
r.h" | 5 #include "components/discardable_memory/service/discardable_shared_memory_manage
r.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/atomic_sequence_num.h" | 10 #include "base/atomic_sequence_num.h" |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/callback.h" | 12 #include "base/callback.h" |
| 13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 14 #include "base/debug/crash_logging.h" | 14 #include "base/debug/crash_logging.h" |
| 15 #include "base/lazy_instance.h" | |
| 16 #include "base/macros.h" | 15 #include "base/macros.h" |
| 17 #include "base/memory/discardable_memory.h" | 16 #include "base/memory/discardable_memory.h" |
| 18 #include "base/memory/memory_coordinator_client_registry.h" | 17 #include "base/memory/memory_coordinator_client_registry.h" |
| 19 #include "base/memory/ptr_util.h" | 18 #include "base/memory/ptr_util.h" |
| 20 #include "base/numerics/safe_math.h" | 19 #include "base/numerics/safe_math.h" |
| 21 #include "base/process/memory.h" | 20 #include "base/process/memory.h" |
| 22 #include "base/strings/string_number_conversions.h" | 21 #include "base/strings/string_number_conversions.h" |
| 23 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
| 24 #include "base/sys_info.h" | 23 #include "base/sys_info.h" |
| 25 #include "base/threading/thread_task_runner_handle.h" | 24 #include "base/threading/thread_task_runner_handle.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 max_default_memory_limit = | 199 max_default_memory_limit = |
| 201 std::min(max_default_memory_limit, shmem_dir_amount_of_free_space / 2); | 200 std::min(max_default_memory_limit, shmem_dir_amount_of_free_space / 2); |
| 202 } | 201 } |
| 203 #endif | 202 #endif |
| 204 | 203 |
| 205 // Allow 25% of physical memory to be used for discardable memory. | 204 // Allow 25% of physical memory to be used for discardable memory. |
| 206 return std::min(max_default_memory_limit, | 205 return std::min(max_default_memory_limit, |
| 207 base::SysInfo::AmountOfPhysicalMemory() / 4); | 206 base::SysInfo::AmountOfPhysicalMemory() / 4); |
| 208 } | 207 } |
| 209 | 208 |
| 210 base::LazyInstance<DiscardableSharedMemoryManager> | |
| 211 g_discardable_shared_memory_manager = LAZY_INSTANCE_INITIALIZER; | |
| 212 | |
| 213 const int kEnforceMemoryPolicyDelayMs = 1000; | 209 const int kEnforceMemoryPolicyDelayMs = 1000; |
| 214 | 210 |
| 215 // Global atomic to generate unique discardable shared memory IDs. | 211 // Global atomic to generate unique discardable shared memory IDs. |
| 216 base::StaticAtomicSequenceNumber g_next_discardable_shared_memory_id; | 212 base::StaticAtomicSequenceNumber g_next_discardable_shared_memory_id; |
| 217 | 213 |
| 218 } // namespace | 214 } // namespace |
| 219 | 215 |
| 220 DiscardableSharedMemoryManager::MemorySegment::MemorySegment( | 216 DiscardableSharedMemoryManager::MemorySegment::MemorySegment( |
| 221 std::unique_ptr<base::DiscardableSharedMemory> memory) | 217 std::unique_ptr<base::DiscardableSharedMemory> memory) |
| 222 : memory_(std::move(memory)) {} | 218 : memory_(std::move(memory)) {} |
| (...skipping 20 matching lines...) Expand all Loading... |
| 243 this, "DiscardableSharedMemoryManager", | 239 this, "DiscardableSharedMemoryManager", |
| 244 base::ThreadTaskRunnerHandle::Get()); | 240 base::ThreadTaskRunnerHandle::Get()); |
| 245 base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this); | 241 base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this); |
| 246 } | 242 } |
| 247 | 243 |
| 248 DiscardableSharedMemoryManager::~DiscardableSharedMemoryManager() { | 244 DiscardableSharedMemoryManager::~DiscardableSharedMemoryManager() { |
| 249 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( | 245 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
| 250 this); | 246 this); |
| 251 } | 247 } |
| 252 | 248 |
| 253 // static | |
| 254 DiscardableSharedMemoryManager* | |
| 255 DiscardableSharedMemoryManager::CreateInstance() { | |
| 256 DCHECK(g_discardable_shared_memory_manager == nullptr); | |
| 257 return g_discardable_shared_memory_manager.Pointer(); | |
| 258 } | |
| 259 | |
| 260 // static | |
| 261 DiscardableSharedMemoryManager* DiscardableSharedMemoryManager::GetInstance() { | |
| 262 DCHECK(!(g_discardable_shared_memory_manager == nullptr)); | |
| 263 return g_discardable_shared_memory_manager.Pointer(); | |
| 264 } | |
| 265 | |
| 266 void DiscardableSharedMemoryManager::Bind( | 249 void DiscardableSharedMemoryManager::Bind( |
| 267 mojom::DiscardableSharedMemoryManagerRequest request) { | 250 mojom::DiscardableSharedMemoryManagerRequest request) { |
| 268 mojo::MakeStrongBinding( | 251 mojo::MakeStrongBinding( |
| 269 base::MakeUnique<MojoDiscardableSharedMemoryManagerImpl>( | 252 base::MakeUnique<MojoDiscardableSharedMemoryManagerImpl>( |
| 270 next_client_id_++, this), | 253 next_client_id_++, this), |
| 271 std::move(request)); | 254 std::move(request)); |
| 272 } | 255 } |
| 273 | 256 |
| 274 std::unique_ptr<base::DiscardableMemory> | 257 std::unique_ptr<base::DiscardableMemory> |
| 275 DiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(size_t size) { | 258 DiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(size_t size) { |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 return; | 617 return; |
| 635 | 618 |
| 636 enforce_memory_policy_pending_ = true; | 619 enforce_memory_policy_pending_ = true; |
| 637 DCHECK(enforce_memory_policy_task_runner_); | 620 DCHECK(enforce_memory_policy_task_runner_); |
| 638 enforce_memory_policy_task_runner_->PostDelayedTask( | 621 enforce_memory_policy_task_runner_->PostDelayedTask( |
| 639 FROM_HERE, enforce_memory_policy_callback_, | 622 FROM_HERE, enforce_memory_policy_callback_, |
| 640 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs)); | 623 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs)); |
| 641 } | 624 } |
| 642 | 625 |
| 643 } // namespace discardable_memory | 626 } // namespace discardable_memory |
| OLD | NEW |