diff options
author | tzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-27 07:18:53 +0000 |
---|---|---|
committer | tzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-27 07:18:53 +0000 |
commit | 642aadba5d1f18b55d75dd20cc8b6df0fd211a2d (patch) | |
tree | a2a134b1ac8768c9b645dc8a775b10b3f284eb59 | |
parent | 7d102bfdbbe16d7c1b9381731b5158ff9e2dad5d (diff) | |
download | chromium_src-642aadba5d1f18b55d75dd20cc8b6df0fd211a2d.zip chromium_src-642aadba5d1f18b55d75dd20cc8b6df0fd211a2d.tar.gz chromium_src-642aadba5d1f18b55d75dd20cc8b6df0fd211a2d.tar.bz2 |
Add UMA stats on FileSystem{Origin,Directory}Database::Init()
BUG=116615
TEST='existing tests'
Review URL: https://chromiumcodereview.appspot.com/9855011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129156 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/fileapi/file_system_directory_database.cc | 32 | ||||
-rw-r--r-- | webkit/fileapi/file_system_directory_database.h | 10 | ||||
-rw-r--r-- | webkit/fileapi/file_system_origin_database.cc | 34 | ||||
-rw-r--r-- | webkit/fileapi/file_system_origin_database.h | 13 |
4 files changed, 78 insertions, 11 deletions
diff --git a/webkit/fileapi/file_system_directory_database.cc b/webkit/fileapi/file_system_directory_database.cc index 217b98f..db95d63 100644 --- a/webkit/fileapi/file_system_directory_database.cc +++ b/webkit/fileapi/file_system_directory_database.cc @@ -7,11 +7,12 @@ #include <math.h> #include "base/location.h" +#include "base/metrics/histogram.h" #include "base/pickle.h" #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/sys_string_conversions.h" -#include "third_party/leveldatabase/src/include/leveldb/iterator.h" +#include "third_party/leveldatabase/src/include/leveldb/db.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" #include "webkit/fileapi/file_system_util.h" @@ -74,6 +75,14 @@ const char kChildLookupPrefix[] = "CHILD_OF:"; const char kChildLookupSeparator[] = ":"; const char kLastFileIdKey[] = "LAST_FILE_ID"; const char kLastIntegerKey[] = "LAST_INTEGER"; +const int64 kMinimumReportIntervalHours = 1; +const char kInitStatusHistogramLabel[] = "FileSystem.DirectoryDatabaseInit"; + +enum InitStatus { + INIT_STATUS_OK = 0, + INIT_STATUS_CORRUPTION, + INIT_STATUS_MAX +}; std::string GetChildLookupKey( fileapi::FileSystemDirectoryDatabase::FileId parent_id, @@ -421,6 +430,7 @@ bool FileSystemDirectoryDatabase::Init() { options.create_if_missing = true; leveldb::DB* db; leveldb::Status status = leveldb::DB::Open(options, path_, &db); + ReportInitStatus(status); if (status.ok()) { db_.reset(db); return true; @@ -429,6 +439,24 @@ bool FileSystemDirectoryDatabase::Init() { return false; } +void FileSystemDirectoryDatabase::ReportInitStatus( + const leveldb::Status& status) { + base::Time now = base::Time::Now(); + const base::TimeDelta minimum_interval = + base::TimeDelta::FromHours(kMinimumReportIntervalHours); + if (last_reported_time_ + minimum_interval >= now) + return; + last_reported_time_ = now; + + if (status.ok()) { + UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, + INIT_STATUS_OK, INIT_STATUS_MAX); + } else { + UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, + INIT_STATUS_CORRUPTION, INIT_STATUS_MAX); + } +} + bool FileSystemDirectoryDatabase::StoreDefaultValues() { // Verify that this is a totally new database, and initialize it. scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(leveldb::ReadOptions())); @@ -539,7 +567,7 @@ bool FileSystemDirectoryDatabase::RemoveFileInfoHelper( void FileSystemDirectoryDatabase::HandleError( const tracked_objects::Location& from_here, - leveldb::Status status) { + const leveldb::Status& status) { LOG(ERROR) << "FileSystemDirectoryDatabase failed at: " << from_here.ToString() << " with error: " << status.ToString(); db_.reset(); diff --git a/webkit/fileapi/file_system_directory_database.h b/webkit/fileapi/file_system_directory_database.h index 1c760b8..dae587a 100644 --- a/webkit/fileapi/file_system_directory_database.h +++ b/webkit/fileapi/file_system_directory_database.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,13 +11,14 @@ #include "base/file_path.h" #include "base/memory/scoped_ptr.h" #include "base/time.h" -#include "third_party/leveldatabase/src/include/leveldb/db.h" namespace tracked_objects { class Location; } namespace leveldb { +class DB; +class Status; class WriteBatch; } @@ -88,6 +89,7 @@ class FileSystemDirectoryDatabase { private: bool Init(); + void ReportInitStatus(const leveldb::Status& status); bool StoreDefaultValues(); bool GetLastFileId(FileId* file_id); bool VerifyIsDirectory(FileId file_id); @@ -95,10 +97,12 @@ class FileSystemDirectoryDatabase { const FileInfo& info, FileId file_id, leveldb::WriteBatch* batch); bool RemoveFileInfoHelper(FileId file_id, leveldb::WriteBatch* batch); void HandleError(const tracked_objects::Location& from_here, - leveldb::Status status); + const leveldb::Status& status); std::string path_; scoped_ptr<leveldb::DB> db_; + base::Time last_reported_time_; + DISALLOW_COPY_AND_ASSIGN(FileSystemDirectoryDatabase); }; } // namespace fileapi diff --git a/webkit/fileapi/file_system_origin_database.cc b/webkit/fileapi/file_system_origin_database.cc index 125576a..42cf8f6 100644 --- a/webkit/fileapi/file_system_origin_database.cc +++ b/webkit/fileapi/file_system_origin_database.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,17 +7,26 @@ #include "base/format_macros.h" #include "base/location.h" #include "base/logging.h" +#include "base/metrics/histogram.h" #include "base/string_number_conversions.h" #include "base/stringprintf.h" #include "base/string_util.h" #include "base/sys_string_conversions.h" -#include "third_party/leveldatabase/src/include/leveldb/iterator.h" +#include "third_party/leveldatabase/src/include/leveldb/db.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" namespace { const char kOriginKeyPrefix[] = "ORIGIN:"; const char kLastPathKey[] = "LAST_PATH"; +const int64 kMinimumReportIntervalHours = 1; +const char kInitStatusHistogramLabel[] = "FileSystem.OriginDatabaseInit"; + +enum InitStatus { + INIT_STATUS_OK = 0, + INIT_STATUS_CORRUPTION, + INIT_STATUS_MAX +}; std::string OriginToOriginKey(const std::string& origin) { std::string key(kOriginKeyPrefix); @@ -62,6 +71,7 @@ bool FileSystemOriginDatabase::Init() { options.create_if_missing = true; leveldb::DB* db; leveldb::Status status = leveldb::DB::Open(options, path_, &db); + ReportInitStatus(status); if (status.ok()) { db_.reset(db); return true; @@ -71,12 +81,30 @@ bool FileSystemOriginDatabase::Init() { } void FileSystemOriginDatabase::HandleError( - const tracked_objects::Location& from_here, leveldb::Status status) { + const tracked_objects::Location& from_here, + const leveldb::Status& status) { db_.reset(); LOG(ERROR) << "FileSystemOriginDatabase failed at: " << from_here.ToString() << " with error: " << status.ToString(); } +void FileSystemOriginDatabase::ReportInitStatus(const leveldb::Status& status) { + base::Time now = base::Time::Now(); + base::TimeDelta minimum_interval = + base::TimeDelta::FromHours(kMinimumReportIntervalHours); + if (last_reported_time_ + minimum_interval >= now) + return; + last_reported_time_ = now; + + if (status.ok()) { + UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, + INIT_STATUS_OK, INIT_STATUS_MAX); + } else { + UMA_HISTOGRAM_ENUMERATION(kInitStatusHistogramLabel, + INIT_STATUS_CORRUPTION, INIT_STATUS_MAX); + } +} + bool FileSystemOriginDatabase::HasOriginPath(const std::string& origin) { if (!Init()) return false; diff --git a/webkit/fileapi/file_system_origin_database.h b/webkit/fileapi/file_system_origin_database.h index ac729df..10247a7 100644 --- a/webkit/fileapi/file_system_origin_database.h +++ b/webkit/fileapi/file_system_origin_database.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,7 +11,12 @@ #include "base/file_path.h" #include "base/memory/scoped_ptr.h" -#include "third_party/leveldatabase/src/include/leveldb/db.h" +#include "base/time.h" + +namespace leveldb { +class DB; +class Status; +} namespace tracked_objects { class Location; @@ -54,11 +59,13 @@ class FileSystemOriginDatabase { private: bool Init(); void HandleError(const tracked_objects::Location& from_here, - leveldb::Status status); + const leveldb::Status& status); + void ReportInitStatus(const leveldb::Status& status); bool GetLastPathNumber(int* number); std::string path_; scoped_ptr<leveldb::DB> db_; + base::Time last_reported_time_; DISALLOW_COPY_AND_ASSIGN(FileSystemOriginDatabase); }; |