| Index: third_party/leveldatabase/env_chromium.cc
|
| diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc
|
| index b4daa541479b695c7b525c20973bc233a9d4da2c..f7689a230ba6795d41b65ea97b171f8befb5a490 100644
|
| --- a/third_party/leveldatabase/env_chromium.cc
|
| +++ b/third_party/leveldatabase/env_chromium.cc
|
| @@ -102,6 +102,29 @@ static base::File::Error GetDirectoryEntries(const FilePath& dir_param,
|
| #endif
|
| }
|
|
|
| +// To avoid a dependency on storage_histograms.h and the storageLib,
|
| +// we re-implement the BytesCountHistogram functions here.
|
| +base::HistogramBase* GetBytesCountHistogram(const std::string& name) {
|
| + const int kMin = 1;
|
| + const int kMax = 10000000;
|
| + const int kNumBuckets = 50;
|
| + return base::Histogram::FactoryGet(
|
| + name, kMin, kMax, kNumBuckets,
|
| + base::Histogram::kUmaTargetedHistogramFlag);
|
| +}
|
| +
|
| +void RecordStorageBytesWritten(const char* label, int amount) {
|
| + std::string name("Storage.BytesWritten.");
|
| + name.append(label);
|
| + GetBytesCountHistogram(name)->Add(amount);
|
| +}
|
| +
|
| +void RecordStorageBytesRead(const char* label, int amount) {
|
| + std::string name("Storage.BytesRead.");
|
| + name.append(label);
|
| + GetBytesCountHistogram(name)->Add(amount);
|
| +}
|
| +
|
| class ChromiumFileLock : public FileLock {
|
| public:
|
| ChromiumFileLock(base::File file, const std::string& name)
|
| @@ -177,6 +200,8 @@ class ChromiumSequentialFile : public leveldb::SequentialFile {
|
| return MakeIOError(filename_, base::File::ErrorToString(error),
|
| kSequentialFileRead, error);
|
| } else {
|
| + if (bytes_read > 0)
|
| + uma_logger_->RecordBytesRead(bytes_read);
|
| *result = Slice(scratch, bytes_read);
|
| return Status::OK();
|
| }
|
| @@ -215,16 +240,16 @@ class ChromiumRandomAccessFile : public leveldb::RandomAccessFile {
|
| char* scratch) const override {
|
| TRACE_EVENT2("leveldb", "ChromiumRandomAccessFile::Read", "offset", offset,
|
| "size", n);
|
| - Status s;
|
| - int r = file_.Read(offset, scratch, n);
|
| - *result = Slice(scratch, (r < 0) ? 0 : r);
|
| - if (r < 0) {
|
| - // An error: return a non-ok status
|
| - s = MakeIOError(filename_, "Could not perform read",
|
| - kRandomAccessFileRead);
|
| + int bytes_read = file_.Read(offset, scratch, n);
|
| + *result = Slice(scratch, (bytes_read < 0) ? 0 : bytes_read);
|
| + if (bytes_read < 0) {
|
| uma_logger_->RecordErrorAt(kRandomAccessFileRead);
|
| + return MakeIOError(filename_, "Could not perform read",
|
| + kRandomAccessFileRead);
|
| }
|
| - return s;
|
| + if (bytes_read > 0)
|
| + uma_logger_->RecordBytesRead(bytes_read);
|
| + return Status::OK();
|
| }
|
|
|
| private:
|
| @@ -303,7 +328,8 @@ Status ChromiumWritableFile::Append(const Slice& data) {
|
| return MakeIOError(filename_, base::File::ErrorToString(error),
|
| kWritableFileAppend, error);
|
| }
|
| -
|
| + if (bytes_written > 0)
|
| + uma_logger_->RecordBytesWritten(bytes_written);
|
| return Status::OK();
|
| }
|
|
|
| @@ -912,10 +938,6 @@ void ChromiumEnv::RecordErrorAt(MethodID method) const {
|
| GetMethodIOErrorHistogram()->Add(method);
|
| }
|
|
|
| -void ChromiumEnv::RecordLockFileAncestors(int num_missing_ancestors) const {
|
| - GetLockFileAncestorHistogram()->Add(num_missing_ancestors);
|
| -}
|
| -
|
| void ChromiumEnv::RecordOSError(MethodID method,
|
| base::File::Error error) const {
|
| DCHECK_LT(error, 0);
|
| @@ -923,6 +945,18 @@ void ChromiumEnv::RecordOSError(MethodID method,
|
| GetOSErrorHistogram(method, -base::File::FILE_ERROR_MAX)->Add(-error);
|
| }
|
|
|
| +void ChromiumEnv::RecordBytesRead(int amount) const {
|
| + RecordStorageBytesRead(name_.c_str(), amount);
|
| +}
|
| +
|
| +void ChromiumEnv::RecordBytesWritten(int amount) const {
|
| + RecordStorageBytesWritten(name_.c_str(), amount);
|
| +}
|
| +
|
| +void ChromiumEnv::RecordLockFileAncestors(int num_missing_ancestors) const {
|
| + GetLockFileAncestorHistogram()->Add(num_missing_ancestors);
|
| +}
|
| +
|
| base::HistogramBase* ChromiumEnv::GetOSErrorHistogram(MethodID method,
|
| int limit) const {
|
| std::string uma_name;
|
|
|