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

Side by Side Diff: content/child/memory/child_memory_coordinator_impl.cc

Issue 2479673002: Expose MemoryCoordinator's global budget information. (Closed)
Patch Set: Small cleanup. Created 4 years, 1 month 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/child/memory/child_memory_coordinator_impl.h" 5 #include "content/child/memory/child_memory_coordinator_impl.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/memory/memory_coordinator_client_registry.h" 8 #include "base/memory/memory_coordinator_client_registry.h"
9 #include "base/memory/memory_coordinator_proxy.h"
9 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
10 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
11 12
12 namespace content { 13 namespace content {
13 14
14 namespace { 15 namespace {
15 16
16 base::LazyInstance<base::Lock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER; 17 base::LazyInstance<base::Lock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER;
17 ChildMemoryCoordinatorImpl* g_child_memory_coordinator = nullptr; 18 ChildMemoryCoordinatorImpl* g_child_memory_coordinator = nullptr;
18 19
19 base::MemoryState ToBaseMemoryState(mojom::MemoryState state) { 20 base::MemoryState ToBaseMemoryState(mojom::MemoryState state) {
20 switch (state) { 21 switch (state) {
21 case mojom::MemoryState::UNKNOWN: 22 case mojom::MemoryState::UNKNOWN:
22 return base::MemoryState::UNKNOWN; 23 return base::MemoryState::UNKNOWN;
23 case mojom::MemoryState::NORMAL: 24 case mojom::MemoryState::NORMAL:
24 return base::MemoryState::NORMAL; 25 return base::MemoryState::NORMAL;
25 case mojom::MemoryState::THROTTLED: 26 case mojom::MemoryState::THROTTLED:
26 return base::MemoryState::THROTTLED; 27 return base::MemoryState::THROTTLED;
27 case mojom::MemoryState::SUSPENDED: 28 case mojom::MemoryState::SUSPENDED:
28 return base::MemoryState::SUSPENDED; 29 return base::MemoryState::SUSPENDED;
29 default: 30 default:
30 NOTREACHED(); 31 NOTREACHED();
31 return base::MemoryState::UNKNOWN; 32 return base::MemoryState::UNKNOWN;
32 } 33 }
33 } 34 }
34 35
36 // Wrapper for GetCurrentMemoryState that converts converts to a
37 // base::MemoryState.
38 base::MemoryState GetCurrentMemoryState() {
39 return ToBaseMemoryState(g_child_memory_coordinator->GetCurrentMemoryState());
haraken 2016/11/05 12:52:22 g_child_memory_coordinator => GetInstance() ?
chrisha 2016/11/07 19:33:41 Done.
40 }
41
35 } // namespace 42 } // namespace
36 43
37 // static 44 // static
38 ChildMemoryCoordinatorImpl* ChildMemoryCoordinatorImpl::GetInstance() { 45 ChildMemoryCoordinatorImpl* ChildMemoryCoordinatorImpl::GetInstance() {
39 base::AutoLock lock(*g_lock.Pointer()); 46 base::AutoLock lock(*g_lock.Pointer());
40 return g_child_memory_coordinator; 47 return g_child_memory_coordinator;
41 } 48 }
42 49
43 ChildMemoryCoordinatorImpl::ChildMemoryCoordinatorImpl( 50 ChildMemoryCoordinatorImpl::ChildMemoryCoordinatorImpl(
44 mojom::MemoryCoordinatorHandlePtr parent, 51 mojom::MemoryCoordinatorHandlePtr parent,
45 ChildMemoryCoordinatorDelegate* delegate) 52 ChildMemoryCoordinatorDelegate* delegate)
46 : binding_(this), parent_(std::move(parent)), delegate_(delegate) { 53 : binding_(this), parent_(std::move(parent)), delegate_(delegate),
54 state_(mojom::MemoryState::UNKNOWN), remaining_global_budget_mb_(0) {
47 base::AutoLock lock(*g_lock.Pointer()); 55 base::AutoLock lock(*g_lock.Pointer());
48 DCHECK(delegate_); 56 DCHECK(delegate_);
49 DCHECK(!g_child_memory_coordinator); 57 DCHECK(!g_child_memory_coordinator);
50 g_child_memory_coordinator = this; 58 g_child_memory_coordinator = this;
51 parent_->AddChild(binding_.CreateInterfacePtrAndBind()); 59 parent_->AddChild(binding_.CreateInterfacePtrAndBind());
52 } 60 }
53 61
54 ChildMemoryCoordinatorImpl::~ChildMemoryCoordinatorImpl() { 62 ChildMemoryCoordinatorImpl::~ChildMemoryCoordinatorImpl() {
55 base::AutoLock lock(*g_lock.Pointer()); 63 base::AutoLock lock(*g_lock.Pointer());
56 DCHECK(g_child_memory_coordinator == this); 64 DCHECK(g_child_memory_coordinator == this);
57 g_child_memory_coordinator = nullptr; 65 g_child_memory_coordinator = nullptr;
58 } 66 }
59 67
60 void ChildMemoryCoordinatorImpl::OnStateChange(mojom::MemoryState state) { 68 void ChildMemoryCoordinatorImpl::OnStateChange(mojom::MemoryState state) {
61 base::MemoryState base_state = ToBaseMemoryState(state); 69 base::MemoryState base_state = ToBaseMemoryState(state);
62 TRACE_EVENT1("memory-infra", "ChildMemoryCoordinatorImpl::OnStateChange", 70 TRACE_EVENT1("memory-infra", "ChildMemoryCoordinatorImpl::OnStateChange",
63 "state", MemoryStateToString(base_state)); 71 "state", MemoryStateToString(base_state));
64 base::MemoryCoordinatorClientRegistry::GetInstance()->Notify( 72 base::MemoryCoordinatorClientRegistry::GetInstance()->Notify(
65 base_state); 73 base_state);
66 } 74 }
67 75
76 void ChildMemoryCoordinatorImpl::SetRemainingGlobalBudget(
77 int64_t remaining_global_budget_mb) {
78 remaining_global_budget_mb_ = remaining_global_budget_mb;
79 }
80
68 #if !defined(OS_ANDROID) 81 #if !defined(OS_ANDROID)
69 std::unique_ptr<ChildMemoryCoordinatorImpl> CreateChildMemoryCoordinator( 82 std::unique_ptr<ChildMemoryCoordinatorImpl> CreateChildMemoryCoordinator(
70 mojom::MemoryCoordinatorHandlePtr parent, 83 mojom::MemoryCoordinatorHandlePtr parent,
71 ChildMemoryCoordinatorDelegate* delegate) { 84 ChildMemoryCoordinatorDelegate* delegate) {
72 return base::WrapUnique( 85 auto* cmc = new ChildMemoryCoordinatorImpl(std::move(parent), delegate);
73 new ChildMemoryCoordinatorImpl(std::move(parent), delegate)); 86
87 // Hookup the coordinator to the MemoryCoordinatorProxy. base::Unretained is
88 // safe because the lifetime of the ChildMemoryCoordinatorImpl is tied to the
89 // lifetime of the renderer process.
90 base::MemoryCoordinatorProxy::GetInstance()->
91 SetGetCurrentMemoryStateCallback(base::Bind(&GetCurrentMemoryState));
92 base::MemoryCoordinatorProxy::GetInstance()->
93 SetGetRemainingGlobalBudgetCallback(base::Bind(
94 &ChildMemoryCoordinatorImpl::GetRemainingGlobalBudget,
95 base::Unretained(cmc)));
96
97 return base::WrapUnique(cmc);
74 } 98 }
75 #endif 99 #endif
76 100
77 } // namespace content 101 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698