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

Side by Side Diff: content/browser/service_worker/service_worker_database.cc

Issue 303483007: ServiceWorker: Add UMA for ServiceWorkerDatabase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
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 "content/browser/service_worker/service_worker_database.h" 5 #include "content/browser/service_worker/service_worker_database.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/metrics/histogram.h"
12 #include "base/stl_util.h" 13 #include "base/stl_util.h"
13 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/string_split.h" 15 #include "base/strings/string_split.h"
15 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
17 #include "content/browser/service_worker/service_worker_database.pb.h" 18 #include "content/browser/service_worker/service_worker_database.pb.h"
18 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 19 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
19 #include "third_party/leveldatabase/src/include/leveldb/db.h" 20 #include "third_party/leveldatabase/src/include/leveldb/db.h"
20 #include "third_party/leveldatabase/src/include/leveldb/env.h" 21 #include "third_party/leveldatabase/src/include/leveldb/env.h"
21 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 22 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 70
70 const char kRegKeyPrefix[] = "REG:"; 71 const char kRegKeyPrefix[] = "REG:";
71 const char kResKeyPrefix[] = "RES:"; 72 const char kResKeyPrefix[] = "RES:";
72 const char kKeySeparator = '\x00'; 73 const char kKeySeparator = '\x00';
73 74
74 const char kUncommittedResIdKeyPrefix[] = "URES:"; 75 const char kUncommittedResIdKeyPrefix[] = "URES:";
75 const char kPurgeableResIdKeyPrefix[] = "PRES:"; 76 const char kPurgeableResIdKeyPrefix[] = "PRES:";
76 77
77 const int64 kCurrentSchemaVersion = 1; 78 const int64 kCurrentSchemaVersion = 1;
78 79
80 // For histogram.
81 const char kOpenHistogramLabel[] =
82 "ServiceWorker.Database.Open";
83 const char kOperationErrorHistogramLabel[] =
84 "ServiceWorker.Database.OperationError";
85
79 bool RemovePrefix(const std::string& str, 86 bool RemovePrefix(const std::string& str,
80 const std::string& prefix, 87 const std::string& prefix,
81 std::string* out) { 88 std::string* out) {
82 if (!StartsWithASCII(str, prefix, true)) 89 if (!StartsWithASCII(str, prefix, true))
83 return false; 90 return false;
84 if (out) 91 if (out)
85 *out = str.substr(prefix.size()); 92 *out = str.substr(prefix.size());
86 return true; 93 return true;
87 } 94 }
88 95
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 out->url = url; 218 out->url = url;
212 return true; 219 return true;
213 } 220 }
214 221
215 ServiceWorkerDatabase::Status LevelDBStatusToStatus( 222 ServiceWorkerDatabase::Status LevelDBStatusToStatus(
216 const leveldb::Status& status) { 223 const leveldb::Status& status) {
217 if (status.ok()) 224 if (status.ok())
218 return ServiceWorkerDatabase::STATUS_OK; 225 return ServiceWorkerDatabase::STATUS_OK;
219 else if (status.IsNotFound()) 226 else if (status.IsNotFound())
220 return ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; 227 return ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND;
228 else if (status.IsIOError())
229 return ServiceWorkerDatabase::STATUS_ERROR_IO_ERROR;
221 else if (status.IsCorruption()) 230 else if (status.IsCorruption())
222 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED; 231 return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED;
223 else 232 else
224 return ServiceWorkerDatabase::STATUS_ERROR_FAILED; 233 return ServiceWorkerDatabase::STATUS_ERROR_FAILED;
225 } 234 }
226 235
227 } // namespace 236 } // namespace
228 237
229 ServiceWorkerDatabase::RegistrationData::RegistrationData() 238 ServiceWorkerDatabase::RegistrationData::RegistrationData()
230 : registration_id(-1), 239 : registration_id(-1),
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 leveldb::Options options; 678 leveldb::Options options;
670 options.create_if_missing = create_if_missing; 679 options.create_if_missing = create_if_missing;
671 if (use_in_memory_db) { 680 if (use_in_memory_db) {
672 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 681 env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
673 options.env = env_.get(); 682 options.env = env_.get();
674 } 683 }
675 684
676 leveldb::DB* db = NULL; 685 leveldb::DB* db = NULL;
677 leveldb::Status db_status = 686 leveldb::Status db_status =
678 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db); 687 leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db);
688 Status status = LevelDBStatusToStatus(db_status);
689 UMA_HISTOGRAM_ENUMERATION(kOpenHistogramLabel, status, STATUS_ERROR_MAX);
679 if (!db_status.ok()) { 690 if (!db_status.ok()) {
680 DCHECK(!db); 691 DCHECK(!db);
681 // TODO(nhiroki): Should we retry to open the database? 692 // TODO(nhiroki): Should we retry to open the database?
682 HandleError(FROM_HERE, db_status); 693 HandleError(FROM_HERE, db_status);
683 return LevelDBStatusToStatus(db_status); 694 return status;
684 } 695 }
685 db_.reset(db); 696 db_.reset(db);
686 697
687 int64 db_version; 698 int64 db_version;
688 Status status = ReadDatabaseVersion(&db_version); 699 status = ReadDatabaseVersion(&db_version);
689 if (status != STATUS_OK) 700 if (status != STATUS_OK)
690 return status; 701 return status;
691 DCHECK_LE(0, db_version); 702 DCHECK_LE(0, db_version);
692 if (db_version > 0) 703 if (db_version > 0)
693 state_ = INITIALIZED; 704 state_ = INITIALIZED;
694 return STATUS_OK; 705 return STATUS_OK;
695 } 706 }
696 707
697 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase( 708 bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase(
698 ServiceWorkerDatabase::Status status) { 709 ServiceWorkerDatabase::Status status) {
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 } 998 }
988 } 999 }
989 1000
990 bool ServiceWorkerDatabase::IsOpen() { 1001 bool ServiceWorkerDatabase::IsOpen() {
991 return db_ != NULL; 1002 return db_ != NULL;
992 } 1003 }
993 1004
994 void ServiceWorkerDatabase::HandleError( 1005 void ServiceWorkerDatabase::HandleError(
995 const tracked_objects::Location& from_here, 1006 const tracked_objects::Location& from_here,
996 const leveldb::Status& status) { 1007 const leveldb::Status& status) {
997 // TODO(nhiroki): Add an UMA histogram. 1008 DCHECK(!status.ok());
998 DLOG(ERROR) << "Failed at: " << from_here.ToString() 1009 DLOG(ERROR) << "Failed at: " << from_here.ToString()
999 << " with error: " << status.ToString(); 1010 << " with error: " << status.ToString();
1011 UMA_HISTOGRAM_ENUMERATION(kOperationErrorHistogramLabel,
michaeln 2014/05/29 23:46:28 I'm not sure how fine grained we want this to be?
nhiroki 2014/06/02 04:54:47 SGTM. The latest patchset records read/write resul
1012 LevelDBStatusToStatus(status),
1013 STATUS_ERROR_MAX);
1000 state_ = DISABLED; 1014 state_ = DISABLED;
1001 db_.reset(); 1015 db_.reset();
1002 } 1016 }
1003 1017
1004 } // namespace content 1018 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698