| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/gcm_driver/gcm_stats_recorder_impl.h" | 5 #include "components/gcm_driver/gcm_stats_recorder_impl.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 case gcm::MCSClient::QUEUE_SIZE_LIMIT_REACHED: | 43 case gcm::MCSClient::QUEUE_SIZE_LIMIT_REACHED: |
| 44 return "QUEUE_SIZE_LIMIT_REACHED"; | 44 return "QUEUE_SIZE_LIMIT_REACHED"; |
| 45 case gcm::MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: | 45 case gcm::MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: |
| 46 return "APP_QUEUE_SIZE_LIMIT_REACHED"; | 46 return "APP_QUEUE_SIZE_LIMIT_REACHED"; |
| 47 case gcm::MCSClient::MESSAGE_TOO_LARGE: | 47 case gcm::MCSClient::MESSAGE_TOO_LARGE: |
| 48 return "MESSAGE_TOO_LARGE"; | 48 return "MESSAGE_TOO_LARGE"; |
| 49 case gcm::MCSClient::NO_CONNECTION_ON_ZERO_TTL: | 49 case gcm::MCSClient::NO_CONNECTION_ON_ZERO_TTL: |
| 50 return "NO_CONNECTION_ON_ZERO_TTL"; | 50 return "NO_CONNECTION_ON_ZERO_TTL"; |
| 51 case gcm::MCSClient::TTL_EXCEEDED: | 51 case gcm::MCSClient::TTL_EXCEEDED: |
| 52 return "TTL_EXCEEDED"; | 52 return "TTL_EXCEEDED"; |
| 53 default: | 53 case gcm::MCSClient::SEND_STATUS_COUNT: |
| 54 NOTREACHED(); | 54 NOTREACHED(); |
| 55 return "UNKNOWN"; | 55 break; |
| 56 } | 56 } |
| 57 return "UNKNOWN"; |
| 57 } | 58 } |
| 58 | 59 |
| 59 // Helper for getting string representation of the | 60 // Helper for getting string representation of the |
| 60 // ConnectionFactory::ConnectionResetReason enum. | 61 // ConnectionFactory::ConnectionResetReason enum. |
| 61 std::string GetConnectionResetReasonString( | 62 std::string GetConnectionResetReasonString( |
| 62 gcm::ConnectionFactory::ConnectionResetReason reason) { | 63 gcm::ConnectionFactory::ConnectionResetReason reason) { |
| 63 switch (reason) { | 64 switch (reason) { |
| 64 case gcm::ConnectionFactory::LOGIN_FAILURE: | 65 case gcm::ConnectionFactory::LOGIN_FAILURE: |
| 65 return "LOGIN_FAILURE"; | 66 return "LOGIN_FAILURE"; |
| 66 case gcm::ConnectionFactory::CLOSE_COMMAND: | 67 case gcm::ConnectionFactory::CLOSE_COMMAND: |
| 67 return "CLOSE_COMMAND"; | 68 return "CLOSE_COMMAND"; |
| 68 case gcm::ConnectionFactory::HEARTBEAT_FAILURE: | 69 case gcm::ConnectionFactory::HEARTBEAT_FAILURE: |
| 69 return "HEARTBEAT_FAILURE"; | 70 return "HEARTBEAT_FAILURE"; |
| 70 case gcm::ConnectionFactory::SOCKET_FAILURE: | 71 case gcm::ConnectionFactory::SOCKET_FAILURE: |
| 71 return "SOCKET_FAILURE"; | 72 return "SOCKET_FAILURE"; |
| 72 case gcm::ConnectionFactory::NETWORK_CHANGE: | 73 case gcm::ConnectionFactory::NETWORK_CHANGE: |
| 73 return "NETWORK_CHANGE"; | 74 return "NETWORK_CHANGE"; |
| 74 default: | 75 case gcm::ConnectionFactory::NEW_HEARTBEAT_INTERVAL: |
| 76 return "NEW_HEARTBEAT_INTERVAL"; |
| 77 case gcm::ConnectionFactory::CONNECTION_RESET_COUNT: |
| 75 NOTREACHED(); | 78 NOTREACHED(); |
| 76 return "UNKNOWN_REASON"; | 79 break; |
| 77 } | 80 } |
| 81 return "UNKNOWN_REASON"; |
| 78 } | 82 } |
| 79 | 83 |
| 80 // Helper for getting string representation of the RegistrationRequest::Status | 84 // Helper for getting string representation of the RegistrationRequest::Status |
| 81 // enum. | 85 // enum. |
| 82 std::string GetRegistrationStatusString( | 86 std::string GetRegistrationStatusString( |
| 83 gcm::RegistrationRequest::Status status) { | 87 gcm::RegistrationRequest::Status status) { |
| 84 switch (status) { | 88 switch (status) { |
| 85 case gcm::RegistrationRequest::SUCCESS: | 89 case gcm::RegistrationRequest::SUCCESS: |
| 86 return "SUCCESS"; | 90 return "SUCCESS"; |
| 87 case gcm::RegistrationRequest::INVALID_PARAMETERS: | 91 case gcm::RegistrationRequest::INVALID_PARAMETERS: |
| 88 return "INVALID_PARAMETERS"; | 92 return "INVALID_PARAMETERS"; |
| 89 case gcm::RegistrationRequest::INVALID_SENDER: | 93 case gcm::RegistrationRequest::INVALID_SENDER: |
| 90 return "INVALID_SENDER"; | 94 return "INVALID_SENDER"; |
| 91 case gcm::RegistrationRequest::AUTHENTICATION_FAILED: | 95 case gcm::RegistrationRequest::AUTHENTICATION_FAILED: |
| 92 return "AUTHENTICATION_FAILED"; | 96 return "AUTHENTICATION_FAILED"; |
| 93 case gcm::RegistrationRequest::DEVICE_REGISTRATION_ERROR: | 97 case gcm::RegistrationRequest::DEVICE_REGISTRATION_ERROR: |
| 94 return "DEVICE_REGISTRATION_ERROR"; | 98 return "DEVICE_REGISTRATION_ERROR"; |
| 95 case gcm::RegistrationRequest::UNKNOWN_ERROR: | 99 case gcm::RegistrationRequest::UNKNOWN_ERROR: |
| 96 return "UNKNOWN_ERROR"; | 100 return "UNKNOWN_ERROR"; |
| 97 case gcm::RegistrationRequest::URL_FETCHING_FAILED: | 101 case gcm::RegistrationRequest::URL_FETCHING_FAILED: |
| 98 return "URL_FETCHING_FAILED"; | 102 return "URL_FETCHING_FAILED"; |
| 99 case gcm::RegistrationRequest::HTTP_NOT_OK: | 103 case gcm::RegistrationRequest::HTTP_NOT_OK: |
| 100 return "HTTP_NOT_OK"; | 104 return "HTTP_NOT_OK"; |
| 101 case gcm::RegistrationRequest::RESPONSE_PARSING_FAILED: | 105 case gcm::RegistrationRequest::RESPONSE_PARSING_FAILED: |
| 102 return "RESPONSE_PARSING_FAILED"; | 106 return "RESPONSE_PARSING_FAILED"; |
| 103 case gcm::RegistrationRequest::REACHED_MAX_RETRIES: | 107 case gcm::RegistrationRequest::REACHED_MAX_RETRIES: |
| 104 return "REACHED_MAX_RETRIES"; | 108 return "REACHED_MAX_RETRIES"; |
| 105 default: | 109 case gcm::RegistrationRequest::STATUS_COUNT: |
| 106 NOTREACHED(); | 110 NOTREACHED(); |
| 107 return "UNKNOWN_STATUS"; | 111 break; |
| 108 } | 112 } |
| 113 return "UNKNOWN_STATUS"; |
| 109 } | 114 } |
| 110 | 115 |
| 111 // Helper for getting string representation of the RegistrationRequest::Status | 116 // Helper for getting string representation of the RegistrationRequest::Status |
| 112 // enum. | 117 // enum. |
| 113 std::string GetUnregistrationStatusString( | 118 std::string GetUnregistrationStatusString( |
| 114 gcm::UnregistrationRequest::Status status) { | 119 gcm::UnregistrationRequest::Status status) { |
| 115 switch (status) { | 120 switch (status) { |
| 116 case gcm::UnregistrationRequest::SUCCESS: | 121 case gcm::UnregistrationRequest::SUCCESS: |
| 117 return "SUCCESS"; | 122 return "SUCCESS"; |
| 118 case gcm::UnregistrationRequest::URL_FETCHING_FAILED: | 123 case gcm::UnregistrationRequest::URL_FETCHING_FAILED: |
| 119 return "URL_FETCHING_FAILED"; | 124 return "URL_FETCHING_FAILED"; |
| 120 case gcm::UnregistrationRequest::NO_RESPONSE_BODY: | 125 case gcm::UnregistrationRequest::NO_RESPONSE_BODY: |
| 121 return "NO_RESPONSE_BODY"; | 126 return "NO_RESPONSE_BODY"; |
| 122 case gcm::UnregistrationRequest::RESPONSE_PARSING_FAILED: | 127 case gcm::UnregistrationRequest::RESPONSE_PARSING_FAILED: |
| 123 return "RESPONSE_PARSING_FAILED"; | 128 return "RESPONSE_PARSING_FAILED"; |
| 124 case gcm::UnregistrationRequest::INCORRECT_APP_ID: | 129 case gcm::UnregistrationRequest::INCORRECT_APP_ID: |
| 125 return "INCORRECT_APP_ID"; | 130 return "INCORRECT_APP_ID"; |
| 126 case gcm::UnregistrationRequest::INVALID_PARAMETERS: | 131 case gcm::UnregistrationRequest::INVALID_PARAMETERS: |
| 127 return "INVALID_PARAMETERS"; | 132 return "INVALID_PARAMETERS"; |
| 128 case gcm::UnregistrationRequest::SERVICE_UNAVAILABLE: | 133 case gcm::UnregistrationRequest::SERVICE_UNAVAILABLE: |
| 129 return "SERVICE_UNAVAILABLE"; | 134 return "SERVICE_UNAVAILABLE"; |
| 130 case gcm::UnregistrationRequest::INTERNAL_SERVER_ERROR: | 135 case gcm::UnregistrationRequest::INTERNAL_SERVER_ERROR: |
| 131 return "INTERNAL_SERVER_ERROR"; | 136 return "INTERNAL_SERVER_ERROR"; |
| 132 case gcm::UnregistrationRequest::HTTP_NOT_OK: | 137 case gcm::UnregistrationRequest::HTTP_NOT_OK: |
| 133 return "HTTP_NOT_OK"; | 138 return "HTTP_NOT_OK"; |
| 134 case gcm::UnregistrationRequest::UNKNOWN_ERROR: | 139 case gcm::UnregistrationRequest::UNKNOWN_ERROR: |
| 135 return "UNKNOWN_ERROR"; | 140 return "UNKNOWN_ERROR"; |
| 136 case gcm::UnregistrationRequest::REACHED_MAX_RETRIES: | 141 case gcm::UnregistrationRequest::REACHED_MAX_RETRIES: |
| 137 return "REACHED_MAX_RETRIES"; | 142 return "REACHED_MAX_RETRIES"; |
| 138 default: | 143 case gcm::UnregistrationRequest::UNREGISTRATION_STATUS_COUNT: |
| 139 NOTREACHED(); | 144 NOTREACHED(); |
| 140 return "UNKNOWN_STATUS"; | 145 break; |
| 141 } | 146 } |
| 147 return "UNKNOWN_STATUS"; |
| 142 } | 148 } |
| 143 | 149 |
| 144 } // namespace | 150 } // namespace |
| 145 | 151 |
| 146 GCMStatsRecorderImpl::GCMStatsRecorderImpl() | 152 GCMStatsRecorderImpl::GCMStatsRecorderImpl() |
| 147 : is_recording_(false), | 153 : is_recording_(false), |
| 148 delegate_(NULL), | 154 delegate_(NULL), |
| 149 data_message_received_since_connected_(false), | 155 data_message_received_since_connected_(false), |
| 150 received_data_message_burst_size_(0) { | 156 received_data_message_burst_size_(0) { |
| 151 } | 157 } |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 | 443 |
| 438 if (!is_recording_) | 444 if (!is_recording_) |
| 439 return; | 445 return; |
| 440 if (!to_registered_app) { | 446 if (!to_registered_app) { |
| 441 RecordReceiving(app_id, | 447 RecordReceiving(app_id, |
| 442 from, | 448 from, |
| 443 message_byte_size, | 449 message_byte_size, |
| 444 "Data msg received", | 450 "Data msg received", |
| 445 "No such registered app found"); | 451 "No such registered app found"); |
| 446 } else { | 452 } else { |
| 447 switch(message_type) { | 453 switch (message_type) { |
| 448 case GCMStatsRecorderImpl::DATA_MESSAGE: | 454 case GCMStatsRecorderImpl::DATA_MESSAGE: |
| 449 RecordReceiving(app_id, from, message_byte_size, "Data msg received", | 455 RecordReceiving(app_id, from, message_byte_size, "Data msg received", |
| 450 std::string()); | 456 std::string()); |
| 451 break; | 457 break; |
| 452 case GCMStatsRecorderImpl::DELETED_MESSAGES: | 458 case GCMStatsRecorderImpl::DELETED_MESSAGES: |
| 453 RecordReceiving(app_id, from, message_byte_size, "Data msg received", | 459 RecordReceiving(app_id, from, message_byte_size, "Data msg received", |
| 454 "Message has been deleted on server"); | 460 "Message has been deleted on server"); |
| 455 break; | 461 break; |
| 456 default: | |
| 457 NOTREACHED(); | |
| 458 } | 462 } |
| 459 } | 463 } |
| 460 } | 464 } |
| 461 | 465 |
| 462 void GCMStatsRecorderImpl::CollectActivities( | 466 void GCMStatsRecorderImpl::CollectActivities( |
| 463 RecordedActivities* recorded_activities) const { | 467 RecordedActivities* recorded_activities) const { |
| 464 recorded_activities->checkin_activities.insert( | 468 recorded_activities->checkin_activities.insert( |
| 465 recorded_activities->checkin_activities.begin(), | 469 recorded_activities->checkin_activities.begin(), |
| 466 checkin_activities_.begin(), | 470 checkin_activities_.begin(), |
| 467 checkin_activities_.end()); | 471 checkin_activities_.end()); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 const std::string& receiver_id, | 543 const std::string& receiver_id, |
| 540 const std::string& message_id) { | 544 const std::string& message_id) { |
| 541 UMA_HISTOGRAM_COUNTS("GCM.IncomingSendErrors", 1); | 545 UMA_HISTOGRAM_COUNTS("GCM.IncomingSendErrors", 1); |
| 542 if (!is_recording_) | 546 if (!is_recording_) |
| 543 return; | 547 return; |
| 544 RecordSending(app_id, receiver_id, message_id, "Received 'send error' msg", | 548 RecordSending(app_id, receiver_id, message_id, "Received 'send error' msg", |
| 545 std::string()); | 549 std::string()); |
| 546 } | 550 } |
| 547 | 551 |
| 548 } // namespace gcm | 552 } // namespace gcm |
| OLD | NEW |