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

Side by Side Diff: google_apis/gcm/engine/mcs_client.cc

Issue 202083005: Add activity recording capability to gcm internals page. User can refresh, start/stop recording, an… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolving another merge conflict. Created 6 years, 9 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/engine/mcs_client.h" 5 #include "google_apis/gcm/engine/mcs_client.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/stringprintf.h"
jianli 2014/03/26 20:17:18 nit: is this needed?
juyik 2014/03/26 20:57:32 Done. Not anymore.
13 #include "base/time/clock.h" 14 #include "base/time/clock.h"
14 #include "base/time/time.h" 15 #include "base/time/time.h"
15 #include "google_apis/gcm/base/mcs_util.h" 16 #include "google_apis/gcm/base/mcs_util.h"
16 #include "google_apis/gcm/base/socket_stream.h" 17 #include "google_apis/gcm/base/socket_stream.h"
17 #include "google_apis/gcm/engine/connection_factory.h" 18 #include "google_apis/gcm/engine/connection_factory.h"
19 #include "google_apis/gcm/gcm_stats_recorder.h"
18 20
19 using namespace google::protobuf::io; 21 using namespace google::protobuf::io;
20 22
21 namespace gcm { 23 namespace gcm {
22 24
23 namespace { 25 namespace {
24 26
25 typedef scoped_ptr<google::protobuf::MessageLite> MCSProto; 27 typedef scoped_ptr<google::protobuf::MessageLite> MCSProto;
26 28
27 // The category of messages intended for the GCM client itself from MCS. 29 // The category of messages intended for the GCM client itself from MCS.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 123
122 // The protobuf of the message itself. 124 // The protobuf of the message itself.
123 MCSProto protobuf; 125 MCSProto protobuf;
124 }; 126 };
125 127
126 ReliablePacketInfo::ReliablePacketInfo() 128 ReliablePacketInfo::ReliablePacketInfo()
127 : stream_id(0), tag(0) { 129 : stream_id(0), tag(0) {
128 } 130 }
129 ReliablePacketInfo::~ReliablePacketInfo() {} 131 ReliablePacketInfo::~ReliablePacketInfo() {}
130 132
133 int MCSClient::GetSendQueueSize() const {
134 return to_send_.size();
135 }
136
137 int MCSClient::GetUnackedQueueSize() const {
138 return to_resend_.size();
139 }
140
131 std::string MCSClient::GetStateString() const { 141 std::string MCSClient::GetStateString() const {
132 switch(state_) { 142 switch(state_) {
133 case UNINITIALIZED: 143 case UNINITIALIZED:
134 return "UNINITIALIZED"; 144 return "UNINITIALIZED";
135 case LOADED: 145 case LOADED:
136 return "LOADED"; 146 return "LOADED";
137 case CONNECTING: 147 case CONNECTING:
138 return "CONNECTING"; 148 return "CONNECTING";
139 case CONNECTED: 149 case CONNECTED:
140 return "CONNECTED"; 150 return "CONNECTED";
141 default: 151 default:
142 NOTREACHED(); 152 NOTREACHED();
143 return std::string(); 153 return std::string();
144 } 154 }
145 } 155 }
146 156
147 MCSClient::MCSClient(const std::string& version_string, 157 MCSClient::MCSClient(const std::string& version_string,
148 base::Clock* clock, 158 base::Clock* clock,
149 ConnectionFactory* connection_factory, 159 ConnectionFactory* connection_factory,
150 GCMStore* gcm_store) 160 GCMStore* gcm_store,
161 GCMStatsRecorder* recorder)
151 : version_string_(version_string), 162 : version_string_(version_string),
152 clock_(clock), 163 clock_(clock),
153 state_(UNINITIALIZED), 164 state_(UNINITIALIZED),
154 android_id_(0), 165 android_id_(0),
155 security_token_(0), 166 security_token_(0),
156 connection_factory_(connection_factory), 167 connection_factory_(connection_factory),
157 connection_handler_(NULL), 168 connection_handler_(NULL),
158 last_device_to_server_stream_id_received_(0), 169 last_device_to_server_stream_id_received_(0),
159 last_server_to_device_stream_id_received_(0), 170 last_server_to_device_stream_id_received_(0),
160 stream_id_out_(0), 171 stream_id_out_(0),
161 stream_id_in_(0), 172 stream_id_in_(0),
162 gcm_store_(gcm_store), 173 gcm_store_(gcm_store),
174 recorder_(recorder),
163 weak_ptr_factory_(this) { 175 weak_ptr_factory_(this) {
164 } 176 }
165 177
166 MCSClient::~MCSClient() { 178 MCSClient::~MCSClient() {
167 } 179 }
168 180
169 void MCSClient::Initialize( 181 void MCSClient::Initialize(
170 const ErrorCallback& error_callback, 182 const ErrorCallback& error_callback,
171 const OnMessageReceivedCallback& message_received_callback, 183 const OnMessageReceivedCallback& message_received_callback,
172 const OnMessageSentCallback& message_sent_callback, 184 const OnMessageSentCallback& message_sent_callback,
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 if (packet_info->tag == kDataMessageStanzaTag) { 500 if (packet_info->tag == kDataMessageStanzaTag) {
489 mcs_proto::DataMessageStanza* data_message = 501 mcs_proto::DataMessageStanza* data_message =
490 reinterpret_cast<mcs_proto::DataMessageStanza*>( 502 reinterpret_cast<mcs_proto::DataMessageStanza*>(
491 packet_info->protobuf.get()); 503 packet_info->protobuf.get());
492 uint64 sent = data_message->sent(); 504 uint64 sent = data_message->sent();
493 DCHECK_GT(sent, 0U); 505 DCHECK_GT(sent, 0U);
494 int queued = (clock_->Now().ToInternalValue() / 506 int queued = (clock_->Now().ToInternalValue() /
495 base::Time::kMicrosecondsPerSecond) - sent; 507 base::Time::kMicrosecondsPerSecond) - sent;
496 DVLOG(1) << "Message was queued for " << queued << " seconds."; 508 DVLOG(1) << "Message was queued for " << queued << " seconds.";
497 data_message->set_queued(queued); 509 data_message->set_queued(queued);
510 recorder_->RecordSentToWire(
511 data_message->category(),
512 data_message->to(),
513 data_message->id(),
514 queued);
498 } 515 }
499 516
500 // Set the proper last received stream id to acknowledge received server 517 // Set the proper last received stream id to acknowledge received server
501 // packets. 518 // packets.
502 DVLOG(1) << "Setting last stream id received to " 519 DVLOG(1) << "Setting last stream id received to "
503 << stream_id_in_; 520 << stream_id_in_;
504 SetLastStreamIdReceived(stream_id_in_, 521 SetLastStreamIdReceived(stream_id_in_,
505 packet_info->protobuf.get()); 522 packet_info->protobuf.get());
506 if (stream_id_in_ != last_server_to_device_stream_id_received_) { 523 if (stream_id_in_ != last_server_to_device_stream_id_received_) {
507 last_server_to_device_stream_id_received_ = stream_id_in_; 524 last_server_to_device_stream_id_received_ = stream_id_in_;
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 } 872 }
856 873
857 void MCSClient::NotifyMessageSendStatus( 874 void MCSClient::NotifyMessageSendStatus(
858 const google::protobuf::MessageLite& protobuf, 875 const google::protobuf::MessageLite& protobuf,
859 MessageSendStatus status) { 876 MessageSendStatus status) {
860 if (GetMCSProtoTag(protobuf) != kDataMessageStanzaTag) 877 if (GetMCSProtoTag(protobuf) != kDataMessageStanzaTag)
861 return; 878 return;
862 879
863 const mcs_proto::DataMessageStanza* data_message_stanza = 880 const mcs_proto::DataMessageStanza* data_message_stanza =
864 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf); 881 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf);
882 recorder_->RecordNotifySendStatus(
883 data_message_stanza->category(),
884 data_message_stanza->to(),
885 data_message_stanza->id(),
886 status,
887 protobuf.ByteSize(),
888 data_message_stanza->ttl());
865 message_sent_callback_.Run( 889 message_sent_callback_.Run(
866 data_message_stanza->device_user_id(), 890 data_message_stanza->device_user_id(),
867 data_message_stanza->category(), 891 data_message_stanza->category(),
868 data_message_stanza->id(), 892 data_message_stanza->id(),
869 status); 893 status);
870 } 894 }
871 895
872 MCSClient::MCSPacketInternal MCSClient::PopMessageForSend() { 896 MCSClient::MCSPacketInternal MCSClient::PopMessageForSend() {
873 MCSPacketInternal packet = to_send_.front(); 897 MCSPacketInternal packet = to_send_.front();
874 to_send_.pop_front(); 898 to_send_.pop_front();
875 899
876 if (packet->tag == kDataMessageStanzaTag) { 900 if (packet->tag == kDataMessageStanzaTag) {
877 mcs_proto::DataMessageStanza* data_message = 901 mcs_proto::DataMessageStanza* data_message =
878 reinterpret_cast<mcs_proto::DataMessageStanza*>(packet->protobuf.get()); 902 reinterpret_cast<mcs_proto::DataMessageStanza*>(packet->protobuf.get());
879 CollapseKey collapse_key(*data_message); 903 CollapseKey collapse_key(*data_message);
880 if (collapse_key.IsValid()) 904 if (collapse_key.IsValid())
881 collapse_key_map_.erase(collapse_key); 905 collapse_key_map_.erase(collapse_key);
882 } 906 }
883 907
884 return packet; 908 return packet;
885 } 909 }
886 910
887 } // namespace gcm 911 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698