Chromium Code Reviews| Index: components/leveldb/env_mojo.cc |
| diff --git a/components/leveldb/env_mojo.cc b/components/leveldb/env_mojo.cc |
| index 54667a3d3314406299874fa60c7c45157416d22f..d86fd7db827e34ecbc7e122d3ed4cabf76d6131a 100644 |
| --- a/components/leveldb/env_mojo.cc |
| +++ b/components/leveldb/env_mojo.cc |
| @@ -84,10 +84,11 @@ class MojoSequentialFile : public leveldb::SequentialFile { |
| uma_logger_->RecordOSError(leveldb_env::kSequentialFileRead, error); |
| return MakeIOError(filename_, base::File::ErrorToString(error), |
| leveldb_env::kSequentialFileRead, error); |
| - } else { |
| - *result = Slice(scratch, bytes_read); |
| - return Status::OK(); |
| } |
| + if (bytes_read > 0) |
| + uma_logger_->RecordBytesRead(bytes_read); |
| + *result = Slice(scratch, bytes_read); |
| + return Status::OK(); |
| } |
| Status Skip(uint64_t n) override { |
| @@ -121,17 +122,17 @@ class MojoRandomAccessFile : public leveldb::RandomAccessFile { |
| size_t n, |
| Slice* result, |
| char* scratch) const override { |
| - Status s; |
| - int r = file_.Read(offset, scratch, static_cast<int>(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", |
| - leveldb_env::kRandomAccessFileRead); |
| + int bytes_read = file_.Read(offset, scratch, static_cast<int>(n)); |
| + *result = Slice(scratch, (bytes_read < 0) ? 0 : bytes_read); |
| + if (bytes_read < 0) { |
| uma_logger_->RecordOSError(leveldb_env::kRandomAccessFileRead, |
| LastFileError()); |
| + return MakeIOError(filename_, "Could not perform read", |
| + leveldb_env::kRandomAccessFileRead); |
| } |
| - return s; |
| + if (bytes_read > 0) |
| + uma_logger_->RecordBytesRead(bytes_read); |
| + return Status::OK(); |
| } |
| private: |
| @@ -169,15 +170,16 @@ class MojoWritableFile : public leveldb::WritableFile { |
| ~MojoWritableFile() override {} |
| leveldb::Status Append(const leveldb::Slice& data) override { |
| - size_t bytes_written = file_.WriteAtCurrentPos( |
| - data.data(), static_cast<int>(data.size())); |
| - if (bytes_written != data.size()) { |
| + int bytes_written = |
| + file_.WriteAtCurrentPos(data.data(), static_cast<int>(data.size())); |
| + if (bytes_written != static_cast<int>(data.size())) { |
| base::File::Error error = LastFileError(); |
| uma_logger_->RecordOSError(leveldb_env::kWritableFileAppend, error); |
| return MakeIOError(filename_, base::File::ErrorToString(error), |
| leveldb_env::kWritableFileAppend, error); |
| } |
| - |
| + if (bytes_written > 0) |
| + uma_logger_->RecordBytesWritten(bytes_written); |
| return Status::OK(); |
| } |
| @@ -188,8 +190,7 @@ class MojoWritableFile : public leveldb::WritableFile { |
| leveldb::Status Flush() override { |
| // base::File doesn't do buffered I/O (i.e. POSIX FILE streams) so nothing |
| - // to |
| - // flush. |
| + // to flush. |
| return Status::OK(); |
| } |
| @@ -455,6 +456,14 @@ void MojoEnv::RecordOSError(leveldb_env::MethodID method, |
| base::UmaHistogramExactLinear(uma_name, -error, -base::File::FILE_ERROR_MAX); |
| } |
| +void MojoEnv::RecordBytesRead(int amount) const { |
| + base::UmaHistogramCounts10M("Storage.BytesRead.MojoLevelDBEnv", amount); |
|
Marijn Kruisselbrink
2017/05/19 21:28:28
nit: since these histogram names are (currently) a
michaeln
2017/05/19 21:37:54
Done.
|
| +} |
| + |
| +void MojoEnv::RecordBytesWritten(int amount) const { |
| + base::UmaHistogramCounts10M("Storage.BytesWritten.MojoLevelDBEnv", amount); |
| +} |
| + |
| void MojoEnv::RecordFileError(leveldb_env::MethodID method, |
| FileError error) const { |
| RecordOSError(method, static_cast<base::File::Error>(error)); |