Index: sync/notifier/gcm_network_channel.cc |
diff --git a/sync/notifier/gcm_network_channel.cc b/sync/notifier/gcm_network_channel.cc |
index 78ac8922c4b151c1b0d3a83d3cc551401e790ae8..0badd3f26273b364199d049dda04a8571c7ed3d9 100644 |
--- a/sync/notifier/gcm_network_channel.cc |
+++ b/sync/notifier/gcm_network_channel.cc |
@@ -6,6 +6,7 @@ |
#include "base/i18n/time_formatting.h" |
#include "base/metrics/histogram.h" |
#include "base/sha1.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#if !defined(ANDROID) |
// channel_common.proto defines ANDROID constant that conflicts with Android |
@@ -56,18 +57,6 @@ const net::BackoffEntry::Policy kRegisterBackoffPolicy = { |
false, |
}; |
-// Outgoing message status values for UMA_HISTOGRAM. |
-enum OutgoingMessageStatus { |
- OUTGOING_MESSAGE_SUCCESS, |
- MESSAGE_DISCARDED, // New message started before old one was sent. |
- ACCESS_TOKEN_FAILURE, // Requeting access token failed. |
- POST_FAILURE, // HTTP Post failed. |
- |
- // This enum is used in UMA_HISTOGRAM_ENUMERATION. Insert new values above |
- // this line. |
- OUTGOING_MESSAGE_STATUS_COUNT |
-}; |
- |
// Incoming message status values for UMA_HISTOGRAM. |
enum IncomingMessageStatus { |
INCOMING_MESSAGE_SUCCESS, |
@@ -80,10 +69,34 @@ enum IncomingMessageStatus { |
INCOMING_MESSAGE_STATUS_COUNT |
}; |
-const char kOutgoingMessageStatusHistogram[] = |
- "GCMInvalidations.OutgoingMessageStatus"; |
+// Outgoing message status values for UMA_HISTOGRAM. |
+enum OutgoingMessageStatus { |
+ OUTGOING_MESSAGE_SUCCESS, |
+ MESSAGE_DISCARDED, // New message started before old one was sent. |
+ ACCESS_TOKEN_FAILURE, // Requeting access token failed. |
+ POST_FAILURE, // HTTP Post failed. |
+ |
+ // This enum is used in UMA_HISTOGRAM_ENUMERATION. Insert new values above |
+ // this line. |
+ OUTGOING_MESSAGE_STATUS_COUNT |
+}; |
+ |
const char kIncomingMessageStatusHistogram[] = |
"GCMInvalidations.IncomingMessageStatus"; |
+const char kOutgoingMessageStatusHistogram[] = |
+ "GCMInvalidations.OutgoingMessageStatus"; |
+ |
+void RecordIncomingMessageStatus(IncomingMessageStatus status) { |
+ UMA_HISTOGRAM_ENUMERATION(kIncomingMessageStatusHistogram, |
+ status, |
+ INCOMING_MESSAGE_STATUS_COUNT); |
+} |
+ |
+void RecordOutgoingMessageStatus(OutgoingMessageStatus status) { |
+ UMA_HISTOGRAM_ENUMERATION(kOutgoingMessageStatusHistogram, |
+ MESSAGE_DISCARDED, |
+ OUTGOING_MESSAGE_STATUS_COUNT); |
+} |
} // namespace |
@@ -99,8 +112,9 @@ scoped_ptr<base::DictionaryValue> |
GCMNetworkChannelDiagnostic::CollectDebugData() const { |
scoped_ptr<base::DictionaryValue> status(new base::DictionaryValue); |
status->SetString("GCMNetworkChannel.Channel", "GCM"); |
+ std::string reg_id_hash = base::SHA1HashString(registration_id_); |
status->SetString("GCMNetworkChannel.HashedRegistrationID", |
- base::SHA1HashString(registration_id_)); |
+ base::HexEncode(reg_id_hash.c_str(), reg_id_hash.size())); |
status->SetString("GCMNetworkChannel.RegistrationResult", |
GCMClientResultToString(registration_result_)); |
status->SetBoolean("GCMNetworkChannel.HadLastMessageEmptyEchoToken", |
@@ -210,9 +224,7 @@ void GCMNetworkChannel::SendMessage(const std::string& message) { |
DVLOG(2) << "SendMessage"; |
diagnostic_info_.sent_messages_count_++; |
if (!cached_message_.empty()) { |
- UMA_HISTOGRAM_ENUMERATION(kOutgoingMessageStatusHistogram, |
- MESSAGE_DISCARDED, |
- OUTGOING_MESSAGE_STATUS_COUNT); |
+ RecordOutgoingMessageStatus(MESSAGE_DISCARDED); |
} |
cached_message_ = message; |
@@ -248,9 +260,7 @@ void GCMNetworkChannel::OnGetTokenComplete( |
// token service. Just drop this request, cacheinvalidations will retry |
// sending message and at that time we'll retry requesting access token. |
DVLOG(1) << "RequestAccessToken failed: " << error.ToString(); |
- UMA_HISTOGRAM_ENUMERATION(kOutgoingMessageStatusHistogram, |
- ACCESS_TOKEN_FAILURE, |
- OUTGOING_MESSAGE_STATUS_COUNT); |
+ RecordOutgoingMessageStatus(ACCESS_TOKEN_FAILURE); |
cached_message_.clear(); |
return; |
} |
@@ -283,30 +293,22 @@ void GCMNetworkChannel::OnIncomingMessage(const std::string& message, |
diagnostic_info_.last_message_received_time_ = base::Time::Now(); |
if (message.empty()) { |
- UMA_HISTOGRAM_ENUMERATION(kIncomingMessageStatusHistogram, |
- MESSAGE_EMPTY, |
- INCOMING_MESSAGE_STATUS_COUNT); |
+ RecordIncomingMessageStatus(MESSAGE_EMPTY); |
return; |
} |
std::string data; |
if (!Base64DecodeURLSafe(message, &data)) { |
- UMA_HISTOGRAM_ENUMERATION(kIncomingMessageStatusHistogram, |
- INVALID_ENCODING, |
- INCOMING_MESSAGE_STATUS_COUNT); |
+ RecordIncomingMessageStatus(INVALID_ENCODING); |
return; |
} |
ipc::invalidation::AddressedAndroidMessage android_message; |
if (!android_message.ParseFromString(data) || |
!android_message.has_message()) { |
- UMA_HISTOGRAM_ENUMERATION(kIncomingMessageStatusHistogram, |
- INVALID_PROTO, |
- INCOMING_MESSAGE_STATUS_COUNT); |
+ RecordIncomingMessageStatus(INVALID_PROTO); |
return; |
} |
DVLOG(2) << "Deliver incoming message"; |
- UMA_HISTOGRAM_ENUMERATION(kIncomingMessageStatusHistogram, |
- INCOMING_MESSAGE_SUCCESS, |
- INCOMING_MESSAGE_STATUS_COUNT); |
+ RecordIncomingMessageStatus(INCOMING_MESSAGE_SUCCESS); |
DeliverIncomingMessage(android_message.message()); |
#else |
// This code shouldn't be invoked on Android. |
@@ -330,18 +332,15 @@ void GCMNetworkChannel::OnURLFetchComplete(const net::URLFetcher* source) { |
delegate_->InvalidateToken(access_token_); |
} |
- if (!status.is_success() || fetcher->GetResponseCode() != net::HTTP_OK || |
- fetcher->GetResponseCode() != net::HTTP_NO_CONTENT) { |
+ if (!status.is_success() || |
+ (fetcher->GetResponseCode() != net::HTTP_OK && |
+ fetcher->GetResponseCode() != net::HTTP_NO_CONTENT)) { |
DVLOG(1) << "URLFetcher failure"; |
- UMA_HISTOGRAM_ENUMERATION(kOutgoingMessageStatusHistogram, |
- POST_FAILURE, |
- OUTGOING_MESSAGE_STATUS_COUNT); |
+ RecordOutgoingMessageStatus(POST_FAILURE); |
return; |
} |
- UMA_HISTOGRAM_ENUMERATION(kOutgoingMessageStatusHistogram, |
- OUTGOING_MESSAGE_SUCCESS, |
- OUTGOING_MESSAGE_STATUS_COUNT); |
+ RecordOutgoingMessageStatus(OUTGOING_MESSAGE_SUCCESS); |
DVLOG(2) << "URLFetcher success"; |
} |