diff options
-rw-r--r-- | services/core/java/com/android/server/stats/pull/StatsPullAtomService.java | 62 | ||||
-rw-r--r-- | services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java | 39 |
2 files changed, 100 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 91231c3032b4..a7e2d1dcceec 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -51,6 +51,9 @@ import static android.util.MathUtils.constrain; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.internal.util.FrameworkStatsLog.DATA_USAGE_BYTES_TRANSFER__OPPORTUNISTIC_DATA_SUB__NOT_OPPORTUNISTIC; import static com.android.internal.util.FrameworkStatsLog.DATA_USAGE_BYTES_TRANSFER__OPPORTUNISTIC_DATA_SUB__OPPORTUNISTIC; +import static com.android.internal.util.FrameworkStatsLog.TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__GEO; +import static com.android.internal.util.FrameworkStatsLog.TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__MANUAL; +import static com.android.internal.util.FrameworkStatsLog.TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__TELEPHONY; import static com.android.server.am.MemoryStatUtil.readMemoryStatFromFilesystem; import static com.android.server.stats.pull.IonMemoryUtil.readProcessSystemIonHeapSizesFromDebugfs; import static com.android.server.stats.pull.IonMemoryUtil.readSystemIonHeapSizeFromDebugfs; @@ -185,6 +188,8 @@ import com.android.server.stats.pull.netstats.NetworkStatsExt; import com.android.server.stats.pull.netstats.SubInfo; import com.android.server.storage.DiskStatsFileLogger; import com.android.server.storage.DiskStatsLoggingService; +import com.android.server.timezonedetector.MetricsTimeZoneDetectorState; +import com.android.server.timezonedetector.TimeZoneDetectorInternal; import libcore.io.IoUtils; @@ -410,6 +415,7 @@ public class StatsPullAtomService extends SystemService { private final Object mBuildInformationLock = new Object(); private final Object mRoleHolderLock = new Object(); private final Object mTimeZoneDataInfoLock = new Object(); + private final Object mTimeZoneDetectionInfoLock = new Object(); private final Object mExternalStorageInfoLock = new Object(); private final Object mAppsOnExternalStorageInfoLock = new Object(); private final Object mFaceSettingsLock = new Object(); @@ -644,6 +650,10 @@ public class StatsPullAtomService extends SystemService { synchronized (mTimeZoneDataInfoLock) { return pullTimeZoneDataInfoLocked(atomTag, data); } + case FrameworkStatsLog.TIME_ZONE_DETECTOR_STATE: + synchronized (mTimeZoneDetectionInfoLock) { + return pullTimeZoneDetectorStateLocked(atomTag, data); + } case FrameworkStatsLog.EXTERNAL_STORAGE_INFO: synchronized (mExternalStorageInfoLock) { return pullExternalStorageInfoLocked(atomTag, data); @@ -849,6 +859,7 @@ public class StatsPullAtomService extends SystemService { registerBuildInformation(); registerRoleHolder(); registerTimeZoneDataInfo(); + registerTimeZoneDetectorState(); registerExternalStorageInfo(); registerAppsOnExternalStorageInfo(); registerFaceSettings(); @@ -3254,6 +3265,57 @@ public class StatsPullAtomService extends SystemService { return StatsManager.PULL_SUCCESS; } + private void registerTimeZoneDetectorState() { + int tagId = FrameworkStatsLog.TIME_ZONE_DETECTOR_STATE; + mStatsManager.setPullAtomCallback( + tagId, + null, // use default PullAtomMetadata values + DIRECT_EXECUTOR, + mStatsCallbackImpl + ); + } + + int pullTimeZoneDetectorStateLocked(int atomTag, List<StatsEvent> pulledData) { + final long token = Binder.clearCallingIdentity(); + try { + TimeZoneDetectorInternal timeZoneDetectorInternal = + LocalServices.getService(TimeZoneDetectorInternal.class); + MetricsTimeZoneDetectorState metricsState = + timeZoneDetectorInternal.generateMetricsState(); + pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag, + metricsState.isTelephonyDetectionSupported(), + metricsState.isGeoDetectionSupported(), + metricsState.isUserLocationEnabled(), + metricsState.getAutoDetectionEnabledSetting(), + metricsState.getGeoDetectionEnabledSetting(), + convertToMetricsDetectionMode(metricsState.getDetectionMode()), + metricsState.getDeviceTimeZoneIdOrdinal(), + metricsState.getLatestManualSuggestionProtoBytes(), + metricsState.getLatestTelephonySuggestionProtoBytes(), + metricsState.getLatestGeolocationSuggestionProtoBytes() + )); + } catch (RuntimeException e) { + Slog.e(TAG, "Getting time zone detection state failed: ", e); + return StatsManager.PULL_SKIP; + } finally { + Binder.restoreCallingIdentity(token); + } + return StatsManager.PULL_SUCCESS; + } + + private int convertToMetricsDetectionMode(int detectionMode) { + switch (detectionMode) { + case MetricsTimeZoneDetectorState.DETECTION_MODE_MANUAL: + return TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__MANUAL; + case MetricsTimeZoneDetectorState.DETECTION_MODE_GEO: + return TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__GEO; + case MetricsTimeZoneDetectorState.DETECTION_MODE_TELEPHONY: + return TIME_ZONE_DETECTOR_STATE__DETECTION_MODE__TELEPHONY; + default: + throw new IllegalArgumentException("" + detectionMode); + } + } + private void registerExternalStorageInfo() { int tagId = FrameworkStatsLog.EXTERNAL_STORAGE_INFO; mStatsManager.setPullAtomCallback( diff --git a/services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java b/services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java index dfff6f2dd5ae..e19ec8472e0a 100644 --- a/services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java +++ b/services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java @@ -16,6 +16,21 @@ package com.android.server.timezonedetector.location; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__CERTAIN; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__DESTROYED; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__INITIALIZING; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__PERM_FAILED; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__STOPPED; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__UNCERTAIN; +import static com.android.internal.util.FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__UNKNOWN; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_DESTROYED; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_PERM_FAILED; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_STARTED_CERTAIN; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_STARTED_INITIALIZING; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_STARTED_UNCERTAIN; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_STOPPED; +import static com.android.server.timezonedetector.location.LocationTimeZoneProvider.ProviderState.PROVIDER_STATE_UNKNOWN; + import android.annotation.IntRange; import com.android.internal.util.FrameworkStatsLog; @@ -37,6 +52,28 @@ public class RealProviderMetricsLogger implements ProviderMetricsLogger { @Override public void onProviderStateChanged(@ProviderStateEnum int stateEnum) { - // TODO(b/172934905): Implement once the atom has landed. + FrameworkStatsLog.write(FrameworkStatsLog.LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED, + mProviderIndex, + metricsProviderState(stateEnum)); + } + + private static int metricsProviderState(@ProviderStateEnum int stateEnum) { + switch (stateEnum) { + case PROVIDER_STATE_STARTED_INITIALIZING: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__INITIALIZING; + case PROVIDER_STATE_STARTED_UNCERTAIN: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__UNCERTAIN; + case PROVIDER_STATE_STARTED_CERTAIN: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__CERTAIN; + case PROVIDER_STATE_STOPPED: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__STOPPED; + case PROVIDER_STATE_DESTROYED: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__DESTROYED; + case PROVIDER_STATE_PERM_FAILED: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__PERM_FAILED; + case PROVIDER_STATE_UNKNOWN: + default: + return LOCATION_TIME_ZONE_PROVIDER_STATE_CHANGED__STATE__UNKNOWN; + } } } |