summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Songchun Fan <schfan@google.com> 2020-11-11 00:07:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-11-11 00:07:55 +0000
commitac55edad1c8587c2557848e7a2997b7af1cab9f7 (patch)
treee68d08fa1599c05fe5d685b8b9508f89e31b0b3c
parent2503bdd788ebde07629161073667497de3408c50 (diff)
parent6944f1e484a86338994a01842e78410866f43211 (diff)
Merge "[incremental] add last pending reads info in dumpsys"
-rw-r--r--services/incremental/IncrementalService.cpp30
-rw-r--r--services/incremental/IncrementalService.h1
-rw-r--r--services/incremental/ServiceWrappers.cpp1
-rw-r--r--services/incremental/ServiceWrappers.h1
-rw-r--r--services/incremental/test/IncrementalServiceTest.cpp1
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));