| Index: components/leveldb/env_mojo.cc
|
| diff --git a/components/leveldb/env_mojo.cc b/components/leveldb/env_mojo.cc
|
| index 54667a3d3314406299874fa60c7c45157416d22f..9b98405d125677fe7bdf5e0ed88b747aafc41185 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 {
|
| + UMA_HISTOGRAM_COUNTS_10M("Storage.BytesRead.MojoLevelDBEnv", amount);
|
| +}
|
| +
|
| +void MojoEnv::RecordBytesWritten(int amount) const {
|
| + UMA_HISTOGRAM_COUNTS_10M("Storage.BytesWritten.MojoLevelDBEnv", amount);
|
| +}
|
| +
|
| void MojoEnv::RecordFileError(leveldb_env::MethodID method,
|
| FileError error) const {
|
| RecordOSError(method, static_cast<base::File::Error>(error));
|
|
|