summaryrefslogtreecommitdiffstats
path: root/google_apis
diff options
context:
space:
mode:
Diffstat (limited to 'google_apis')
-rw-r--r--google_apis/gcm/engine/gcm_registration_request_handler.cc17
-rw-r--r--google_apis/gcm/engine/gcm_registration_request_handler.h3
-rw-r--r--google_apis/gcm/engine/gcm_store_impl.cc31
-rw-r--r--google_apis/gcm/engine/gcm_unregistration_request_handler.cc17
-rw-r--r--google_apis/gcm/engine/gcm_unregistration_request_handler.h3
-rw-r--r--google_apis/gcm/engine/instance_id_delete_token_request_handler.cc17
-rw-r--r--google_apis/gcm/engine/instance_id_delete_token_request_handler.h3
-rw-r--r--google_apis/gcm/engine/instance_id_get_token_request_handler.cc17
-rw-r--r--google_apis/gcm/engine/instance_id_get_token_request_handler.h3
-rw-r--r--google_apis/gcm/engine/registration_request.cc24
-rw-r--r--google_apis/gcm/engine/registration_request.h5
-rw-r--r--google_apis/gcm/engine/unregistration_request.cc18
-rw-r--r--google_apis/gcm/engine/unregistration_request.h5
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