Loading services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +48 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.app.AppOpsManager.OP_FLAG_SELF; import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED; import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_PASSTHROUGH; import static android.hardware.graphics.common.Hdr.DOLBY_VISION; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; Loading @@ -38,6 +40,7 @@ import static android.os.storage.VolumeInfo.TYPE_PUBLIC; import static android.provider.Settings.Global.NETSTATS_UID_BUCKET_DURATION; import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID; import static android.util.MathUtils.constrain; import static android.view.Display.HdrCapabilities.HDR_TYPE_INVALID; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON; Loading Loading @@ -245,6 +248,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; /** Loading Loading @@ -743,6 +747,8 @@ public class StatsPullAtomService extends SystemService { return pullSystemServerPinnerStats(atomTag, data); case FrameworkStatsLog.PENDING_INTENTS_PER_PACKAGE: return pullPendingIntentsPerPackage(atomTag, data); case FrameworkStatsLog.HDR_CAPABILITIES: return pullHdrCapabilities(atomTag, data); default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } Loading Loading @@ -943,6 +949,7 @@ public class StatsPullAtomService extends SystemService { registerMediaCapabilitiesStats(); registerPendingIntentsPerPackagePuller(); registerPinnerServiceStats(); registerHdrCapabilitiesPuller(); } private void initAndRegisterNetworkStatsPullers() { Loading Loading @@ -4720,6 +4727,37 @@ public class StatsPullAtomService extends SystemService { ); } private int pullHdrCapabilities(int atomTag, List<StatsEvent> pulledData) { DisplayManager displayManager = mContext.getSystemService(DisplayManager.class); Display display = displayManager.getDisplay(Display.DEFAULT_DISPLAY); int hdrConversionMode = displayManager.getHdrConversionMode().getConversionMode(); int preferredHdrType = displayManager.getHdrConversionMode().getPreferredHdrOutputType(); boolean userDisabledHdrConversion = hdrConversionMode == HDR_CONVERSION_PASSTHROUGH; int forceHdrFormat = preferredHdrType == HDR_TYPE_INVALID ? 0 : preferredHdrType; boolean hasDolbyVisionIssue = hasDolbyVisionIssue(display); pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag, new byte[0], userDisabledHdrConversion, forceHdrFormat, hasDolbyVisionIssue)); return StatsManager.PULL_SUCCESS; } private boolean hasDolbyVisionIssue(Display display) { AtomicInteger modesSupportingDolbyVision = new AtomicInteger(); Arrays.stream(display.getSupportedModes()) .map(Display.Mode::getSupportedHdrTypes) .filter(types -> Arrays.stream(types).anyMatch(hdrType -> hdrType == DOLBY_VISION)) .forEach(ignored -> modesSupportingDolbyVision.incrementAndGet()); if (modesSupportingDolbyVision.get() != 0 && modesSupportingDolbyVision.get() < display.getSupportedModes().length) { return true; } return false; } private int pullPendingIntentsPerPackage(int atomTag, List<StatsEvent> pulledData) { List<PendingIntentStats> pendingIntentStats = LocalServices.getService(ActivityManagerInternal.class).getPendingIntentStats(); Loading @@ -4740,6 +4778,16 @@ public class StatsPullAtomService extends SystemService { ); } private void registerHdrCapabilitiesPuller() { int tagId = FrameworkStatsLog.HDR_CAPABILITIES; mStatsManager.setPullAtomCallback( tagId, null, // use default PullAtomMetadata values DIRECT_EXECUTOR, mStatsCallbackImpl ); } int pullSystemServerPinnerStats(int atomTag, List<StatsEvent> pulledData) { PinnerService pinnerService = LocalServices.getService(PinnerService.class); List<PinnedFileStats> pinnedFileStats = pinnerService.dumpDataForStatsd(); Loading Loading
services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +48 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.app.AppOpsManager.OP_FLAG_SELF; import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED; import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_PASSTHROUGH; import static android.hardware.graphics.common.Hdr.DOLBY_VISION; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; Loading @@ -38,6 +40,7 @@ import static android.os.storage.VolumeInfo.TYPE_PUBLIC; import static android.provider.Settings.Global.NETSTATS_UID_BUCKET_DURATION; import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID; import static android.util.MathUtils.constrain; import static android.view.Display.HdrCapabilities.HDR_TYPE_INVALID; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON; Loading Loading @@ -245,6 +248,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; /** Loading Loading @@ -743,6 +747,8 @@ public class StatsPullAtomService extends SystemService { return pullSystemServerPinnerStats(atomTag, data); case FrameworkStatsLog.PENDING_INTENTS_PER_PACKAGE: return pullPendingIntentsPerPackage(atomTag, data); case FrameworkStatsLog.HDR_CAPABILITIES: return pullHdrCapabilities(atomTag, data); default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } Loading Loading @@ -943,6 +949,7 @@ public class StatsPullAtomService extends SystemService { registerMediaCapabilitiesStats(); registerPendingIntentsPerPackagePuller(); registerPinnerServiceStats(); registerHdrCapabilitiesPuller(); } private void initAndRegisterNetworkStatsPullers() { Loading Loading @@ -4720,6 +4727,37 @@ public class StatsPullAtomService extends SystemService { ); } private int pullHdrCapabilities(int atomTag, List<StatsEvent> pulledData) { DisplayManager displayManager = mContext.getSystemService(DisplayManager.class); Display display = displayManager.getDisplay(Display.DEFAULT_DISPLAY); int hdrConversionMode = displayManager.getHdrConversionMode().getConversionMode(); int preferredHdrType = displayManager.getHdrConversionMode().getPreferredHdrOutputType(); boolean userDisabledHdrConversion = hdrConversionMode == HDR_CONVERSION_PASSTHROUGH; int forceHdrFormat = preferredHdrType == HDR_TYPE_INVALID ? 0 : preferredHdrType; boolean hasDolbyVisionIssue = hasDolbyVisionIssue(display); pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag, new byte[0], userDisabledHdrConversion, forceHdrFormat, hasDolbyVisionIssue)); return StatsManager.PULL_SUCCESS; } private boolean hasDolbyVisionIssue(Display display) { AtomicInteger modesSupportingDolbyVision = new AtomicInteger(); Arrays.stream(display.getSupportedModes()) .map(Display.Mode::getSupportedHdrTypes) .filter(types -> Arrays.stream(types).anyMatch(hdrType -> hdrType == DOLBY_VISION)) .forEach(ignored -> modesSupportingDolbyVision.incrementAndGet()); if (modesSupportingDolbyVision.get() != 0 && modesSupportingDolbyVision.get() < display.getSupportedModes().length) { return true; } return false; } private int pullPendingIntentsPerPackage(int atomTag, List<StatsEvent> pulledData) { List<PendingIntentStats> pendingIntentStats = LocalServices.getService(ActivityManagerInternal.class).getPendingIntentStats(); Loading @@ -4740,6 +4778,16 @@ public class StatsPullAtomService extends SystemService { ); } private void registerHdrCapabilitiesPuller() { int tagId = FrameworkStatsLog.HDR_CAPABILITIES; mStatsManager.setPullAtomCallback( tagId, null, // use default PullAtomMetadata values DIRECT_EXECUTOR, mStatsCallbackImpl ); } int pullSystemServerPinnerStats(int atomTag, List<StatsEvent> pulledData) { PinnerService pinnerService = LocalServices.getService(PinnerService.class); List<PinnedFileStats> pinnedFileStats = pinnerService.dumpDataForStatsd(); Loading