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

Side by Side Diff: extensions/browser/api/cast_channel/logger.cc

Issue 475463002: Cast channel logging: log additional statistics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@REAL-NEW-MASTER
Patch Set: Fix merge Created 6 years, 4 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 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 "extensions/browser/api/cast_channel/logger.h" 5 #include "extensions/browser/api/cast_channel/logger.h"
6 6
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "base/time/tick_clock.h" 8 #include "base/time/tick_clock.h"
9 #include "extensions/browser/api/cast_channel/cast_auth_util.h" 9 #include "extensions/browser/api/cast_channel/cast_auth_util.h"
10 #include "extensions/browser/api/cast_channel/logger_util.h" 10 #include "extensions/browser/api/cast_channel/logger_util.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 } // namespace 101 } // namespace
102 102
103 Logger::AggregatedSocketEventLog::AggregatedSocketEventLog() { 103 Logger::AggregatedSocketEventLog::AggregatedSocketEventLog() {
104 } 104 }
105 105
106 Logger::AggregatedSocketEventLog::~AggregatedSocketEventLog() { 106 Logger::AggregatedSocketEventLog::~AggregatedSocketEventLog() {
107 } 107 }
108 108
109 Logger::Logger(scoped_ptr<base::TickClock> clock, 109 Logger::Logger(scoped_ptr<base::TickClock> clock,
110 base::TimeTicks unix_epoch_time_ticks) 110 base::TimeTicks unix_epoch_time_ticks)
111 : clock_(clock.Pass()), 111 : clock_(clock.Pass()), unix_epoch_time_ticks_(unix_epoch_time_ticks) {
112 unix_epoch_time_ticks_(unix_epoch_time_ticks),
113 num_evicted_aggregated_socket_events_(0),
114 num_evicted_socket_events_(0) {
115 DCHECK(clock_); 112 DCHECK(clock_);
116 113
117 // Logger may not be necessarily be created on the IO thread, but logging 114 // Logger may not be necessarily be created on the IO thread, but logging
118 // happens exclusively there. 115 // happens exclusively there.
119 thread_checker_.DetachFromThread(); 116 thread_checker_.DetachFromThread();
120 } 117 }
121 118
122 Logger::~Logger() { 119 Logger::~Logger() {
123 } 120 }
124 121
125 void Logger::LogNewSocketEvent(const CastSocket& cast_socket) { 122 void Logger::LogNewSocketEvent(const CastSocket& cast_socket) {
126 DCHECK(thread_checker_.CalledOnValidThread()); 123 DCHECK(thread_checker_.CalledOnValidThread());
127 124
128 int channel_id = cast_socket.id(); 125 int channel_id = cast_socket.id();
129 SocketEvent event = CreateEvent(proto::CAST_SOCKET_CREATED); 126 SocketEvent event = CreateEvent(proto::CAST_SOCKET_CREATED);
130 LogSocketEvent(channel_id, event); 127 AggregatedSocketEvent& aggregated_socket_event =
128 LogSocketEvent(channel_id, event);
131 129
132 AggregatedSocketEvent& aggregated_socket_event =
133 aggregated_socket_events_.find(channel_id)
134 ->second->aggregated_socket_event;
135 const net::IPAddressNumber& ip = cast_socket.ip_endpoint().address(); 130 const net::IPAddressNumber& ip = cast_socket.ip_endpoint().address();
136 aggregated_socket_event.set_endpoint_id(ip.back()); 131 aggregated_socket_event.set_endpoint_id(ip.back());
137 aggregated_socket_event.set_channel_auth_type(cast_socket.channel_auth() == 132 aggregated_socket_event.set_channel_auth_type(cast_socket.channel_auth() ==
138 CHANNEL_AUTH_TYPE_SSL 133 CHANNEL_AUTH_TYPE_SSL
139 ? proto::SSL 134 ? proto::SSL
140 : proto::SSL_VERIFIED); 135 : proto::SSL_VERIFIED);
141 } 136 }
142 137
143 void Logger::LogSocketEvent(int channel_id, EventType event_type) { 138 void Logger::LogSocketEvent(int channel_id, EventType event_type) {
144 DCHECK(thread_checker_.CalledOnValidThread()); 139 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 14 matching lines...) Expand all
159 } 154 }
160 155
161 void Logger::LogSocketEventWithRv(int channel_id, 156 void Logger::LogSocketEventWithRv(int channel_id,
162 EventType event_type, 157 EventType event_type,
163 int rv) { 158 int rv) {
164 DCHECK(thread_checker_.CalledOnValidThread()); 159 DCHECK(thread_checker_.CalledOnValidThread());
165 160
166 SocketEvent event = CreateEvent(event_type); 161 SocketEvent event = CreateEvent(event_type);
167 event.set_net_return_value(rv); 162 event.set_net_return_value(rv);
168 163
169 LogSocketEvent(channel_id, event); 164 AggregatedSocketEvent& aggregated_socket_event =
165 LogSocketEvent(channel_id, event);
166
167 if ((event_type == proto::SOCKET_READ || event_type == proto::SOCKET_WRITE) &&
168 rv > 0) {
169 if (event_type == proto::SOCKET_READ) {
170 aggregated_socket_event.set_bytes_read(
171 aggregated_socket_event.bytes_read() + rv);
172 } else {
173 aggregated_socket_event.set_bytes_written(
174 aggregated_socket_event.bytes_written() + rv);
175 }
176 }
170 } 177 }
171 178
172 void Logger::LogSocketReadyState(int channel_id, proto::ReadyState new_state) { 179 void Logger::LogSocketReadyState(int channel_id, proto::ReadyState new_state) {
173 DCHECK(thread_checker_.CalledOnValidThread()); 180 DCHECK(thread_checker_.CalledOnValidThread());
174 181
175 SocketEvent event = CreateEvent(proto::READY_STATE_CHANGED); 182 SocketEvent event = CreateEvent(proto::READY_STATE_CHANGED);
176 event.set_ready_state(new_state); 183 event.set_ready_state(new_state);
177 184
178 LogSocketEvent(channel_id, event); 185 LogSocketEvent(channel_id, event);
179 } 186 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 } 250 }
244 251
245 SocketEvent Logger::CreateEvent(EventType event_type) { 252 SocketEvent Logger::CreateEvent(EventType event_type) {
246 SocketEvent event; 253 SocketEvent event;
247 event.set_type(event_type); 254 event.set_type(event_type);
248 event.set_timestamp_micros(clock_->NowTicks().ToInternalValue() - 255 event.set_timestamp_micros(clock_->NowTicks().ToInternalValue() -
249 unix_epoch_time_ticks_.ToInternalValue()); 256 unix_epoch_time_ticks_.ToInternalValue());
250 return event; 257 return event;
251 } 258 }
252 259
253 void Logger::LogSocketEvent(int channel_id, const SocketEvent& socket_event) { 260 AggregatedSocketEvent& Logger::LogSocketEvent(int channel_id,
261 const SocketEvent& socket_event) {
254 AggregatedSocketEventLogMap::iterator it = 262 AggregatedSocketEventLogMap::iterator it =
255 aggregated_socket_events_.find(channel_id); 263 aggregated_socket_events_.find(channel_id);
256 if (it == aggregated_socket_events_.end()) { 264 if (it == aggregated_socket_events_.end()) {
257 if (aggregated_socket_events_.size() >= kMaxSocketsToLog) { 265 if (aggregated_socket_events_.size() >= kMaxSocketsToLog) {
258 AggregatedSocketEventLogMap::iterator erase_it = 266 AggregatedSocketEventLogMap::iterator erase_it =
259 aggregated_socket_events_.begin(); 267 aggregated_socket_events_.begin();
260 268
261 num_evicted_aggregated_socket_events_++; 269 log_.set_num_evicted_aggregated_socket_events(
262 num_evicted_socket_events_ += erase_it->second->socket_events.size(); 270 log_.num_evicted_aggregated_socket_events() + 1);
271 log_.set_num_evicted_socket_events(
272 log_.num_evicted_socket_events() +
273 erase_it->second->socket_events.size());
263 274
264 aggregated_socket_events_.erase(erase_it); 275 aggregated_socket_events_.erase(erase_it);
265 } 276 }
266 277
267 it = aggregated_socket_events_ 278 it = aggregated_socket_events_
268 .insert(std::make_pair( 279 .insert(std::make_pair(
269 channel_id, make_linked_ptr(new AggregatedSocketEventLog))) 280 channel_id, make_linked_ptr(new AggregatedSocketEventLog)))
270 .first; 281 .first;
271 it->second->aggregated_socket_event.set_id(channel_id); 282 it->second->aggregated_socket_event.set_id(channel_id);
272 } 283 }
273 284
274 std::deque<proto::SocketEvent>& socket_events = it->second->socket_events; 285 std::deque<proto::SocketEvent>& socket_events = it->second->socket_events;
275 if (socket_events.size() >= kMaxEventsPerSocket) { 286 if (socket_events.size() >= kMaxEventsPerSocket) {
276 socket_events.pop_front(); 287 socket_events.pop_front();
277 num_evicted_socket_events_++; 288 log_.set_num_evicted_socket_events(log_.num_evicted_socket_events() + 1);
278 } 289 }
279 290
280 socket_events.push_back(socket_event); 291 socket_events.push_back(socket_event);
281 292
282 it->second->last_errors.event_type = socket_event.type(); 293 it->second->last_errors.event_type = socket_event.type();
283 if (socket_event.has_net_return_value()) { 294 if (socket_event.has_net_return_value()) {
284 it->second->last_errors.net_return_value = socket_event.net_return_value(); 295 it->second->last_errors.net_return_value = socket_event.net_return_value();
285 } 296 }
286 if (socket_event.has_challenge_reply_error_type()) { 297 if (socket_event.has_challenge_reply_error_type()) {
287 it->second->last_errors.challenge_reply_error_type = 298 it->second->last_errors.challenge_reply_error_type =
288 socket_event.challenge_reply_error_type(); 299 socket_event.challenge_reply_error_type();
289 } 300 }
290 if (socket_event.has_nss_error_code()) 301 if (socket_event.has_nss_error_code())
291 it->second->last_errors.nss_error_code = socket_event.nss_error_code(); 302 it->second->last_errors.nss_error_code = socket_event.nss_error_code();
303
304 return it->second->aggregated_socket_event;
292 } 305 }
293 306
294 scoped_ptr<char[]> Logger::GetLogs(size_t* length) const { 307 scoped_ptr<char[]> Logger::GetLogs(size_t* length) const {
295 *length = 0; 308 *length = 0;
296 309
297 Log log; 310 Log log;
298 log.set_num_evicted_aggregated_socket_events( 311 // Copy "global" values from |log_|. Don't use |log_| directly since this
299 num_evicted_aggregated_socket_events_); 312 // function is const.
300 log.set_num_evicted_socket_events(num_evicted_socket_events_); 313 log.CopyFrom(log_);
301 314
302 for (AggregatedSocketEventLogMap::const_iterator it = 315 for (AggregatedSocketEventLogMap::const_iterator it =
303 aggregated_socket_events_.begin(); 316 aggregated_socket_events_.begin();
304 it != aggregated_socket_events_.end(); 317 it != aggregated_socket_events_.end();
305 ++it) { 318 ++it) {
306 AggregatedSocketEvent* new_aggregated_socket_event = 319 AggregatedSocketEvent* new_aggregated_socket_event =
307 log.add_aggregated_socket_event(); 320 log.add_aggregated_socket_event();
308 new_aggregated_socket_event->CopyFrom(it->second->aggregated_socket_event); 321 new_aggregated_socket_event->CopyFrom(it->second->aggregated_socket_event);
309 322
310 const std::deque<SocketEvent>& socket_events = it->second->socket_events; 323 const std::deque<SocketEvent>& socket_events = it->second->socket_events;
(...skipping 11 matching lines...) Expand all
322 if (!log.SerializeToString(&serialized)) { 335 if (!log.SerializeToString(&serialized)) {
323 VLOG(2) << "Failed to serialized proto to string."; 336 VLOG(2) << "Failed to serialized proto to string.";
324 return scoped_ptr<char[]>(); 337 return scoped_ptr<char[]>();
325 } 338 }
326 339
327 return Compress(serialized, length); 340 return Compress(serialized, length);
328 } 341 }
329 342
330 void Logger::Reset() { 343 void Logger::Reset() {
331 aggregated_socket_events_.clear(); 344 aggregated_socket_events_.clear();
332 num_evicted_aggregated_socket_events_ = 0; 345 log_.Clear();
333 num_evicted_socket_events_ = 0;
334 } 346 }
335 347
336 LastErrors Logger::GetLastErrors(int channel_id) const { 348 LastErrors Logger::GetLastErrors(int channel_id) const {
337 AggregatedSocketEventLogMap::const_iterator it = 349 AggregatedSocketEventLogMap::const_iterator it =
338 aggregated_socket_events_.find(channel_id); 350 aggregated_socket_events_.find(channel_id);
339 if (it != aggregated_socket_events_.end()) { 351 if (it != aggregated_socket_events_.end()) {
340 return it->second->last_errors; 352 return it->second->last_errors;
341 } else { 353 } else {
342 return LastErrors(); 354 return LastErrors();
343 } 355 }
344 } 356 }
345 357
346 } // namespace cast_channel 358 } // namespace cast_channel
347 } // namespace api 359 } // namespace api
348 } // namespace extensions 360 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/cast_channel/logger.h ('k') | extensions/browser/api/cast_channel/logger_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698