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 "content/common/host_discardable_shared_memory_manager.h" | 5 #include "content/common/host_discardable_shared_memory_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 std::min(base::SysInfo::AmountOfPhysicalMemory() / 4, | 116 std::min(base::SysInfo::AmountOfPhysicalMemory() / 4, |
117 base::SysInfo::IsLowEndDevice() | 117 base::SysInfo::IsLowEndDevice() |
118 ? | 118 ? |
119 // Use 1/8th of discardable memory on low-end devices. | 119 // Use 1/8th of discardable memory on low-end devices. |
120 kMaxDefaultMemoryLimit / 8 | 120 kMaxDefaultMemoryLimit / 8 |
121 : kMaxDefaultMemoryLimit)), | 121 : kMaxDefaultMemoryLimit)), |
122 bytes_allocated_(0), | 122 bytes_allocated_(0), |
123 memory_pressure_listener_(new base::MemoryPressureListener( | 123 memory_pressure_listener_(new base::MemoryPressureListener( |
124 base::Bind(&HostDiscardableSharedMemoryManager::OnMemoryPressure, | 124 base::Bind(&HostDiscardableSharedMemoryManager::OnMemoryPressure, |
125 base::Unretained(this)))), | 125 base::Unretained(this)))), |
| 126 // Current thread might not have a task runner in tests. |
| 127 enforce_memory_policy_task_runner_( |
| 128 base::ThreadTaskRunnerHandle::IsSet() |
| 129 ? base::ThreadTaskRunnerHandle::Get() |
| 130 : nullptr), |
126 enforce_memory_policy_pending_(false), | 131 enforce_memory_policy_pending_(false), |
127 weak_ptr_factory_(this) { | 132 weak_ptr_factory_(this) { |
128 DCHECK_NE(memory_limit_, 0u); | 133 DCHECK_NE(memory_limit_, 0u); |
| 134 enforce_memory_policy_callback_ = |
| 135 base::Bind(&HostDiscardableSharedMemoryManager::EnforceMemoryPolicy, |
| 136 weak_ptr_factory_.GetWeakPtr()); |
129 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | 137 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
130 this); | 138 this); |
131 } | 139 } |
132 | 140 |
133 HostDiscardableSharedMemoryManager::~HostDiscardableSharedMemoryManager() { | 141 HostDiscardableSharedMemoryManager::~HostDiscardableSharedMemoryManager() { |
134 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( | 142 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
135 this); | 143 this); |
136 } | 144 } |
137 | 145 |
138 HostDiscardableSharedMemoryManager* | 146 HostDiscardableSharedMemoryManager* |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 return base::Time::Now(); | 487 return base::Time::Now(); |
480 } | 488 } |
481 | 489 |
482 void HostDiscardableSharedMemoryManager::ScheduleEnforceMemoryPolicy() { | 490 void HostDiscardableSharedMemoryManager::ScheduleEnforceMemoryPolicy() { |
483 lock_.AssertAcquired(); | 491 lock_.AssertAcquired(); |
484 | 492 |
485 if (enforce_memory_policy_pending_) | 493 if (enforce_memory_policy_pending_) |
486 return; | 494 return; |
487 | 495 |
488 enforce_memory_policy_pending_ = true; | 496 enforce_memory_policy_pending_ = true; |
489 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 497 DCHECK(enforce_memory_policy_task_runner_); |
490 FROM_HERE, | 498 enforce_memory_policy_task_runner_->PostDelayedTask( |
491 base::Bind(&HostDiscardableSharedMemoryManager::EnforceMemoryPolicy, | 499 FROM_HERE, enforce_memory_policy_callback_, |
492 weak_ptr_factory_.GetWeakPtr()), | |
493 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs)); | 500 base::TimeDelta::FromMilliseconds(kEnforceMemoryPolicyDelayMs)); |
494 } | 501 } |
495 | 502 |
496 } // namespace content | 503 } // namespace content |
OLD | NEW |