summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-27 07:18:53 +0000
committertzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-27 07:18:53 +0000
commit642aadba5d1f18b55d75dd20cc8b6df0fd211a2d (patch)
treea2a134b1ac8768c9b645dc8a775b10b3f284eb59
parent7d102bfdbbe16d7c1b9381731b5158ff9e2dad5d (diff)
downloadchromium_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.cc32
-rw-r--r--webkit/fileapi/file_system_directory_database.h10
-rw-r--r--webkit/fileapi/file_system_origin_database.cc34
-rw-r--r--webkit/fileapi/file_system_origin_database.h13
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);
};