diff options
Diffstat (limited to 'google_apis')
13 files changed, 133 insertions, 30 deletions
diff --git a/google_apis/gcm/engine/gcm_registration_request_handler.cc b/google_apis/gcm/engine/gcm_registration_request_handler.cc index c0213f3..9533165 100644 --- a/google_apis/gcm/engine/gcm_registration_request_handler.cc +++ b/google_apis/gcm/engine/gcm_registration_request_handler.cc @@ -4,6 +4,7 @@ #include "google_apis/gcm/engine/gcm_registration_request_handler.h" +#include "base/metrics/histogram.h" #include "google_apis/gcm/base/gcm_util.h" namespace gcm { @@ -26,4 +27,20 @@ void GCMRegistrationRequestHandler::BuildRequestBody(std::string* body){ BuildFormEncoding(kSenderKey, senders_, body); } +void GCMRegistrationRequestHandler::ReportUMAs( + RegistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) { + UMA_HISTOGRAM_ENUMERATION("GCM.RegistrationRequestStatus", + status, + RegistrationRequest::STATUS_COUNT); + + // Other UMAs are only reported when the request succeeds. + if (status != RegistrationRequest::SUCCESS) + return; + + UMA_HISTOGRAM_COUNTS("GCM.RegistrationRetryCount", retry_count); + UMA_HISTOGRAM_TIMES("GCM.RegistrationCompleteTime", complete_time); +} + } // namespace gcm diff --git a/google_apis/gcm/engine/gcm_registration_request_handler.h b/google_apis/gcm/engine/gcm_registration_request_handler.h index 26ba49d..934f927 100644 --- a/google_apis/gcm/engine/gcm_registration_request_handler.h +++ b/google_apis/gcm/engine/gcm_registration_request_handler.h @@ -18,6 +18,9 @@ class GCM_EXPORT GCMRegistrationRequestHandler : // RegistrationRequest::RequestHandler overrides: void BuildRequestBody(std::string* body) override; + void ReportUMAs(RegistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) override; private: std::string senders_; diff --git a/google_apis/gcm/engine/gcm_store_impl.cc b/google_apis/gcm/engine/gcm_store_impl.cc index 3436ba9..b90630a 100644 --- a/google_apis/gcm/engine/gcm_store_impl.cc +++ b/google_apis/gcm/engine/gcm_store_impl.cc @@ -17,6 +17,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_tokenizer.h" +#include "base/strings/string_util.h" #include "base/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/tracked_objects.h" @@ -336,6 +337,17 @@ void GCMStoreImpl::Backend::Load(const LoadCallback& callback) { return; } + // |result->registrations| contains both GCM registrations and InstanceID + // tokens. Count them separately. + int gcm_registration_count = 0; + int instance_id_token_count = 0; + for (const auto& registration : result->registrations) { + if (StartsWithASCII(registration.first, "iid-", true)) + instance_id_token_count++; + else + gcm_registration_count++; + } + // Only record histograms if GCM had already been set up for this device. if (result->device_android_id != 0 && result->device_security_token != 0) { int64 file_size = 0; @@ -343,20 +355,27 @@ void GCMStoreImpl::Backend::Load(const LoadCallback& callback) { UMA_HISTOGRAM_COUNTS("GCM.StoreSizeKB", static_cast<int>(file_size / 1024)); } - UMA_HISTOGRAM_COUNTS("GCM.RestoredRegistrations", - result->registrations.size()); + + UMA_HISTOGRAM_COUNTS("GCM.RestoredRegistrations", gcm_registration_count); UMA_HISTOGRAM_COUNTS("GCM.RestoredOutgoingMessages", result->outgoing_messages.size()); UMA_HISTOGRAM_COUNTS("GCM.RestoredIncomingMessages", result->incoming_messages.size()); + + UMA_HISTOGRAM_COUNTS("InstanceID.RestoredTokenCount", + instance_id_token_count); + UMA_HISTOGRAM_COUNTS("InstanceID.RestoredIDCount", + result->instance_id_data.size()); } - DVLOG(1) << "Succeeded in loading " << result->registrations.size() - << " registrations, " + DVLOG(1) << "Succeeded in loading " + << gcm_registration_count << " GCM registrations, " << result->incoming_messages.size() - << " unacknowledged incoming messages and " + << " unacknowledged incoming messages " << result->outgoing_messages.size() - << " unacknowledged outgoing messages."; + << " unacknowledged outgoing messages, " + << result->instance_id_data.size() << " Instance IDs, " + << instance_id_token_count << " InstanceID tokens."; result->success = true; foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, diff --git a/google_apis/gcm/engine/gcm_unregistration_request_handler.cc b/google_apis/gcm/engine/gcm_unregistration_request_handler.cc index 86f473b..5d37382 100644 --- a/google_apis/gcm/engine/gcm_unregistration_request_handler.cc +++ b/google_apis/gcm/engine/gcm_unregistration_request_handler.cc @@ -4,6 +4,7 @@ #include "google_apis/gcm/engine/gcm_unregistration_request_handler.h" +#include "base/metrics/histogram.h" #include "google_apis/gcm/base/gcm_util.h" #include "net/url_request/url_fetcher.h" @@ -65,4 +66,20 @@ UnregistrationRequest::Status GCMUnregistrationRequestHandler::ParseResponse( return UnregistrationRequest::RESPONSE_PARSING_FAILED; } +void GCMUnregistrationRequestHandler::ReportUMAs( + UnregistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) { + UMA_HISTOGRAM_ENUMERATION("GCM.UnregistrationRequestStatus", + status, + UnregistrationRequest::UNREGISTRATION_STATUS_COUNT); + + // Other UMAs are only reported when the request succeeds. + if (status != UnregistrationRequest::SUCCESS) + return; + + UMA_HISTOGRAM_COUNTS("GCM.UnregistrationRetryCount", retry_count); + UMA_HISTOGRAM_TIMES("GCM.UnregistrationCompleteTime", complete_time); +} + } // namespace gcm diff --git a/google_apis/gcm/engine/gcm_unregistration_request_handler.h b/google_apis/gcm/engine/gcm_unregistration_request_handler.h index ac2a5d4..e66f355 100644 --- a/google_apis/gcm/engine/gcm_unregistration_request_handler.h +++ b/google_apis/gcm/engine/gcm_unregistration_request_handler.h @@ -21,6 +21,9 @@ class GCM_EXPORT GCMUnregistrationRequestHandler : void BuildRequestBody(std::string* body) override; UnregistrationRequest::Status ParseResponse( const net::URLFetcher* source) override; + void ReportUMAs(UnregistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) override; private: std::string app_id_; diff --git a/google_apis/gcm/engine/instance_id_delete_token_request_handler.cc b/google_apis/gcm/engine/instance_id_delete_token_request_handler.cc index 2ee4713..82de88a 100644 --- a/google_apis/gcm/engine/instance_id_delete_token_request_handler.cc +++ b/google_apis/gcm/engine/instance_id_delete_token_request_handler.cc @@ -4,6 +4,7 @@ #include "google_apis/gcm/engine/instance_id_delete_token_request_handler.h" +#include "base/metrics/histogram.h" #include "base/strings/string_number_conversions.h" #include "google_apis/gcm/base/gcm_util.h" #include "net/url_request/url_fetcher.h" @@ -66,4 +67,20 @@ InstanceIDDeleteTokenRequestHandler::ParseResponse( return UnregistrationRequest::SUCCESS; } +void InstanceIDDeleteTokenRequestHandler::ReportUMAs( + UnregistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) { + UMA_HISTOGRAM_ENUMERATION("InstanceID.DeleteToken.RequestStatus", + status, + UnregistrationRequest::UNREGISTRATION_STATUS_COUNT); + + // Other UMAs are only reported when the request succeeds. + if (status != UnregistrationRequest::SUCCESS) + return; + + UMA_HISTOGRAM_COUNTS("InstanceID.DeleteToken.RetryCount", retry_count); + UMA_HISTOGRAM_TIMES("InstanceID.DeleteToken.CompleteTime", complete_time); +} + } // namespace gcm diff --git a/google_apis/gcm/engine/instance_id_delete_token_request_handler.h b/google_apis/gcm/engine/instance_id_delete_token_request_handler.h index fec6e04..cd10d34 100644 --- a/google_apis/gcm/engine/instance_id_delete_token_request_handler.h +++ b/google_apis/gcm/engine/instance_id_delete_token_request_handler.h @@ -26,6 +26,9 @@ class GCM_EXPORT InstanceIDDeleteTokenRequestHandler : void BuildRequestBody(std::string* body) override; UnregistrationRequest::Status ParseResponse( const net::URLFetcher* source) override; + void ReportUMAs(UnregistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) override; private: std::string instance_id_; diff --git a/google_apis/gcm/engine/instance_id_get_token_request_handler.cc b/google_apis/gcm/engine/instance_id_get_token_request_handler.cc index ebf6279..1ca735b 100644 --- a/google_apis/gcm/engine/instance_id_get_token_request_handler.cc +++ b/google_apis/gcm/engine/instance_id_get_token_request_handler.cc @@ -4,6 +4,7 @@ #include "google_apis/gcm/engine/instance_id_get_token_request_handler.h" +#include "base/metrics/histogram.h" #include "base/strings/string_number_conversions.h" #include "google_apis/gcm/base/gcm_util.h" #include "net/url_request/url_request_context_getter.h" @@ -53,4 +54,20 @@ void InstanceIDGetTokenRequestHandler::BuildRequestBody(std::string* body){ BuildFormEncoding(kSubtypeKey, authorized_entity_, body); } +void InstanceIDGetTokenRequestHandler::ReportUMAs( + RegistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) { + UMA_HISTOGRAM_ENUMERATION("InstanceID.GetToken.RequestStatus", + status, + RegistrationRequest::STATUS_COUNT); + + // Other UMAs are only reported when the request succeeds. + if (status != RegistrationRequest::SUCCESS) + return; + + UMA_HISTOGRAM_COUNTS("InstanceID.GetToken.RetryCount", retry_count); + UMA_HISTOGRAM_TIMES("InstanceID.GetToken.CompleteTime", complete_time); +} + } // namespace gcm diff --git a/google_apis/gcm/engine/instance_id_get_token_request_handler.h b/google_apis/gcm/engine/instance_id_get_token_request_handler.h index c09b1ab..de92ab9 100644 --- a/google_apis/gcm/engine/instance_id_get_token_request_handler.h +++ b/google_apis/gcm/engine/instance_id_get_token_request_handler.h @@ -26,6 +26,9 @@ class GCM_EXPORT InstanceIDGetTokenRequestHandler : // RegistrationRequest overrides: void BuildRequestBody(std::string* body) override; + void ReportUMAs(RegistrationRequest::Status status, + int retry_count, + base::TimeDelta complete_time) override; private: std::string instance_id_; diff --git a/google_apis/gcm/engine/registration_request.cc b/google_apis/gcm/engine/registration_request.cc index b30bc4c..6537389 100644 --- a/google_apis/gcm/engine/registration_request.cc +++ b/google_apis/gcm/engine/registration_request.cc @@ -65,11 +65,6 @@ bool ShouldRetryWithStatus(RegistrationRequest::Status status) { status == RegistrationRequest::RESPONSE_PARSING_FAILED; } -void RecordRegistrationStatusToUMA(RegistrationRequest::Status status) { - UMA_HISTOGRAM_ENUMERATION("GCM.RegistrationRequestStatus", status, - RegistrationRequest::STATUS_COUNT); -} - } // namespace RegistrationRequest::RequestInfo::RequestInfo( @@ -228,12 +223,17 @@ RegistrationRequest::Status RegistrationRequest::ParseResponse( void RegistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { std::string token; Status status = ParseResponse(source, &token); - RecordRegistrationStatusToUMA(status); recorder_->RecordRegistrationResponse( request_info_.app_id, source_to_record_, status); + DCHECK(custom_request_handler_.get()); + custom_request_handler_->ReportUMAs( + status, + backoff_entry_.failure_count(), + base::TimeTicks::Now() - request_start_time_); + if (ShouldRetryWithStatus(status)) { if (retries_left_ > 0) { recorder_->RecordRegistrationRetryRequested( @@ -249,15 +249,13 @@ void RegistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { request_info_.app_id, source_to_record_, status); - RecordRegistrationStatusToUMA(status); - } - if (status == SUCCESS) { - UMA_HISTOGRAM_COUNTS("GCM.RegistrationRetryCount", - backoff_entry_.failure_count()); - UMA_HISTOGRAM_TIMES("GCM.RegistrationCompleteTime", - base::TimeTicks::Now() - request_start_time_); + // Only REACHED_MAX_RETRIES is reported because the function will skip + // reporting count and time when status is not SUCCESS. + DCHECK(custom_request_handler_.get()); + custom_request_handler_->ReportUMAs(status, 0, base::TimeDelta()); } + callback_.Run(status, token); } diff --git a/google_apis/gcm/engine/registration_request.h b/google_apis/gcm/engine/registration_request.h index c4c3ae7..96d77fd 100644 --- a/google_apis/gcm/engine/registration_request.h +++ b/google_apis/gcm/engine/registration_request.h @@ -87,6 +87,11 @@ class GCM_EXPORT RegistrationRequest : public net::URLFetcherDelegate { // RegistrationRequest::BuildRequestBody to append more custom info to // |body|. Note that the request body is encoded in HTTP form format. virtual void BuildRequestBody(std::string* body) = 0; + + // Reports various UMAs, including status, retry count and completion time. + virtual void ReportUMAs(Status status, + int retry_count, + base::TimeDelta complete_time) = 0; }; RegistrationRequest( diff --git a/google_apis/gcm/engine/unregistration_request.cc b/google_apis/gcm/engine/unregistration_request.cc index 931a5e9..bb68c72 100644 --- a/google_apis/gcm/engine/unregistration_request.cc +++ b/google_apis/gcm/engine/unregistration_request.cc @@ -6,7 +6,6 @@ #include "base/bind.h" #include "base/message_loop/message_loop.h" -#include "base/metrics/histogram.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/values.h" @@ -169,9 +168,13 @@ void UnregistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { UnregistrationRequest::Status status = ParseResponse(source); DVLOG(1) << "UnregistrationRequestStauts: " << status; - UMA_HISTOGRAM_ENUMERATION("GCM.UnregistrationRequestStatus", - status, - UNREGISTRATION_STATUS_COUNT); + + DCHECK(custom_request_handler_.get()); + custom_request_handler_->ReportUMAs( + status, + backoff_entry_.failure_count(), + base::TimeTicks::Now() - request_start_time_); + recorder_->RecordUnregistrationResponse(request_info_.app_id, status); if (status == URL_FETCHING_FAILED || @@ -186,13 +189,6 @@ void UnregistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { // status == SUCCESS || HTTP_NOT_OK || NO_RESPONSE_BODY || // INVALID_PARAMETERS || UNKNOWN_ERROR - if (status == SUCCESS) { - UMA_HISTOGRAM_COUNTS("GCM.UnregistrationRetryCount", - backoff_entry_.failure_count()); - UMA_HISTOGRAM_TIMES("GCM.UnregistrationCompleteTime", - base::TimeTicks::Now() - request_start_time_); - } - callback_.Run(status); } diff --git a/google_apis/gcm/engine/unregistration_request.h b/google_apis/gcm/engine/unregistration_request.h index 61d9bff2..0f54538 100644 --- a/google_apis/gcm/engine/unregistration_request.h +++ b/google_apis/gcm/engine/unregistration_request.h @@ -86,6 +86,11 @@ class GCM_EXPORT UnregistrationRequest : public net::URLFetcherDelegate { // Parses the HTTP response. It is called after // UnregistrationRequest::ParseResponse to proceed the parsing. virtual Status ParseResponse(const net::URLFetcher* source) = 0; + + // Reports various UMAs, including status, retry count and completion time. + virtual void ReportUMAs(Status status, + int retry_count, + base::TimeDelta complete_time) = 0; }; // Creates an instance of UnregistrationRequest. |callback| will be called |