Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: content/browser/memory/memory_coordinator_impl.cc

Issue 2565323002: Stop using callbacks in MemoryCoordinatorProxy (Closed)
Patch Set: fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/browser/memory/memory_coordinator_impl.h" 5 #include "content/browser/memory/memory_coordinator_impl.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/process/process_metrics.h" 8 #include "base/process/process_metrics.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 void MemoryCoordinatorImpl::OnChildAdded(int render_process_id) { 185 void MemoryCoordinatorImpl::OnChildAdded(int render_process_id) {
186 // Populate the global state as an initial state of a newly created process. 186 // Populate the global state as an initial state of a newly created process.
187 auto new_state = ToMojomMemoryState(GetGlobalMemoryState()); 187 auto new_state = ToMojomMemoryState(GetGlobalMemoryState());
188 SetChildMemoryState(render_process_id, new_state); 188 SetChildMemoryState(render_process_id, new_state);
189 } 189 }
190 190
191 base::MemoryState MemoryCoordinatorImpl::GetGlobalMemoryState() const { 191 base::MemoryState MemoryCoordinatorImpl::GetGlobalMemoryState() const {
192 return current_state_; 192 return current_state_;
193 } 193 }
194 194
195 base::MemoryState MemoryCoordinatorImpl::GetCurrentMemoryState() const { 195 base::WeakPtr<base::MemoryCoordinatorInterface>
196 MemoryCoordinatorImpl::GetWeakPtr() {
197 return weak_ptr_factory_.GetWeakPtr();
198 }
199
200 base::MemoryState MemoryCoordinatorImpl::GetLocalMemoryState() {
196 // SUSPENDED state may not make sense to the browser process. Use THROTTLED 201 // SUSPENDED state may not make sense to the browser process. Use THROTTLED
197 // instead when the global state is SUSPENDED. 202 // instead when the global state is SUSPENDED.
198 // TODO(bashi): Maybe worth considering another state for the browser. 203 // TODO(bashi): Maybe worth considering another state for the browser.
199 return current_state_ == MemoryState::SUSPENDED ? MemoryState::THROTTLED 204 return current_state_ == MemoryState::SUSPENDED ? MemoryState::THROTTLED
200 : current_state_; 205 : current_state_;
201 } 206 }
202 207
203 void MemoryCoordinatorImpl::SetCurrentMemoryStateForTesting( 208 void MemoryCoordinatorImpl::SetMemoryStateForTesting(
204 base::MemoryState memory_state) { 209 base::MemoryState memory_state) {
205 // This changes the current state temporariy for testing. The state will be 210 // This changes the current state temporariy for testing. The state will be
206 // updated 1 minute later. 211 // updated 1 minute later.
207 ForceSetGlobalState(memory_state, base::TimeDelta::FromMinutes(1)); 212 ForceSetGlobalState(memory_state, base::TimeDelta::FromMinutes(1));
208 } 213 }
209 214
210 void MemoryCoordinatorImpl::ForceSetGlobalState(base::MemoryState new_state, 215 void MemoryCoordinatorImpl::ForceSetGlobalState(base::MemoryState new_state,
211 base::TimeDelta duration) { 216 base::TimeDelta duration) {
212 DCHECK(new_state != MemoryState::UNKNOWN); 217 DCHECK(new_state != MemoryState::UNKNOWN);
213 ChangeStateIfNeeded(current_state_, new_state); 218 ChangeStateIfNeeded(current_state_, new_state);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 void MemoryCoordinatorImpl::UpdateState() { 299 void MemoryCoordinatorImpl::UpdateState() {
295 MemoryState next_state = CalculateNextState(); 300 MemoryState next_state = CalculateNextState();
296 if (ChangeStateIfNeeded(current_state_, next_state)) { 301 if (ChangeStateIfNeeded(current_state_, next_state)) {
297 ScheduleUpdateState(minimum_transition_period_); 302 ScheduleUpdateState(minimum_transition_period_);
298 } else { 303 } else {
299 ScheduleUpdateState(monitoring_interval_); 304 ScheduleUpdateState(monitoring_interval_);
300 } 305 }
301 } 306 }
302 307
303 void MemoryCoordinatorImpl::NotifyStateToClients() { 308 void MemoryCoordinatorImpl::NotifyStateToClients() {
304 auto state = GetCurrentMemoryState(); 309 auto state = GetLocalMemoryState();
305 base::MemoryCoordinatorClientRegistry::GetInstance()->Notify(state); 310 base::MemoryCoordinatorClientRegistry::GetInstance()->Notify(state);
306 } 311 }
307 312
308 void MemoryCoordinatorImpl::NotifyStateToChildren() { 313 void MemoryCoordinatorImpl::NotifyStateToChildren() {
309 auto mojo_state = ToMojomMemoryState(current_state_); 314 auto mojo_state = ToMojomMemoryState(current_state_);
310 // It's OK to call SetChildMemoryState() unconditionally because it checks 315 // It's OK to call SetChildMemoryState() unconditionally because it checks
311 // whether this state transition is valid. 316 // whether this state transition is valid.
312 for (auto& iter : children()) 317 for (auto& iter : children())
313 SetChildMemoryState(iter.first, mojo_state); 318 SetChildMemoryState(iter.first, mojo_state);
314 } 319 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 } 386 }
382 387
383 bool MemoryCoordinatorImpl::ValidateParameters() { 388 bool MemoryCoordinatorImpl::ValidateParameters() {
384 return (new_renderers_until_throttled_ > new_renderers_until_suspended_) && 389 return (new_renderers_until_throttled_ > new_renderers_until_suspended_) &&
385 (new_renderers_back_to_normal_ > new_renderers_back_to_throttled_) && 390 (new_renderers_back_to_normal_ > new_renderers_back_to_throttled_) &&
386 (new_renderers_back_to_normal_ > new_renderers_until_throttled_) && 391 (new_renderers_back_to_normal_ > new_renderers_until_throttled_) &&
387 (new_renderers_back_to_throttled_ > new_renderers_until_suspended_); 392 (new_renderers_back_to_throttled_ > new_renderers_until_suspended_);
388 } 393 }
389 394
390 } // namespace content 395 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698