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

Side by Side Diff: chrome/browser/lifetime/keep_alive_registry.cc

Issue 2719813005: CrOS: Add print statements to help debug BrowserProcessImpl::Unpin crash. (Closed)
Patch Set: Added dumps. Created 3 years, 9 months 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 "chrome/browser/lifetime/keep_alive_registry.h" 5 #include "chrome/browser/lifetime/keep_alive_registry.h"
6 6
7 #include <sstream>
8
7 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
8 #include "chrome/browser/lifetime/application_lifetime.h" 10 #include "chrome/browser/lifetime/application_lifetime.h"
9 #include "chrome/browser/lifetime/keep_alive_state_observer.h" 11 #include "chrome/browser/lifetime/keep_alive_state_observer.h"
10 #include "chrome/browser/lifetime/keep_alive_types.h" 12 #include "chrome/browser/lifetime/keep_alive_types.h"
11 13
12 //////////////////////////////////////////////////////////////////////////////// 14 ////////////////////////////////////////////////////////////////////////////////
13 // Public methods 15 // Public methods
14 16
15 // static 17 // static
16 KeepAliveRegistry* KeepAliveRegistry::GetInstance() { 18 KeepAliveRegistry* KeepAliveRegistry::GetInstance() {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 62
61 registered_count = registered_count_ - registered_count; 63 registered_count = registered_count_ - registered_count;
62 restart_allowed_count = restart_allowed_count_ - restart_allowed_count; 64 restart_allowed_count = restart_allowed_count_ - restart_allowed_count;
63 65
64 DCHECK_GE(registered_count, 0); 66 DCHECK_GE(registered_count, 0);
65 DCHECK_GE(restart_allowed_count, 0); 67 DCHECK_GE(restart_allowed_count, 0);
66 68
67 return registered_count == restart_allowed_count; 69 return registered_count == restart_allowed_count;
68 } 70 }
69 71
72 std::string KeepAliveRegistry::ToString() const {
73 std::stringstream stream;
74 stream << *this;
sky 2017/03/22 03:56:16 Are you sure this returns something helpful?
75 return stream.str();
76 }
77
70 //////////////////////////////////////////////////////////////////////////////// 78 ////////////////////////////////////////////////////////////////////////////////
71 // Private methods 79 // Private methods
72 80
73 KeepAliveRegistry::KeepAliveRegistry() 81 KeepAliveRegistry::KeepAliveRegistry()
74 : registered_count_(0), restart_allowed_count_(0) {} 82 : registered_count_(0), restart_allowed_count_(0) {}
75 83
76 KeepAliveRegistry::~KeepAliveRegistry() { 84 KeepAliveRegistry::~KeepAliveRegistry() {
77 DLOG_IF(ERROR, registered_count_ > 0 || registered_keep_alives_.size() > 0) 85 // TODO(sammiequon): Change all VLOGS back to DVLOGS in this file once
86 // crbug.com/660962 is resolved.
87 VLOG_IF(1, registered_count_ > 0 || registered_keep_alives_.size() > 0)
sky 2017/03/22 03:56:16 !empty()
78 << "KeepAliveRegistry not empty at destruction time. State:" << *this; 88 << "KeepAliveRegistry not empty at destruction time. State:" << *this;
79 } 89 }
80 90
81 void KeepAliveRegistry::Register(KeepAliveOrigin origin, 91 void KeepAliveRegistry::Register(KeepAliveOrigin origin,
82 KeepAliveRestartOption restart) { 92 KeepAliveRestartOption restart) {
83 DCHECK(!g_browser_process->IsShuttingDown()); 93 DCHECK(!g_browser_process->IsShuttingDown());
84 94
85 bool old_keeping_alive = IsKeepingAlive(); 95 bool old_keeping_alive = IsKeepingAlive();
86 bool old_restart_allowed = IsRestartAllowed(); 96 bool old_restart_allowed = IsRestartAllowed();
87 97
88 ++registered_keep_alives_[origin]; 98 ++registered_keep_alives_[origin];
89 ++registered_count_; 99 ++registered_count_;
90 100
91 if (restart == KeepAliveRestartOption::ENABLED) { 101 if (restart == KeepAliveRestartOption::ENABLED) {
92 ++restart_allowed_keep_alives_[origin]; 102 ++restart_allowed_keep_alives_[origin];
93 ++restart_allowed_count_; 103 ++restart_allowed_count_;
94 } 104 }
95 105
96 bool new_keeping_alive = IsKeepingAlive(); 106 bool new_keeping_alive = IsKeepingAlive();
97 bool new_restart_allowed = IsRestartAllowed(); 107 bool new_restart_allowed = IsRestartAllowed();
98 108
99 if (new_keeping_alive != old_keeping_alive) 109 if (new_keeping_alive != old_keeping_alive)
100 OnKeepAliveStateChanged(new_keeping_alive); 110 OnKeepAliveStateChanged(new_keeping_alive);
101 111
102 if (new_restart_allowed != old_restart_allowed) 112 if (new_restart_allowed != old_restart_allowed)
103 OnRestartAllowedChanged(new_restart_allowed); 113 OnRestartAllowedChanged(new_restart_allowed);
104 114
105 DVLOG(1) << "New state of the KeepAliveRegistry: " << *this; 115 VLOG(1) << "New state of the KeepAliveRegistry: " << *this;
106 } 116 }
107 117
108 void KeepAliveRegistry::Unregister(KeepAliveOrigin origin, 118 void KeepAliveRegistry::Unregister(KeepAliveOrigin origin,
109 KeepAliveRestartOption restart) { 119 KeepAliveRestartOption restart) {
110 bool old_keeping_alive = IsKeepingAlive(); 120 bool old_keeping_alive = IsKeepingAlive();
111 bool old_restart_allowed = IsRestartAllowed(); 121 bool old_restart_allowed = IsRestartAllowed();
112 122
113 --registered_count_; 123 --registered_count_;
114 DCHECK_GE(registered_count_, 0); 124 DCHECK_GE(registered_count_, 0);
115 DecrementCount(origin, &registered_keep_alives_); 125 DecrementCount(origin, &registered_keep_alives_);
116 126
117 if (restart == KeepAliveRestartOption::ENABLED) { 127 if (restart == KeepAliveRestartOption::ENABLED) {
118 --restart_allowed_count_; 128 --restart_allowed_count_;
119 DecrementCount(origin, &restart_allowed_keep_alives_); 129 DecrementCount(origin, &restart_allowed_keep_alives_);
120 } 130 }
121 131
122 bool new_keeping_alive = IsKeepingAlive(); 132 bool new_keeping_alive = IsKeepingAlive();
123 bool new_restart_allowed = IsRestartAllowed(); 133 bool new_restart_allowed = IsRestartAllowed();
124 134
125 // Update the KeepAlive state first, so that listeners can check if we are 135 // Update the KeepAlive state first, so that listeners can check if we are
126 // trying to shutdown. 136 // trying to shutdown.
127 if (new_keeping_alive != old_keeping_alive) 137 if (new_keeping_alive != old_keeping_alive)
128 OnKeepAliveStateChanged(new_keeping_alive); 138 OnKeepAliveStateChanged(new_keeping_alive);
129 139
130 if (new_restart_allowed != old_restart_allowed) 140 if (new_restart_allowed != old_restart_allowed)
131 OnRestartAllowedChanged(new_restart_allowed); 141 OnRestartAllowedChanged(new_restart_allowed);
132 142
133 DVLOG(1) << "New state of the KeepAliveRegistry:" << *this; 143 VLOG(1) << "New state of the KeepAliveRegistry:" << *this;
134 } 144 }
135 145
136 void KeepAliveRegistry::OnKeepAliveStateChanged(bool new_keeping_alive) { 146 void KeepAliveRegistry::OnKeepAliveStateChanged(bool new_keeping_alive) {
137 DVLOG(1) << "Notifying KeepAliveStateObservers: KeepingAlive changed to: " 147 VLOG(1) << "Notifying KeepAliveStateObservers: KeepingAlive changed to: "
138 << new_keeping_alive; 148 << new_keeping_alive;
139 for (KeepAliveStateObserver& observer : observers_) 149 for (KeepAliveStateObserver& observer : observers_)
140 observer.OnKeepAliveStateChanged(new_keeping_alive); 150 observer.OnKeepAliveStateChanged(new_keeping_alive);
141 } 151 }
142 152
143 void KeepAliveRegistry::OnRestartAllowedChanged(bool new_restart_allowed) { 153 void KeepAliveRegistry::OnRestartAllowedChanged(bool new_restart_allowed) {
144 DVLOG(1) << "Notifying KeepAliveStateObservers: Restart changed to: " 154 VLOG(1) << "Notifying KeepAliveStateObservers: Restart changed to: "
145 << new_restart_allowed; 155 << new_restart_allowed;
146 for (KeepAliveStateObserver& observer : observers_) 156 for (KeepAliveStateObserver& observer : observers_)
147 observer.OnKeepAliveRestartStateChanged(new_restart_allowed); 157 observer.OnKeepAliveRestartStateChanged(new_restart_allowed);
148 } 158 }
149 159
150 void KeepAliveRegistry::DecrementCount(KeepAliveOrigin origin, 160 void KeepAliveRegistry::DecrementCount(KeepAliveOrigin origin,
151 OriginMap* keep_alive_map) { 161 OriginMap* keep_alive_map) {
152 int new_count = --keep_alive_map->at(origin); 162 int new_count = --keep_alive_map->at(origin);
153 DCHECK_GE(keep_alive_map->at(origin), 0); 163 DCHECK_GE(keep_alive_map->at(origin), 0);
154 if (new_count == 0) 164 if (new_count == 0)
155 keep_alive_map->erase(origin); 165 keep_alive_map->erase(origin);
156 } 166 }
157 167
158 std::ostream& operator<<(std::ostream& out, const KeepAliveRegistry& registry) { 168 std::ostream& operator<<(std::ostream& out, const KeepAliveRegistry& registry) {
159 out << "{registered_count_=" << registry.registered_count_ 169 out << "{registered_count_=" << registry.registered_count_
160 << ", restart_allowed_count_=" << registry.restart_allowed_count_ 170 << ", restart_allowed_count_=" << registry.restart_allowed_count_
161 << ", KeepAlives=["; 171 << ", KeepAlives=[";
162 for (auto counts_per_origin_it : registry.registered_keep_alives_) { 172 for (auto counts_per_origin_it : registry.registered_keep_alives_) {
163 if (counts_per_origin_it != *registry.registered_keep_alives_.begin()) 173 if (counts_per_origin_it != *registry.registered_keep_alives_.begin())
164 out << ", "; 174 out << ", ";
165 out << counts_per_origin_it.first << " (" << counts_per_origin_it.second 175 out << counts_per_origin_it.first << " (" << counts_per_origin_it.second
166 << ")"; 176 << ")";
167 } 177 }
168 out << "]}"; 178 out << "]}";
169 return out; 179 return out;
170 } 180 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698