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

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

Issue 123453004: [GCM] Add connection/persistent store metric collection (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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/connection_factory_impl.cc ('k') | google_apis/gcm/engine/mcs_client.cc » ('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 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 "google_apis/gcm/engine/gcm_store_impl.h" 5 #include "google_apis/gcm/engine/gcm_store_impl.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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 GCMStoreImpl::Backend::~Backend() {} 136 GCMStoreImpl::Backend::~Backend() {}
135 137
136 void GCMStoreImpl::Backend::Load(const LoadCallback& callback) { 138 void GCMStoreImpl::Backend::Load(const LoadCallback& callback) {
137 LoadResult result; 139 LoadResult result;
138 140
139 leveldb::Options options; 141 leveldb::Options options;
140 options.create_if_missing = true; 142 options.create_if_missing = true;
141 leveldb::DB* db; 143 leveldb::DB* db;
142 leveldb::Status status = 144 leveldb::Status status =
143 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db); 145 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db);
146 UMA_HISTOGRAM_BOOLEAN("GCM.LoadSucceeded", status.ok());
144 if (!status.ok()) { 147 if (!status.ok()) {
145 LOG(ERROR) << "Failed to open database " << path_.value() << ": " 148 LOG(ERROR) << "Failed to open database " << path_.value() << ": "
146 << status.ToString(); 149 << status.ToString();
147 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result)); 150 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
148 return; 151 return;
149 } 152 }
150 db_.reset(db); 153 db_.reset(db);
151 154
152 if (!LoadDeviceCredentials(&result.device_android_id, 155 if (!LoadDeviceCredentials(&result.device_android_id,
153 &result.device_security_token) || 156 &result.device_security_token) ||
154 !LoadIncomingMessages(&result.incoming_messages) || 157 !LoadIncomingMessages(&result.incoming_messages) ||
155 !LoadOutgoingMessages(&result.outgoing_messages) || 158 !LoadOutgoingMessages(&result.outgoing_messages) ||
156 !LoadNextSerialNumber(&result.next_serial_number) || 159 !LoadNextSerialNumber(&result.next_serial_number) ||
157 !LoadUserSerialNumberMap(&result.user_serial_numbers)) { 160 !LoadUserSerialNumberMap(&result.user_serial_numbers)) {
158 result.device_android_id = 0; 161 result.device_android_id = 0;
159 result.device_security_token = 0; 162 result.device_security_token = 0;
160 result.incoming_messages.clear(); 163 result.incoming_messages.clear();
161 STLDeleteContainerPairSecondPointers(result.outgoing_messages.begin(), 164 STLDeleteContainerPairSecondPointers(result.outgoing_messages.begin(),
162 result.outgoing_messages.end()); 165 result.outgoing_messages.end());
163 result.outgoing_messages.clear(); 166 result.outgoing_messages.clear();
164 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result)); 167 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
165 return; 168 return;
166 } 169 }
167 170
171 // Only record histograms if GCM had already been set up for this device.
172 if (result.device_android_id != 0 && result.device_security_token != 0) {
173 int64 file_size = 0;
174 if (base::GetFileSize(path_, &file_size)) {
175 UMA_HISTOGRAM_COUNTS("GCM.StoreSizeKB",
176 static_cast<int>(file_size / 1024));
177 }
178 UMA_HISTOGRAM_COUNTS("GCM.RestoredOutgoingMessages",
179 result.outgoing_messages.size());
180 UMA_HISTOGRAM_COUNTS("GCM.RestoredIncomingMessages",
181 result.incoming_messages.size());
182 UMA_HISTOGRAM_COUNTS("GCM.NumUsers", result.user_serial_numbers.size());
183 }
184
185
168 DVLOG(1) << "Succeeded in loading " << result.incoming_messages.size() 186 DVLOG(1) << "Succeeded in loading " << result.incoming_messages.size()
169 << " unacknowledged incoming messages and " 187 << " unacknowledged incoming messages and "
170 << result.outgoing_messages.size() 188 << result.outgoing_messages.size()
171 << " unacknowledged outgoing messages."; 189 << " unacknowledged outgoing messages.";
172 result.success = true; 190 result.success = true;
173 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result)); 191 foreground_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
174 return; 192 return;
175 } 193 }
176 194
177 void GCMStoreImpl::Backend::Destroy(const UpdateCallback& callback) { 195 void GCMStoreImpl::Backend::Destroy(const UpdateCallback& callback) {
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 const UpdateCallback& callback) { 629 const UpdateCallback& callback) {
612 blocking_task_runner_->PostTask( 630 blocking_task_runner_->PostTask(
613 FROM_HERE, 631 FROM_HERE,
614 base::Bind(&GCMStoreImpl::Backend::RemoveUserSerialNumber, 632 base::Bind(&GCMStoreImpl::Backend::RemoveUserSerialNumber,
615 backend_, 633 backend_,
616 username, 634 username,
617 callback)); 635 callback));
618 } 636 }
619 637
620 } // namespace gcm 638 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/connection_factory_impl.cc ('k') | google_apis/gcm/engine/mcs_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698