[incremental] expose more metrics fields
Exposing more data loader states as per
go/incremental-crash-reports-1-pager.
BUG: 184844615
Test: atest service.incremental_test
Test: atest android.cts.statsdatom.incremental.AppErrorAtomTests
Change-Id: I532513453411b2ccdb21311d0bc3dee0641837db
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 4ce336d..3511543 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -2394,26 +2394,20 @@
}
void IncrementalService::getMetrics(StorageId storageId, android::os::PersistableBundle* result) {
- const auto duration = getMillsSinceOldestPendingRead(storageId);
- if (duration >= 0) {
- const auto kMetricsMillisSinceOldestPendingRead =
- os::incremental::BnIncrementalService::METRICS_MILLIS_SINCE_OLDEST_PENDING_READ();
- result->putLong(String16(kMetricsMillisSinceOldestPendingRead.data()), duration);
- }
-}
-
-long IncrementalService::getMillsSinceOldestPendingRead(StorageId storageId) {
const auto ifs = getIfs(storageId);
if (!ifs) {
- LOG(ERROR) << "getMillsSinceOldestPendingRead failed, invalid storageId: " << storageId;
- return -EINVAL;
+ LOG(ERROR) << "getMetrics failed, invalid storageId: " << storageId;
+ return;
}
+ const auto kMetricsReadLogsEnabled =
+ os::incremental::BnIncrementalService::METRICS_READ_LOGS_ENABLED();
+ result->putBoolean(String16(kMetricsReadLogsEnabled.data()), ifs->readLogsEnabled() != 0);
+
std::unique_lock l(ifs->lock);
if (!ifs->dataLoaderStub) {
- LOG(ERROR) << "getMillsSinceOldestPendingRead failed, no data loader: " << storageId;
- return -EINVAL;
+ return;
}
- return ifs->dataLoaderStub->elapsedMsSinceOldestPendingRead();
+ ifs->dataLoaderStub->getMetrics(result);
}
IncrementalService::DataLoaderStub::DataLoaderStub(
@@ -2767,6 +2761,7 @@
if (healthListener) {
healthListener->onHealthStatus(id(), healthStatus);
}
+ mHealthStatus = healthStatus;
}
void IncrementalService::DataLoaderStub::updateHealthStatus(bool baseline) {
@@ -2938,6 +2933,29 @@
return result;
}
+void IncrementalService::DataLoaderStub::getMetrics(android::os::PersistableBundle* result) {
+ const auto duration = elapsedMsSinceOldestPendingRead();
+ if (duration >= 0) {
+ const auto kMetricsMillisSinceOldestPendingRead =
+ os::incremental::BnIncrementalService::METRICS_MILLIS_SINCE_OLDEST_PENDING_READ();
+ result->putLong(String16(kMetricsMillisSinceOldestPendingRead.data()), duration);
+ }
+ const auto kMetricsStorageHealthStatusCode =
+ os::incremental::BnIncrementalService::METRICS_STORAGE_HEALTH_STATUS_CODE();
+ result->putInt(String16(kMetricsStorageHealthStatusCode.data()), mHealthStatus);
+ const auto kMetricsDataLoaderStatusCode =
+ os::incremental::BnIncrementalService::METRICS_DATA_LOADER_STATUS_CODE();
+ result->putInt(String16(kMetricsDataLoaderStatusCode.data()), mCurrentStatus);
+ const auto kMetricsMillisSinceLastDataLoaderBind =
+ os::incremental::BnIncrementalService::METRICS_MILLIS_SINCE_LAST_DATA_LOADER_BIND();
+ result->putLong(String16(kMetricsMillisSinceLastDataLoaderBind.data()),
+ (long)(elapsedMcs(mPreviousBindTs, mService.mClock->now()) / 1000));
+ const auto kMetricsDataLoaderBindDelayMillis =
+ os::incremental::BnIncrementalService::METRICS_DATA_LOADER_BIND_DELAY_MILLIS();
+ result->putLong(String16(kMetricsDataLoaderBindDelayMillis.data()),
+ (long)(mPreviousBindDelay.count()));
+}
+
long IncrementalService::DataLoaderStub::elapsedMsSinceOldestPendingRead() {
const auto oldestPendingReadKernelTs = getOldestTsFromLastPendingReads();
if (oldestPendingReadKernelTs == kMaxBootClockTsUs) {
@@ -3007,7 +3025,7 @@
dprintf(fd, " bootClockTsUs: %lld\n", (long long)pendingRead.bootClockTsUs);
}
dprintf(fd, " bind: %llds ago (delay: %llds)\n",
- (long long)(elapsedMcs(mPreviousBindTs, Clock::now()) / 1000000),
+ (long long)(elapsedMcs(mPreviousBindTs, mService.mClock->now()) / 1000000),
(long long)(mPreviousBindDelay.count() / 1000));
dprintf(fd, " }\n");
const auto& params = mParams;