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

Side by Side Diff: google_apis/gcm/gcm_client_impl.cc

Issue 248213004: Record connection, registration, and receiving activities. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 8 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "google_apis/gcm/gcm_client_impl.h" 5 #include "google_apis/gcm/gcm_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 clock, 139 clock,
140 connection_factory, 140 connection_factory,
141 gcm_store, 141 gcm_store,
142 recorder)); 142 recorder));
143 } 143 }
144 144
145 scoped_ptr<ConnectionFactory> GCMInternalsBuilder::BuildConnectionFactory( 145 scoped_ptr<ConnectionFactory> GCMInternalsBuilder::BuildConnectionFactory(
146 const std::vector<GURL>& endpoints, 146 const std::vector<GURL>& endpoints,
147 const net::BackoffEntry::Policy& backoff_policy, 147 const net::BackoffEntry::Policy& backoff_policy,
148 scoped_refptr<net::HttpNetworkSession> network_session, 148 scoped_refptr<net::HttpNetworkSession> network_session,
149 net::NetLog* net_log) { 149 net::NetLog* net_log,
150 GCMStatsRecorder* recorder) {
150 return make_scoped_ptr<ConnectionFactory>( 151 return make_scoped_ptr<ConnectionFactory>(
151 new ConnectionFactoryImpl(endpoints, 152 new ConnectionFactoryImpl(endpoints,
152 backoff_policy, 153 backoff_policy,
153 network_session, 154 network_session,
154 net_log)); 155 net_log,
156 recorder));
155 } 157 }
156 158
157 GCMClientImpl::GCMClientImpl(scoped_ptr<GCMInternalsBuilder> internals_builder) 159 GCMClientImpl::GCMClientImpl(scoped_ptr<GCMInternalsBuilder> internals_builder)
158 : internals_builder_(internals_builder.Pass()), 160 : internals_builder_(internals_builder.Pass()),
159 state_(UNINITIALIZED), 161 state_(UNINITIALIZED),
160 clock_(internals_builder_->BuildClock()), 162 clock_(internals_builder_->BuildClock()),
161 url_request_context_getter_(NULL), 163 url_request_context_getter_(NULL),
162 pending_registration_requests_deleter_(&pending_registration_requests_), 164 pending_registration_requests_deleter_(&pending_registration_requests_),
163 pending_unregistration_requests_deleter_( 165 pending_unregistration_requests_deleter_(
164 &pending_unregistration_requests_), 166 &pending_unregistration_requests_),
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 235
234 void GCMClientImpl::InitializeMCSClient( 236 void GCMClientImpl::InitializeMCSClient(
235 scoped_ptr<GCMStore::LoadResult> result) { 237 scoped_ptr<GCMStore::LoadResult> result) {
236 std::vector<GURL> endpoints; 238 std::vector<GURL> endpoints;
237 endpoints.push_back(GURL(kMCSEndpointMain)); 239 endpoints.push_back(GURL(kMCSEndpointMain));
238 endpoints.push_back(GURL(kMCSEndpointFallback)); 240 endpoints.push_back(GURL(kMCSEndpointFallback));
239 connection_factory_ = internals_builder_->BuildConnectionFactory( 241 connection_factory_ = internals_builder_->BuildConnectionFactory(
240 endpoints, 242 endpoints,
241 kDefaultBackoffPolicy, 243 kDefaultBackoffPolicy,
242 network_session_, 244 network_session_,
243 net_log_.net_log()); 245 net_log_.net_log(),
246 &recorder_);
244 mcs_client_ = internals_builder_->BuildMCSClient( 247 mcs_client_ = internals_builder_->BuildMCSClient(
245 chrome_build_proto_.chrome_version(), 248 chrome_build_proto_.chrome_version(),
246 clock_.get(), 249 clock_.get(),
247 connection_factory_.get(), 250 connection_factory_.get(),
248 gcm_store_.get(), 251 gcm_store_.get(),
249 &recorder_).Pass(); 252 &recorder_).Pass();
250 253
251 mcs_client_->Initialize( 254 mcs_client_->Initialize(
252 base::Bind(&GCMClientImpl::OnMCSError, weak_ptr_factory_.GetWeakPtr()), 255 base::Bind(&GCMClientImpl::OnMCSError, weak_ptr_factory_.GetWeakPtr()),
253 base::Bind(&GCMClientImpl::OnMessageReceivedFromMCS, 256 base::Bind(&GCMClientImpl::OnMessageReceivedFromMCS,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 DCHECK_EQ(0u, pending_registration_requests_.count(app_id)); 413 DCHECK_EQ(0u, pending_registration_requests_.count(app_id));
411 414
412 RegistrationRequest* registration_request = 415 RegistrationRequest* registration_request =
413 new RegistrationRequest(request_info, 416 new RegistrationRequest(request_info,
414 kDefaultBackoffPolicy, 417 kDefaultBackoffPolicy,
415 base::Bind(&GCMClientImpl::OnRegisterCompleted, 418 base::Bind(&GCMClientImpl::OnRegisterCompleted,
416 weak_ptr_factory_.GetWeakPtr(), 419 weak_ptr_factory_.GetWeakPtr(),
417 app_id, 420 app_id,
418 sender_ids), 421 sender_ids),
419 kMaxRegistrationRetries, 422 kMaxRegistrationRetries,
420 url_request_context_getter_); 423 url_request_context_getter_,
424 &recorder_);
421 pending_registration_requests_[app_id] = registration_request; 425 pending_registration_requests_[app_id] = registration_request;
422 registration_request->Start(); 426 registration_request->Start();
423 } 427 }
424 428
425 void GCMClientImpl::OnRegisterCompleted( 429 void GCMClientImpl::OnRegisterCompleted(
426 const std::string& app_id, 430 const std::string& app_id,
427 const std::vector<std::string>& sender_ids, 431 const std::vector<std::string>& sender_ids,
428 RegistrationRequest::Status status, 432 RegistrationRequest::Status status,
429 const std::string& registration_id) { 433 const std::string& registration_id) {
430 DCHECK(delegate_); 434 DCHECK(delegate_);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 stats.is_recording = recorder_.is_recording(); 580 stats.is_recording = recorder_.is_recording();
577 stats.gcm_client_state = GetStateString(); 581 stats.gcm_client_state = GetStateString();
578 stats.connection_client_created = mcs_client_.get() != NULL; 582 stats.connection_client_created = mcs_client_.get() != NULL;
579 if (mcs_client_.get()) { 583 if (mcs_client_.get()) {
580 stats.connection_state = mcs_client_->GetStateString(); 584 stats.connection_state = mcs_client_->GetStateString();
581 stats.send_queue_size = mcs_client_->GetSendQueueSize(); 585 stats.send_queue_size = mcs_client_->GetSendQueueSize();
582 stats.resend_queue_size = mcs_client_->GetResendQueueSize(); 586 stats.resend_queue_size = mcs_client_->GetResendQueueSize();
583 } 587 }
584 if (device_checkin_info_.android_id > 0) 588 if (device_checkin_info_.android_id > 0)
585 stats.android_id = device_checkin_info_.android_id; 589 stats.android_id = device_checkin_info_.android_id;
586 recorder_.CollectSendingActivities(&stats.sending_activities); 590 recorder_.CollectActivities(&stats.connection_activities,
591 &stats.registration_activities,
592 &stats.receiving_activities,
593 &stats.sending_activities);
587 594
588 for (RegistrationInfoMap::const_iterator it = registrations_.begin(); 595 for (RegistrationInfoMap::const_iterator it = registrations_.begin();
589 it != registrations_.end(); ++it) { 596 it != registrations_.end(); ++it) {
590 stats.registered_app_ids.push_back(it->first); 597 stats.registered_app_ids.push_back(it->first);
591 } 598 }
592 return stats; 599 return stats;
593 } 600 }
594 601
595 void GCMClientImpl::OnMessageReceivedFromMCS(const gcm::MCSMessage& message) { 602 void GCMClientImpl::OnMessageReceivedFromMCS(const gcm::MCSMessage& message) {
596 switch (message.tag()) { 603 switch (message.tag()) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 if (iter != message_data.end()) { 667 if (iter != message_data.end()) {
661 message_type = DecodeMessageType(iter->second); 668 message_type = DecodeMessageType(iter->second);
662 message_data.erase(iter); 669 message_data.erase(iter);
663 } 670 }
664 671
665 switch (message_type) { 672 switch (message_type) {
666 case DATA_MESSAGE: 673 case DATA_MESSAGE:
667 HandleIncomingDataMessage(data_message_stanza, message_data); 674 HandleIncomingDataMessage(data_message_stanza, message_data);
668 break; 675 break;
669 case DELETED_MESSAGES: 676 case DELETED_MESSAGES:
677 recorder_.RecordDataDeletedMessage(data_message_stanza.category(),
678 data_message_stanza.from(),
679 data_message_stanza.ByteSize());
670 delegate_->OnMessagesDeleted(data_message_stanza.category()); 680 delegate_->OnMessagesDeleted(data_message_stanza.category());
671 break; 681 break;
672 case SEND_ERROR: 682 case SEND_ERROR:
673 HandleIncomingSendError(data_message_stanza, message_data); 683 HandleIncomingSendError(data_message_stanza, message_data);
674 break; 684 break;
675 case UNKNOWN: 685 case UNKNOWN:
676 default: // Treat default the same as UNKNOWN. 686 default: // Treat default the same as UNKNOWN.
677 DVLOG(1) << "Unknown message_type received. Message ignored. " 687 DVLOG(1) << "Unknown message_type received. Message ignored. "
678 << "App ID: " << data_message_stanza.category() << "."; 688 << "App ID: " << data_message_stanza.category() << ".";
679 break; 689 break;
680 } 690 }
681 } 691 }
682 692
683 void GCMClientImpl::HandleIncomingDataMessage( 693 void GCMClientImpl::HandleIncomingDataMessage(
684 const mcs_proto::DataMessageStanza& data_message_stanza, 694 const mcs_proto::DataMessageStanza& data_message_stanza,
685 MessageData& message_data) { 695 MessageData& message_data) {
686 std::string app_id = data_message_stanza.category(); 696 std::string app_id = data_message_stanza.category();
687 697
688 // Drop the message when the app is not registered for the sender of the 698 // Drop the message when the app is not registered for the sender of the
689 // message. 699 // message.
690 RegistrationInfoMap::iterator iter = registrations_.find(app_id); 700 RegistrationInfoMap::iterator iter = registrations_.find(app_id);
691 if (iter == registrations_.end() || 701 if (iter == registrations_.end() ||
692 std::find(iter->second->sender_ids.begin(), 702 std::find(iter->second->sender_ids.begin(),
693 iter->second->sender_ids.end(), 703 iter->second->sender_ids.end(),
694 data_message_stanza.from()) == iter->second->sender_ids.end()) { 704 data_message_stanza.from()) == iter->second->sender_ids.end()) {
705 recorder_.RecordDataRecieved(app_id, data_message_stanza.from(),
706 data_message_stanza.ByteSize(), false);
695 return; 707 return;
696 } 708 }
697 709
698 IncomingMessage incoming_message; 710 IncomingMessage incoming_message;
699 incoming_message.sender_id = data_message_stanza.from(); 711 incoming_message.sender_id = data_message_stanza.from();
700 if (data_message_stanza.has_token()) 712 if (data_message_stanza.has_token())
701 incoming_message.collapse_key = data_message_stanza.token(); 713 incoming_message.collapse_key = data_message_stanza.token();
702 incoming_message.data = message_data; 714 incoming_message.data = message_data;
715 recorder_.RecordDataRecieved(app_id, data_message_stanza.from(),
jianli 2014/04/23 17:22:35 You can combine both recording into one by introdu
juyik 2014/04/23 21:36:56 Done.
716 data_message_stanza.ByteSize(), true);
703 delegate_->OnMessageReceived(app_id, incoming_message); 717 delegate_->OnMessageReceived(app_id, incoming_message);
704 } 718 }
705 719
706 void GCMClientImpl::HandleIncomingSendError( 720 void GCMClientImpl::HandleIncomingSendError(
707 const mcs_proto::DataMessageStanza& data_message_stanza, 721 const mcs_proto::DataMessageStanza& data_message_stanza,
708 MessageData& message_data) { 722 MessageData& message_data) {
709 SendErrorDetails send_error_details; 723 SendErrorDetails send_error_details;
710 send_error_details.additional_data = message_data; 724 send_error_details.additional_data = message_data;
711 send_error_details.result = SERVER_ERROR; 725 send_error_details.result = SERVER_ERROR;
712 726
713 MessageData::iterator iter = 727 MessageData::iterator iter =
714 send_error_details.additional_data.find(kSendErrorMessageIdKey); 728 send_error_details.additional_data.find(kSendErrorMessageIdKey);
715 if (iter != send_error_details.additional_data.end()) { 729 if (iter != send_error_details.additional_data.end()) {
716 send_error_details.message_id = iter->second; 730 send_error_details.message_id = iter->second;
717 send_error_details.additional_data.erase(iter); 731 send_error_details.additional_data.erase(iter);
718 } 732 }
719 733
720 recorder_.RecordIncomingSendError( 734 recorder_.RecordIncomingSendError(
721 data_message_stanza.category(), 735 data_message_stanza.category(),
722 data_message_stanza.to(), 736 data_message_stanza.to(),
723 data_message_stanza.id()); 737 data_message_stanza.id());
724 delegate_->OnMessageSendError(data_message_stanza.category(), 738 delegate_->OnMessageSendError(data_message_stanza.category(),
725 send_error_details); 739 send_error_details);
726 } 740 }
727 741
728 } // namespace gcm 742 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698