Loading services/incremental/IncrementalService.cpp +28 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,15 @@ static long elapsedMcs(Duration start, Duration end) { return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); } static uint64_t elapsedUsSinceMonoTs(uint64_t monoTsUs) { timespec now; if (clock_gettime(CLOCK_MONOTONIC, &now) != 0) { return 0; } uint64_t nowUs = now.tv_sec * 1000000LL + now.tv_nsec / 1000; return nowUs - monoTsUs; } void IncrementalService::onDump(int fd) { dprintf(fd, "Incremental is %s\n", incfs::enabled() ? "ENABLED" : "DISABLED"); dprintf(fd, "IncFs features: 0x%x\n", int(mIncFs->features())); Loading Loading @@ -466,6 +475,25 @@ void IncrementalService::onDump(int fd) { dprintf(fd, " Metrics not available. Errno: %d\n", errno); } dprintf(fd, " }\n"); const auto lastReadError = mIncFs->getLastReadError(ifs->control); const auto errorNo = errno; dprintf(fd, " lastReadError: {\n"); if (lastReadError) { if (lastReadError->timestampUs == 0) { dprintf(fd, " No read errors.\n"); } else { dprintf(fd, " fileId: %s\n", IncFsWrapper::toString(lastReadError->id).c_str()); dprintf(fd, " time: %llu microseconds ago\n", (unsigned long long)elapsedUsSinceMonoTs(lastReadError->timestampUs)); dprintf(fd, " blockIndex: %d\n", lastReadError->block); dprintf(fd, " errno: %d\n", lastReadError->errorNo); } } else { dprintf(fd, " Info not available. Errno: %d\n", errorNo); } dprintf(fd, " }\n"); } dprintf(fd, " }\n"); } Loading services/incremental/ServiceWrappers.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -265,6 +265,9 @@ public: std::optional<Metrics> getMetrics(std::string_view sysfsName) const final { return incfs::getMetrics(sysfsName); } std::optional<LastReadError> getLastReadError(const Control& control) const final { return incfs::getLastReadError(control); } }; static JNIEnv* getOrAttachJniEnv(JavaVM* jvm); Loading services/incremental/ServiceWrappers.h +2 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ public: using WaitResult = incfs::WaitResult; using Features = incfs::Features; using Metrics = incfs::Metrics; using LastReadError = incfs::LastReadError; using ExistingMountCallback = android::base::function_ref< void(std::string_view root, std::string_view backingDir, Loading Loading @@ -127,6 +128,7 @@ public: virtual ErrorCode forEachFile(const Control& control, FileCallback cb) const = 0; virtual ErrorCode forEachIncompleteFile(const Control& control, FileCallback cb) const = 0; virtual std::optional<Metrics> getMetrics(std::string_view sysfsName) const = 0; virtual std::optional<LastReadError> getLastReadError(const Control& control) const = 0; }; class AppOpsManagerWrapper { Loading services/incremental/test/IncrementalServiceTest.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ public: MOCK_CONST_METHOD2(forEachFile, ErrorCode(const Control& control, FileCallback cb)); MOCK_CONST_METHOD2(forEachIncompleteFile, ErrorCode(const Control& control, FileCallback cb)); MOCK_CONST_METHOD1(getMetrics, std::optional<Metrics>(std::string_view path)); MOCK_CONST_METHOD1(getLastReadError, std::optional<LastReadError>(const Control& control)); MockIncFs() { ON_CALL(*this, listExistingMounts(_)).WillByDefault(Return()); Loading Loading
services/incremental/IncrementalService.cpp +28 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,15 @@ static long elapsedMcs(Duration start, Duration end) { return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); } static uint64_t elapsedUsSinceMonoTs(uint64_t monoTsUs) { timespec now; if (clock_gettime(CLOCK_MONOTONIC, &now) != 0) { return 0; } uint64_t nowUs = now.tv_sec * 1000000LL + now.tv_nsec / 1000; return nowUs - monoTsUs; } void IncrementalService::onDump(int fd) { dprintf(fd, "Incremental is %s\n", incfs::enabled() ? "ENABLED" : "DISABLED"); dprintf(fd, "IncFs features: 0x%x\n", int(mIncFs->features())); Loading Loading @@ -466,6 +475,25 @@ void IncrementalService::onDump(int fd) { dprintf(fd, " Metrics not available. Errno: %d\n", errno); } dprintf(fd, " }\n"); const auto lastReadError = mIncFs->getLastReadError(ifs->control); const auto errorNo = errno; dprintf(fd, " lastReadError: {\n"); if (lastReadError) { if (lastReadError->timestampUs == 0) { dprintf(fd, " No read errors.\n"); } else { dprintf(fd, " fileId: %s\n", IncFsWrapper::toString(lastReadError->id).c_str()); dprintf(fd, " time: %llu microseconds ago\n", (unsigned long long)elapsedUsSinceMonoTs(lastReadError->timestampUs)); dprintf(fd, " blockIndex: %d\n", lastReadError->block); dprintf(fd, " errno: %d\n", lastReadError->errorNo); } } else { dprintf(fd, " Info not available. Errno: %d\n", errorNo); } dprintf(fd, " }\n"); } dprintf(fd, " }\n"); } Loading
services/incremental/ServiceWrappers.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -265,6 +265,9 @@ public: std::optional<Metrics> getMetrics(std::string_view sysfsName) const final { return incfs::getMetrics(sysfsName); } std::optional<LastReadError> getLastReadError(const Control& control) const final { return incfs::getLastReadError(control); } }; static JNIEnv* getOrAttachJniEnv(JavaVM* jvm); Loading
services/incremental/ServiceWrappers.h +2 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ public: using WaitResult = incfs::WaitResult; using Features = incfs::Features; using Metrics = incfs::Metrics; using LastReadError = incfs::LastReadError; using ExistingMountCallback = android::base::function_ref< void(std::string_view root, std::string_view backingDir, Loading Loading @@ -127,6 +128,7 @@ public: virtual ErrorCode forEachFile(const Control& control, FileCallback cb) const = 0; virtual ErrorCode forEachIncompleteFile(const Control& control, FileCallback cb) const = 0; virtual std::optional<Metrics> getMetrics(std::string_view sysfsName) const = 0; virtual std::optional<LastReadError> getLastReadError(const Control& control) const = 0; }; class AppOpsManagerWrapper { Loading
services/incremental/test/IncrementalServiceTest.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ public: MOCK_CONST_METHOD2(forEachFile, ErrorCode(const Control& control, FileCallback cb)); MOCK_CONST_METHOD2(forEachIncompleteFile, ErrorCode(const Control& control, FileCallback cb)); MOCK_CONST_METHOD1(getMetrics, std::optional<Metrics>(std::string_view path)); MOCK_CONST_METHOD1(getLastReadError, std::optional<LastReadError>(const Control& control)); MockIncFs() { ON_CALL(*this, listExistingMounts(_)).WillByDefault(Return()); Loading