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

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: Addressed comments 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 10
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 } // namespace 58 } // namespace
59 59
60 Logger::AggregatedSocketEventLog::AggregatedSocketEventLog() { 60 Logger::AggregatedSocketEventLog::AggregatedSocketEventLog() {
61 } 61 }
62 Logger::AggregatedSocketEventLog::~AggregatedSocketEventLog() { 62 Logger::AggregatedSocketEventLog::~AggregatedSocketEventLog() {
63 } 63 }
64 64
65 Logger::Logger(scoped_ptr<base::TickClock> clock, 65 Logger::Logger(scoped_ptr<base::TickClock> clock,
66 base::TimeTicks unix_epoch_time_ticks) 66 base::TimeTicks unix_epoch_time_ticks)
67 : clock_(clock.Pass()), 67 : clock_(clock.Pass()), unix_epoch_time_ticks_(unix_epoch_time_ticks) {
68 unix_epoch_time_ticks_(unix_epoch_time_ticks),
69 num_evicted_aggregated_socket_events_(0),
70 num_evicted_socket_events_(0) {
71 DCHECK(clock_); 68 DCHECK(clock_);
72 69
73 // Logger may not be necessarily be created on the IO thread, but logging 70 // Logger may not be necessarily be created on the IO thread, but logging
74 // happens exclusively there. 71 // happens exclusively there.
75 thread_checker_.DetachFromThread(); 72 thread_checker_.DetachFromThread();
76 } 73 }
77 74
78 Logger::~Logger() { 75 Logger::~Logger() {
79 } 76 }
80 77
81 void Logger::LogNewSocketEvent(const CastSocket& cast_socket) { 78 void Logger::LogNewSocketEvent(const CastSocket& cast_socket) {
82 DCHECK(thread_checker_.CalledOnValidThread()); 79 DCHECK(thread_checker_.CalledOnValidThread());
83 80
84 int channel_id = cast_socket.id(); 81 int channel_id = cast_socket.id();
85 SocketEvent event = CreateEvent(proto::CAST_SOCKET_CREATED); 82 SocketEvent event = CreateEvent(proto::CAST_SOCKET_CREATED);
86 LogSocketEvent(channel_id, event); 83 LogSocketEvent(channel_id, event);
87 84
85 AggregatedSocketEventLogMap::iterator it =
86 aggregated_socket_events_.find(channel_id);
87 CHECK(it != aggregated_socket_events_.end());
88
88 AggregatedSocketEvent& aggregated_socket_event = 89 AggregatedSocketEvent& aggregated_socket_event =
89 aggregated_socket_events_.find(channel_id) 90 it->second->aggregated_socket_event;
90 ->second->aggregated_socket_event;
91 const net::IPAddressNumber& ip = cast_socket.ip_endpoint().address(); 91 const net::IPAddressNumber& ip = cast_socket.ip_endpoint().address();
92 aggregated_socket_event.set_endpoint_id(ip.back()); 92 aggregated_socket_event.set_endpoint_id(ip.back());
93 aggregated_socket_event.set_channel_auth_type(cast_socket.channel_auth() == 93 aggregated_socket_event.set_channel_auth_type(cast_socket.channel_auth() ==
94 CHANNEL_AUTH_TYPE_SSL 94 CHANNEL_AUTH_TYPE_SSL
95 ? proto::SSL 95 ? proto::SSL
96 : proto::SSL_VERIFIED); 96 : proto::SSL_VERIFIED);
97 } 97 }
98 98
99 void Logger::LogSocketEvent(int channel_id, EventType event_type) { 99 void Logger::LogSocketEvent(int channel_id, EventType event_type) {
100 DCHECK(thread_checker_.CalledOnValidThread()); 100 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 15 matching lines...) Expand all
116 116
117 void Logger::LogSocketEventWithRv(int channel_id, 117 void Logger::LogSocketEventWithRv(int channel_id,
118 EventType event_type, 118 EventType event_type,
119 int rv) { 119 int rv) {
120 DCHECK(thread_checker_.CalledOnValidThread()); 120 DCHECK(thread_checker_.CalledOnValidThread());
121 121
122 SocketEvent event = CreateEvent(event_type); 122 SocketEvent event = CreateEvent(event_type);
123 event.set_return_value(rv); 123 event.set_return_value(rv);
124 124
125 LogSocketEvent(channel_id, event); 125 LogSocketEvent(channel_id, event);
126
127 if ((event_type == proto::SOCKET_READ || event_type == proto::SOCKET_WRITE) &&
128 rv > 0) {
129 AggregatedSocketEventLogMap::iterator it =
130 aggregated_socket_events_.find(channel_id);
131 CHECK(it != aggregated_socket_events_.end());
132
133 AggregatedSocketEvent& aggregated_socket_event =
134 it->second->aggregated_socket_event;
135 if (event_type == proto::SOCKET_READ) {
136 aggregated_socket_event.set_bytes_read(
137 aggregated_socket_event.bytes_read() + rv);
138 } else {
139 aggregated_socket_event.set_bytes_written(
140 aggregated_socket_event.bytes_written() + rv);
141 }
142 }
126 } 143 }
127 144
128 void Logger::LogSocketReadyState(int channel_id, proto::ReadyState new_state) { 145 void Logger::LogSocketReadyState(int channel_id, proto::ReadyState new_state) {
129 DCHECK(thread_checker_.CalledOnValidThread()); 146 DCHECK(thread_checker_.CalledOnValidThread());
130 147
131 SocketEvent event = CreateEvent(proto::READY_STATE_CHANGED); 148 SocketEvent event = CreateEvent(proto::READY_STATE_CHANGED);
132 event.set_ready_state(new_state); 149 event.set_ready_state(new_state);
133 150
134 LogSocketEvent(channel_id, event); 151 LogSocketEvent(channel_id, event);
135 } 152 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 224 }
208 225
209 void Logger::LogSocketEvent(int channel_id, const SocketEvent& socket_event) { 226 void Logger::LogSocketEvent(int channel_id, const SocketEvent& socket_event) {
210 AggregatedSocketEventLogMap::iterator it = 227 AggregatedSocketEventLogMap::iterator it =
211 aggregated_socket_events_.find(channel_id); 228 aggregated_socket_events_.find(channel_id);
212 if (it == aggregated_socket_events_.end()) { 229 if (it == aggregated_socket_events_.end()) {
213 if (aggregated_socket_events_.size() >= kMaxSocketsToLog) { 230 if (aggregated_socket_events_.size() >= kMaxSocketsToLog) {
214 AggregatedSocketEventLogMap::iterator erase_it = 231 AggregatedSocketEventLogMap::iterator erase_it =
215 aggregated_socket_events_.begin(); 232 aggregated_socket_events_.begin();
216 233
217 num_evicted_aggregated_socket_events_++; 234 log_.set_num_evicted_aggregated_socket_events(
218 num_evicted_socket_events_ += erase_it->second->socket_events.size(); 235 log_.num_evicted_aggregated_socket_events() + 1);
236 log_.set_num_evicted_socket_events(
237 log_.num_evicted_socket_events() +
238 erase_it->second->socket_events.size());
219 239
220 aggregated_socket_events_.erase(erase_it); 240 aggregated_socket_events_.erase(erase_it);
221 } 241 }
222 242
223 it = aggregated_socket_events_ 243 it = aggregated_socket_events_
224 .insert(std::make_pair( 244 .insert(std::make_pair(
225 channel_id, make_linked_ptr(new AggregatedSocketEventLog))) 245 channel_id, make_linked_ptr(new AggregatedSocketEventLog)))
226 .first; 246 .first;
227 it->second->aggregated_socket_event.set_id(channel_id); 247 it->second->aggregated_socket_event.set_id(channel_id);
228 } 248 }
229 249
230 std::deque<proto::SocketEvent>& socket_events = it->second->socket_events; 250 std::deque<proto::SocketEvent>& socket_events = it->second->socket_events;
231 if (socket_events.size() >= kMaxEventsPerSocket) { 251 if (socket_events.size() >= kMaxEventsPerSocket) {
232 socket_events.pop_front(); 252 socket_events.pop_front();
233 num_evicted_socket_events_++; 253 log_.set_num_evicted_socket_events(log_.num_evicted_socket_events() + 1);
234 } 254 }
235 255
236 socket_events.push_back(socket_event); 256 socket_events.push_back(socket_event);
237 } 257 }
238 258
239 bool Logger::LogToString(std::string* output) const { 259 bool Logger::LogToString(std::string* output) const {
240 output->clear(); 260 output->clear();
241 261
242 Log log; 262 Log log;
243 log.set_num_evicted_aggregated_socket_events( 263 log.CopyFrom(log_);
Wez 2014/08/14 18:44:35 nit: This is just to get the evicted counts? Consi
imcheng 2014/08/14 22:43:19 Done.
244 num_evicted_aggregated_socket_events_);
245 log.set_num_evicted_socket_events(num_evicted_socket_events_);
246 264
247 for (AggregatedSocketEventLogMap::const_iterator it = 265 for (AggregatedSocketEventLogMap::const_iterator it =
248 aggregated_socket_events_.begin(); 266 aggregated_socket_events_.begin();
249 it != aggregated_socket_events_.end(); 267 it != aggregated_socket_events_.end();
250 ++it) { 268 ++it) {
251 AggregatedSocketEvent* new_aggregated_socket_event = 269 AggregatedSocketEvent* new_aggregated_socket_event =
252 log.add_aggregated_socket_event(); 270 log.add_aggregated_socket_event();
253 new_aggregated_socket_event->CopyFrom(it->second->aggregated_socket_event); 271 new_aggregated_socket_event->CopyFrom(it->second->aggregated_socket_event);
254 272
255 const std::deque<SocketEvent>& socket_events = it->second->socket_events; 273 const std::deque<SocketEvent>& socket_events = it->second->socket_events;
256 for (std::deque<SocketEvent>::const_iterator socket_event_it = 274 for (std::deque<SocketEvent>::const_iterator socket_event_it =
257 socket_events.begin(); 275 socket_events.begin();
258 socket_event_it != socket_events.end(); 276 socket_event_it != socket_events.end();
259 ++socket_event_it) { 277 ++socket_event_it) {
260 SocketEvent* socket_event = 278 SocketEvent* socket_event =
261 new_aggregated_socket_event->add_socket_event(); 279 new_aggregated_socket_event->add_socket_event();
262 socket_event->CopyFrom(*socket_event_it); 280 socket_event->CopyFrom(*socket_event_it);
263 } 281 }
264 } 282 }
265 283
266 return log.SerializeToString(output); 284 return log.SerializeToString(output);
267 } 285 }
268 286
269 void Logger::Reset() { 287 void Logger::Reset() {
270 aggregated_socket_events_.clear(); 288 aggregated_socket_events_.clear();
271 num_evicted_aggregated_socket_events_ = 0; 289 log_.Clear();
272 num_evicted_socket_events_ = 0;
273 } 290 }
274 291
275 } // namespace cast_channel 292 } // namespace cast_channel
276 } // namespace api 293 } // namespace api
277 } // namespace extensions 294 } // 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