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

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

Issue 123453004: [GCM] Add connection/persistent store metric collection (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Self review Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « google_apis/gcm/engine/mcs_client.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/rmq_store.h" 5 #include "google_apis/gcm/engine/rmq_store.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/file_util.h"
10 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/message_loop/message_loop_proxy.h" 13 #include "base/message_loop/message_loop_proxy.h"
14 #include "base/metrics/histogram.h"
13 #include "base/sequenced_task_runner.h" 15 #include "base/sequenced_task_runner.h"
14 #include "base/stl_util.h" 16 #include "base/stl_util.h"
15 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/string_piece.h" 18 #include "base/strings/string_piece.h"
17 #include "base/tracked_objects.h" 19 #include "base/tracked_objects.h"
18 #include "components/webdata/encryptor/encryptor.h" 20 #include "components/webdata/encryptor/encryptor.h"
19 #include "google_apis/gcm/base/mcs_message.h" 21 #include "google_apis/gcm/base/mcs_message.h"
20 #include "google_apis/gcm/base/mcs_util.h" 22 #include "google_apis/gcm/base/mcs_util.h"
21 #include "google_apis/gcm/protocol/mcs.pb.h" 23 #include "google_apis/gcm/protocol/mcs.pb.h"
22 #include "third_party/leveldatabase/src/include/leveldb/db.h" 24 #include "third_party/leveldatabase/src/include/leveldb/db.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 139
138 void RMQStore::Backend::Load(const LoadCallback& callback) { 140 void RMQStore::Backend::Load(const LoadCallback& callback) {
139 LoadResult result; 141 LoadResult result;
140 142
141 leveldb::Options options; 143 leveldb::Options options;
142 options.create_if_missing = true; 144 options.create_if_missing = true;
143 leveldb::DB* db; 145 leveldb::DB* db;
144 leveldb::Status status = leveldb::DB::Open(options, 146 leveldb::Status status = leveldb::DB::Open(options,
145 path_.AsUTF8Unsafe(), 147 path_.AsUTF8Unsafe(),
146 &db); 148 &db);
149 UMA_HISTOGRAM_BOOLEAN("GCM.LoadSucceeded", status.ok());
147 if (!status.ok()) { 150 if (!status.ok()) {
148 LOG(ERROR) << "Failed to open database " << path_.value() 151 LOG(ERROR) << "Failed to open database " << path_.value()
149 << ": " << status.ToString(); 152 << ": " << status.ToString();
150 foreground_task_runner_->PostTask(FROM_HERE, 153 foreground_task_runner_->PostTask(FROM_HERE,
151 base::Bind(callback, result)); 154 base::Bind(callback, result));
152 return; 155 return;
153 } 156 }
154 db_.reset(db); 157 db_.reset(db);
155 158
156 if (!LoadDeviceCredentials(&result.device_android_id, 159 if (!LoadDeviceCredentials(&result.device_android_id,
157 &result.device_security_token) || 160 &result.device_security_token) ||
158 !LoadIncomingMessages(&result.incoming_messages) || 161 !LoadIncomingMessages(&result.incoming_messages) ||
159 !LoadOutgoingMessages(&result.outgoing_messages) || 162 !LoadOutgoingMessages(&result.outgoing_messages) ||
160 !LoadNextSerialNumber(&result.next_serial_number) || 163 !LoadNextSerialNumber(&result.next_serial_number) ||
161 !LoadUserSerialNumberMap(&result.user_serial_numbers)) { 164 !LoadUserSerialNumberMap(&result.user_serial_numbers)) {
162 result.device_android_id = 0; 165 result.device_android_id = 0;
163 result.device_security_token = 0; 166 result.device_security_token = 0;
164 result.incoming_messages.clear(); 167 result.incoming_messages.clear();
165 STLDeleteContainerPairSecondPointers(result.outgoing_messages.begin(), 168 STLDeleteContainerPairSecondPointers(result.outgoing_messages.begin(),
166 result.outgoing_messages.end()); 169 result.outgoing_messages.end());
167 result.outgoing_messages.clear(); 170 result.outgoing_messages.clear();
168 foreground_task_runner_->PostTask(FROM_HERE, 171 foreground_task_runner_->PostTask(FROM_HERE,
169 base::Bind(callback, result)); 172 base::Bind(callback, result));
170 return; 173 return;
171 } 174 }
172 175
176 // Only record histograms if GCM had already been set up for this device.
177 if (result.device_android_id != 0 && result.device_security_token != 0) {
178 int64 file_size = 0;
179 if (base::GetFileSize(path_, &file_size)) {
180 UMA_HISTOGRAM_COUNTS("GCM.StoreSizeKB",
181 static_cast<int>(file_size / 1024));
fgorski 2014/01/02 23:45:40 That does not make a distinction between a 0 size
Nicolas Zea 2014/01/02 23:48:21 A 0 store should not happen if the store has been
182 }
183 UMA_HISTOGRAM_COUNTS("GCM.RestoredOutgoingMessages",
184 result.outgoing_messages.size());
185 UMA_HISTOGRAM_COUNTS("GCM.RestoredIncomingMessages",
186 result.incoming_messages.size());
187 UMA_HISTOGRAM_COUNTS("GCM.NumUsers", result.user_serial_numbers.size());
188 }
189
173 DVLOG(1) << "Succeeded in loading " << result.incoming_messages.size() 190 DVLOG(1) << "Succeeded in loading " << result.incoming_messages.size()
174 << " unacknowledged incoming messages and " 191 << " unacknowledged incoming messages and "
175 << result.outgoing_messages.size() 192 << result.outgoing_messages.size()
176 << " unacknowledged outgoing messages."; 193 << " unacknowledged outgoing messages.";
177 result.success = true; 194 result.success = true;
178 foreground_task_runner_->PostTask(FROM_HERE, 195 foreground_task_runner_->PostTask(FROM_HERE,
179 base::Bind(callback, result)); 196 base::Bind(callback, result));
180 return; 197 return;
181 } 198 }
182 199
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 const UpdateCallback& callback) { 666 const UpdateCallback& callback) {
650 blocking_task_runner_->PostTask( 667 blocking_task_runner_->PostTask(
651 FROM_HERE, 668 FROM_HERE,
652 base::Bind(&RMQStore::Backend::RemoveUserSerialNumber, 669 base::Bind(&RMQStore::Backend::RemoveUserSerialNumber,
653 backend_, 670 backend_,
654 username, 671 username,
655 callback)); 672 callback));
656 } 673 }
657 674
658 } // namespace gcm 675 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/mcs_client.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698