diff options
| author | 2020-11-11 00:07:55 +0000 | |
|---|---|---|
| committer | 2020-11-11 00:07:55 +0000 | |
| commit | ac55edad1c8587c2557848e7a2997b7af1cab9f7 (patch) | |
| tree | e68d08fa1599c05fe5d685b8b9508f89e31b0b3c | |
| parent | 2503bdd788ebde07629161073667497de3408c50 (diff) | |
| parent | 6944f1e484a86338994a01842e78410866f43211 (diff) | |
Merge "[incremental] add last pending reads info in dumpsys"
| -rw-r--r-- | services/incremental/IncrementalService.cpp | 30 | ||||
| -rw-r--r-- | services/incremental/IncrementalService.h | 1 | ||||
| -rw-r--r-- | services/incremental/ServiceWrappers.cpp | 1 | ||||
| -rw-r--r-- | services/incremental/ServiceWrappers.h | 1 | ||||
| -rw-r--r-- | services/incremental/test/IncrementalServiceTest.cpp | 1 |
5 files changed, 29 insertions, 5 deletions
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp index 599ac9344e73..91478a594ad2 100644 --- a/services/incremental/IncrementalService.cpp +++ b/services/incremental/IncrementalService.cpp @@ -2341,17 +2341,16 @@ BootClockTsUs IncrementalService::DataLoaderStub::getOldestPendingReadTs() { return result; } - std::vector<incfs::ReadInfo> pendingReads; - if (mService.mIncFs->waitForPendingReads(control, 0ms, &pendingReads) != + if (mService.mIncFs->waitForPendingReads(control, 0ms, &mLastPendingReads) != android::incfs::WaitResult::HaveData || - pendingReads.empty()) { + mLastPendingReads.empty()) { return result; } LOG(DEBUG) << id() << ": pendingReads: " << control.pendingReads() << ", " - << pendingReads.size() << ": " << pendingReads.front().bootClockTsUs; + << mLastPendingReads.size() << ": " << mLastPendingReads.front().bootClockTsUs; - for (auto&& pendingRead : pendingReads) { + for (auto&& pendingRead : mLastPendingReads) { result = std::min(result, pendingRead.bootClockTsUs); } return result; @@ -2400,6 +2399,18 @@ void IncrementalService::DataLoaderStub::setHealthListener( } } +static std::string toHexString(const RawMetadata& metadata) { + int n = metadata.size(); + std::string res(n * 2, '\0'); + // Same as incfs::toString(fileId) + static constexpr char kHexChar[] = "0123456789abcdef"; + for (int i = 0; i < n; ++i) { + res[i * 2] = kHexChar[(metadata[i] & 0xf0) >> 4]; + res[i * 2 + 1] = kHexChar[(metadata[i] & 0x0f)]; + } + return res; +} + void IncrementalService::DataLoaderStub::onDump(int fd) { dprintf(fd, " dataLoader: {\n"); dprintf(fd, " currentStatus: %d\n", mCurrentStatus); @@ -2415,6 +2426,15 @@ void IncrementalService::DataLoaderStub::onDump(int fd) { dprintf(fd, " unhealthyTimeoutMs: %d\n", int(mHealthCheckParams.unhealthyTimeoutMs)); dprintf(fd, " unhealthyMonitoringMs: %d\n", int(mHealthCheckParams.unhealthyMonitoringMs)); + dprintf(fd, " lastPendingReads: \n"); + const auto control = mService.mIncFs->openMount(mHealthPath); + for (auto&& pendingRead : mLastPendingReads) { + dprintf(fd, " fileId: %s\n", mService.mIncFs->toString(pendingRead.id).c_str()); + const auto metadata = mService.mIncFs->getMetadata(control, pendingRead.id); + dprintf(fd, " metadataHex: %s\n", toHexString(metadata).c_str()); + dprintf(fd, " blockIndex: %d\n", pendingRead.block); + dprintf(fd, " bootClockTsUs: %lld\n", (long long)pendingRead.bootClockTsUs); + } dprintf(fd, " }\n"); const auto& params = mParams; dprintf(fd, " dataLoaderParams: {\n"); diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h index 4c4b8bd1ba50..eb69470c97a7 100644 --- a/services/incremental/IncrementalService.h +++ b/services/incremental/IncrementalService.h @@ -257,6 +257,7 @@ private: } mHealthBase = {TimePoint::max(), kMaxBootClockTsUs}; StorageHealthCheckParams mHealthCheckParams; int mStreamStatus = content::pm::IDataLoaderStatusListener::STREAM_HEALTHY; + std::vector<incfs::ReadInfo> mLastPendingReads; }; using DataLoaderStubPtr = sp<DataLoaderStub>; diff --git a/services/incremental/ServiceWrappers.cpp b/services/incremental/ServiceWrappers.cpp index 144c466cf9e9..dfe9684779fe 100644 --- a/services/incremental/ServiceWrappers.cpp +++ b/services/incremental/ServiceWrappers.cpp @@ -166,6 +166,7 @@ public: FileId getFileId(const Control& control, std::string_view path) const final { return incfs::getFileId(control, path); } + std::string toString(FileId fileId) const final { return incfs::toString(fileId); } std::pair<IncFsBlockIndex, IncFsBlockIndex> countFilledBlocks( const Control& control, std::string_view path) const final { const auto fileId = incfs::getFileId(control, path); diff --git a/services/incremental/ServiceWrappers.h b/services/incremental/ServiceWrappers.h index 4815cafc0995..f2d00735bc44 100644 --- a/services/incremental/ServiceWrappers.h +++ b/services/incremental/ServiceWrappers.h @@ -92,6 +92,7 @@ public: virtual incfs::RawMetadata getMetadata(const Control& control, FileId fileid) const = 0; virtual incfs::RawMetadata getMetadata(const Control& control, std::string_view path) const = 0; virtual FileId getFileId(const Control& control, std::string_view path) const = 0; + virtual std::string toString(FileId fileId) const = 0; virtual std::pair<IncFsBlockIndex, IncFsBlockIndex> countFilledBlocks( const Control& control, std::string_view path) const = 0; virtual ErrorCode link(const Control& control, std::string_view from, diff --git a/services/incremental/test/IncrementalServiceTest.cpp b/services/incremental/test/IncrementalServiceTest.cpp index 867312e0eb2f..9b8cf4084bf1 100644 --- a/services/incremental/test/IncrementalServiceTest.cpp +++ b/services/incremental/test/IncrementalServiceTest.cpp @@ -294,6 +294,7 @@ public: MOCK_CONST_METHOD2(getMetadata, RawMetadata(const Control& control, FileId fileid)); MOCK_CONST_METHOD2(getMetadata, RawMetadata(const Control& control, std::string_view path)); MOCK_CONST_METHOD2(getFileId, FileId(const Control& control, std::string_view path)); + MOCK_CONST_METHOD1(toString, std::string(FileId fileId)); MOCK_CONST_METHOD2(countFilledBlocks, std::pair<IncFsBlockIndex, IncFsBlockIndex>(const Control& control, std::string_view path)); |