Merge "Wire up geotz metrics to the real metrics code" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-04-01 12:19:39 +00:00
committed by Android (Google) Code Review
2 changed files with 100 additions and 1 deletions

View File

@@ -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(

View File

@@ -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;
}
}
}