Index: google_apis/gcm/engine/mcs_client.cc |
diff --git a/google_apis/gcm/engine/mcs_client.cc b/google_apis/gcm/engine/mcs_client.cc |
index c203c2a6bb259545de2d3b32dadd7e57505d4721..d9b8d1ef322897f462eba5be3167037061e8404b 100644 |
--- a/google_apis/gcm/engine/mcs_client.cc |
+++ b/google_apis/gcm/engine/mcs_client.cc |
@@ -63,6 +63,30 @@ bool BuildPersistentIdListFromProto(const google::protobuf::string& bytes, |
return true; |
} |
+// Helper for getting string representation of the MessageSendStatus enum. |
+std::string GetMessageSendStatusString( |
fgorski
2014/03/18 21:28:37
This should happen closer to UI. MCS client should
juyik
2014/03/20 01:09:53
Following my comments about SoC principle in gcm_s
|
+ gcm::MCSClient::MessageSendStatus status) { |
+ switch (status) { |
+ case gcm::MCSClient::QUEUED: |
+ return "QUEUED"; |
+ case gcm::MCSClient::SENT: |
+ return "SENT"; |
+ case gcm::MCSClient::QUEUE_SIZE_LIMIT_REACHED: |
+ return "QUEUE_SIZE_LIMIT_REACHED"; |
+ case gcm::MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: |
+ return "APP_QUEUE_SIZE_LIMIT_REACHED"; |
+ case gcm::MCSClient::MESSAGE_TOO_LARGE: |
+ return "MESSAGE_TOO_LARGE"; |
+ case gcm::MCSClient::NO_CONNECTION_ON_ZERO_TTL: |
+ return "NO_CONNECTION_ON_ZERO_TTL"; |
+ case gcm::MCSClient::TTL_EXCEEDED: |
+ return "TTL_EXCEEDED"; |
+ default: |
+ NOTREACHED(); |
+ return "UNKNOWN"; |
+ } |
+} |
+ |
} // namespace |
class CollapseKey { |
@@ -128,6 +152,14 @@ ReliablePacketInfo::ReliablePacketInfo() |
} |
ReliablePacketInfo::~ReliablePacketInfo() {} |
+int MCSClient::GetSendQueueSize() const { |
+ return to_send_.size(); |
fgorski
2014/03/18 21:28:37
Could we pass these values to the recorder every t
juyik
2014/03/20 01:09:53
It seems that having a snapshot of these items (li
|
+} |
+ |
+int MCSClient::GetUnackedQueueSize() const { |
+ return to_resend_.size(); |
+} |
+ |
std::string MCSClient::GetStateString() const { |
switch(state_) { |
case UNINITIALIZED: |
@@ -147,7 +179,8 @@ std::string MCSClient::GetStateString() const { |
MCSClient::MCSClient(const std::string& version_string, |
base::Clock* clock, |
ConnectionFactory* connection_factory, |
- GCMStore* gcm_store) |
+ GCMStore* gcm_store, |
+ GCMStatsRecorder* recorder) |
: version_string_(version_string), |
clock_(clock), |
state_(UNINITIALIZED), |
@@ -160,6 +193,7 @@ MCSClient::MCSClient(const std::string& version_string, |
stream_id_out_(0), |
stream_id_in_(0), |
gcm_store_(gcm_store), |
+ recorder_(recorder), |
weak_ptr_factory_(this) { |
} |
@@ -495,6 +529,13 @@ void MCSClient::SendPacketToWire(ReliablePacketInfo* packet_info) { |
base::Time::kMicrosecondsPerSecond) - sent; |
DVLOG(1) << "Message was queued for " << queued << " seconds."; |
data_message->set_queued(queued); |
+ recorder_->RecordSendWithDetails( |
+ data_message->category(), |
+ gcm::GCMStatsRecorder::Intermediate, |
+ data_message->to(), |
+ data_message->id(), |
+ packet_info->protobuf->ByteSize(), |
+ "SENT TO WIRE"); |
} |
// Set the proper last received stream id to acknowledge received server |
@@ -862,6 +903,15 @@ void MCSClient::NotifyMessageSendStatus( |
const mcs_proto::DataMessageStanza* data_message_stanza = |
reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf); |
+ recorder_->RecordSendWithDetails( |
+ data_message_stanza->category(), |
+ status == SENT ? gcm::GCMStatsRecorder::Success : |
+ (status == QUEUED ? gcm::GCMStatsRecorder::Intermediate : |
+ gcm::GCMStatsRecorder::Failure), |
+ data_message_stanza->to(), |
+ data_message_stanza->id(), |
+ protobuf.ByteSize(), |
+ GetMessageSendStatusString(status)); |
message_sent_callback_.Run( |
data_message_stanza->device_user_id(), |
data_message_stanza->category(), |