summaryrefslogtreecommitdiff
path: root/services/incremental
diff options
context:
space:
mode:
author Yurii Zubrytskyi <zyy@google.com> 2021-03-18 16:59:47 -0700
committer Alex Buynytskyy <alexbuy@google.com> 2021-03-19 03:46:40 +0000
commit4375a7453574a219f446222409a567acb2d60120 (patch)
treebccb04b61f479825c46f7bb17644c7dd732a25c4 /services/incremental
parent667d24240466c49d36726dbea486796947014c44 (diff)
[incfs] Use a more efficient getBlockCount() for incfs v2
v2 IncFS driver gives a very lightweight function to check the loading progress on a file, use it instead of counting the filled ranges + remove the unused mockable toString(IncFsFileId) Bug: 183067554 Test: atest IncrementalServiceTest Change-Id: Icd3bd891d671b27654f4194787a15a00cba1eb80
Diffstat (limited to 'services/incremental')
-rw-r--r--services/incremental/IncrementalService.cpp2
-rw-r--r--services/incremental/ServiceWrappers.cpp13
-rw-r--r--services/incremental/ServiceWrappers.h3
-rw-r--r--services/incremental/test/IncrementalServiceTest.cpp1
4 files changed, 15 insertions, 4 deletions
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index ebfcc3262ef5..34253f916231 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -2860,7 +2860,7 @@ void IncrementalService::DataLoaderStub::onDump(int fd) {
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());
+ dprintf(fd, " fileId: %s\n", IncFsWrapper::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);
diff --git a/services/incremental/ServiceWrappers.cpp b/services/incremental/ServiceWrappers.cpp
index eb204c5466e0..7e85f9db70fd 100644
--- a/services/incremental/ServiceWrappers.cpp
+++ b/services/incremental/ServiceWrappers.cpp
@@ -134,6 +134,10 @@ private:
} mLooper;
};
+std::string IncFsWrapper::toString(FileId fileId) {
+ return incfs::toString(fileId);
+}
+
class RealIncFs final : public IncFsWrapper {
public:
RealIncFs() = default;
@@ -173,9 +177,16 @@ 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 {
+ if (incfs::features() & Features::v2) {
+ const auto counts = incfs::getBlockCount(control, path);
+ if (!counts) {
+ return {-errno, -errno};
+ }
+ return {counts->filledDataBlocks + counts->filledHashBlocks,
+ counts->totalDataBlocks + counts->totalHashBlocks};
+ }
const auto fileId = incfs::getFileId(control, path);
const auto fd = incfs::openForSpecialOps(control, fileId);
int res = fd.get();
diff --git a/services/incremental/ServiceWrappers.h b/services/incremental/ServiceWrappers.h
index 2f3eb24182e4..a787db573dfc 100644
--- a/services/incremental/ServiceWrappers.h
+++ b/services/incremental/ServiceWrappers.h
@@ -84,6 +84,8 @@ public:
void(std::string_view root, std::string_view backingDir,
std::span<std::pair<std::string_view, std::string_view>> binds)>;
+ static std::string toString(FileId fileId);
+
virtual ~IncFsWrapper() = default;
virtual Features features() const = 0;
virtual void listExistingMounts(const ExistingMountCallback& cb) const = 0;
@@ -99,7 +101,6 @@ 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 incfs::LoadingState isFileFullyLoaded(const Control& control,
diff --git a/services/incremental/test/IncrementalServiceTest.cpp b/services/incremental/test/IncrementalServiceTest.cpp
index 50d1e3612cb0..fb3a8a04dbe1 100644
--- a/services/incremental/test/IncrementalServiceTest.cpp
+++ b/services/incremental/test/IncrementalServiceTest.cpp
@@ -362,7 +362,6 @@ 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));