From 7620bcb54c86628fba8c017e0aa8ca4ec2100f29 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Fri, 5 Mar 2021 21:35:50 -0800 Subject: [PATCH] Better error message for missing page reads. >missing reads count 15, timestamp delta 10ms Bug: 181876064 Test: atest PackageManagerShellCommandIncrementalTest Change-Id: I9c5a7ef62d10feee3512d934f7ad3ba9f402448c --- ..._pm_PackageManagerShellCommandDataLoader.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp index 8efbaf577134d..f0210eeb80e8c 100644 --- a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp +++ b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp @@ -643,7 +643,7 @@ private: } TracedRead last = {}; - auto lastSerialNo = mLastSerialNo; + auto lastSerialNo = mLastSerialNo < 0 ? pageReads[0].serialNo : mLastSerialNo; for (auto&& read : pageReads) { const auto expectedSerialNo = lastSerialNo + last.count; #ifdef VERBOSE_READ_LOGS @@ -676,8 +676,7 @@ private: // Second, report missing reads, if any. if (read.serialNo != expectedSerialNo) { - const auto readsMissing = read.serialNo - expectedSerialNo; - traceMissingReads(readsMissing); + traceMissingReads(expectedSerialNo, read.serialNo); } last = TracedRead{ @@ -721,9 +720,13 @@ private: ATRACE_END(); } - void traceMissingReads(int64_t count) { - const auto trace = android::base::StringPrintf("missing_page_reads: count=%lld", - static_cast(count)); + void traceMissingReads(int64_t expectedSerialNo, int64_t readSerialNo) { + const auto readsMissing = readSerialNo - expectedSerialNo; + const auto trace = + android::base::StringPrintf("missing_page_reads: count=%lld, range [%lld,%lld)", + static_cast(readsMissing), + static_cast(expectedSerialNo), + static_cast(readSerialNo)); ATRACE_BEGIN(trace.c_str()); ATRACE_END(); } @@ -874,7 +877,7 @@ private: std::atomic mStopReceiving = false; std::atomic mReadLogsEnabled = false; std::chrono::milliseconds mWaitOnEofInterval{WaitOnEofMinInterval}; - int64_t mLastSerialNo{1}; + int64_t mLastSerialNo{-1}; /** Tracks which files have been requested */ std::unordered_set mRequestedFiles; };