Loading services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +62 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -849,6 +859,7 @@ public class StatsPullAtomService extends SystemService { registerBuildInformation(); registerRoleHolder(); registerTimeZoneDataInfo(); registerTimeZoneDetectorState(); registerExternalStorageInfo(); registerAppsOnExternalStorageInfo(); registerFaceSettings(); Loading Loading @@ -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( Loading services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java +38 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } } Loading
services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +62 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -849,6 +859,7 @@ public class StatsPullAtomService extends SystemService { registerBuildInformation(); registerRoleHolder(); registerTimeZoneDataInfo(); registerTimeZoneDetectorState(); registerExternalStorageInfo(); registerAppsOnExternalStorageInfo(); registerFaceSettings(); Loading Loading @@ -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( Loading
services/core/java/com/android/server/timezonedetector/location/RealProviderMetricsLogger.java +38 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } }