Loading api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,7 @@ package android.app { method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] getRegisteredExperimentIds() throws android.app.StatsManager.StatsUnavailableException; method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getReports(long) throws android.app.StatsManager.StatsUnavailableException; method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getStatsMetadata() throws android.app.StatsManager.StatsUnavailableException; method public void registerPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback); method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void removeConfig(long) throws android.app.StatsManager.StatsUnavailableException; method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean removeConfiguration(long); method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] setActiveConfigsChangedOperation(@Nullable android.app.PendingIntent) throws android.app.StatsManager.StatsUnavailableException; Loading @@ -668,6 +669,7 @@ package android.app { method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent); method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setDataFetchOperation(long, android.app.PendingIntent); method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setFetchReportsOperation(android.app.PendingIntent, long) throws android.app.StatsManager.StatsUnavailableException; method public void unregisterPullAtomCallback(int); field public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED"; field public static final String EXTRA_STATS_ACTIVE_CONFIG_KEYS = "android.app.extra.STATS_ACTIVE_CONFIG_KEYS"; field public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; Loading @@ -676,6 +678,23 @@ package android.app { field public static final String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE"; field public static final String EXTRA_STATS_SUBSCRIPTION_ID = "android.app.extra.STATS_SUBSCRIPTION_ID"; field public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID"; field public static final int PULL_SKIP = 1; // 0x1 field public static final int PULL_SUCCESS = 0; // 0x0 } public static class StatsManager.PullAtomMetadata { } public static class StatsManager.PullAtomMetadata.Builder { ctor public StatsManager.PullAtomMetadata.Builder(); method @NonNull public android.app.StatsManager.PullAtomMetadata build(); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setAdditiveFields(@NonNull int[]); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setCoolDownNs(long); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setTimeoutNs(long); } public static interface StatsManager.StatsPullAtomCallback { method public int onPullAtom(int, @NonNull java.util.List<android.util.StatsEvent>); } public static class StatsManager.StatsUnavailableException extends android.util.AndroidException { Loading core/java/android/app/StatsManager.java +48 −29 Original line number Diff line number Diff line Loading @@ -18,11 +18,13 @@ package android.app; import static android.Manifest.permission.DUMP; import static android.Manifest.permission.PACKAGE_USAGE_STATS; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.os.Binder; import android.os.IBinder; import android.os.IPullAtomCallback; import android.os.IPullAtomResultReceiver; Loading Loading @@ -108,13 +110,11 @@ public final class StatsManager { /** * Value indicating that this pull was successful and that the result should be used. * * @hide **/ public static final int PULL_SUCCESS = 0; /** * Value indicating that this pull was unsuccessful and that the result should not be used. * @hide **/ public static final int PULL_SKIP = 1; Loading Loading @@ -511,6 +511,17 @@ public final class StatsManager { } /** * Temp registration for while the migration is in progress. * * @hide */ public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata, @NonNull StatsPullAtomCallback callback, @NonNull @CallbackExecutor Executor executor) { registerPullAtomCallback(atomTag, metadata, executor, callback); } /** * Registers a callback for an atom when that atom is to be pulled. The stats service will * invoke pullData in the callback when the stats service determines that this atom needs to be Loading @@ -520,18 +531,19 @@ public final class StatsManager { * @param metadata Optional metadata specifying the timeout, cool down time, and * additive fields for mapping isolated to host uids. * @param callback The callback to be invoked when the stats service pulls the atom. * @param executor The executor in which to run the callback * @param executor The executor in which to run the callback. * * @hide */ public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata, @NonNull StatsPullAtomCallback callback, @NonNull Executor executor) { @NonNull @CallbackExecutor Executor executor, @NonNull StatsPullAtomCallback callback) { long coolDownNs = metadata == null ? DEFAULT_COOL_DOWN_NS : metadata.mCoolDownNs; long timeoutNs = metadata == null ? DEFAULT_TIMEOUT_NS : metadata.mTimeoutNs; int[] additiveFields = metadata == null ? new int[0] : metadata.mAdditiveFields; if (additiveFields == null) { additiveFields = new int[0]; } synchronized (sLock) { try { IStatsManagerService service = getIStatsManagerServiceLocked(); Loading @@ -551,7 +563,6 @@ public final class StatsManager { * * @param atomTag The tag of the atom of which to unregister * * @hide */ public void unregisterPullAtomCallback(int atomTag) { synchronized (sLock) { Loading @@ -577,6 +588,8 @@ public final class StatsManager { @Override public void onPullAtom(int atomTag, IPullAtomResultReceiver resultReceiver) { long token = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> { List<StatsEvent> data = new ArrayList<>(); int successInt = mCallback.onPullAtom(atomTag, data); Loading @@ -592,6 +605,9 @@ public final class StatsManager { Slog.w(TAG, "StatsPullResultReceiver failed for tag " + mAtomId); } }); } finally { Binder.restoreCallingIdentity(token); } } } Loading @@ -599,7 +615,6 @@ public final class StatsManager { * Metadata required for registering a StatsPullAtomCallback. * All fields are optional, and defaults will be used for fields that are unspecified. * * @hide */ public static class PullAtomMetadata { private final long mCoolDownNs; Loading @@ -614,8 +629,9 @@ public final class StatsManager { } /** * Returns a new PullAtomMetadata.Builder object for constructing PullAtomMetadata for * StatsManager#registerPullAtomCallback * Temp for while migrations are in progress. * * @hide */ public static PullAtomMetadata.Builder newBuilder() { return new PullAtomMetadata.Builder(); Loading @@ -629,7 +645,11 @@ public final class StatsManager { private long mTimeoutNs; private int[] mAdditiveFields; private Builder() { /** * Returns a new PullAtomMetadata.Builder object for constructing PullAtomMetadata for * StatsManager#registerPullAtomCallback */ public Builder() { mCoolDownNs = DEFAULT_COOL_DOWN_NS; mTimeoutNs = DEFAULT_TIMEOUT_NS; mAdditiveFields = null; Loading Loading @@ -662,7 +682,7 @@ public final class StatsManager { * will be combined when the non-additive fields are the same. */ @NonNull public Builder setAdditiveFields(int[] additiveFields) { public Builder setAdditiveFields(@NonNull int[] additiveFields) { mAdditiveFields = additiveFields; return this; } Loading Loading @@ -705,14 +725,13 @@ public final class StatsManager { /** * Callback interface for pulling atoms requested by the stats service. * * @hide */ public interface StatsPullAtomCallback { /** * Pull data for the specified atom tag, filling in the provided list of StatsEvent data. * @return {@link #PULL_SUCCESS} if the pull was successful, or {@link #PULL_SKIP} if not. */ int onPullAtom(int atomTag, List<StatsEvent> data); int onPullAtom(int atomTag, @NonNull List<StatsEvent> data); } private class StatsdDeathRecipient implements IBinder.DeathRecipient { Loading services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +42 −43 Original line number Diff line number Diff line Loading @@ -173,7 +173,6 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; Loading Loading @@ -349,14 +348,14 @@ public class StatsPullAtomService extends SystemService { } private void registerWifiBytesTransfer() { int tagId = StatsLog.WIFI_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3, 4, 5}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullWifiBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullWifiBytesTransfer(atomTag, data) ); } Loading Loading @@ -441,14 +440,14 @@ public class StatsPullAtomService extends SystemService { private void registerWifiBytesTransferBackground() { int tagId = StatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3, 4, 5, 6}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullWifiBytesTransferBackground(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullWifiBytesTransferBackground(atomTag, data) ); } Loading Loading @@ -479,14 +478,14 @@ public class StatsPullAtomService extends SystemService { private void registerMobileBytesTransfer() { int tagId = StatsLog.MOBILE_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3, 4, 5}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullMobileBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullMobileBytesTransfer(atomTag, data) ); } Loading Loading @@ -517,14 +516,14 @@ public class StatsPullAtomService extends SystemService { private void registerMobileBytesTransferBackground() { int tagId = StatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3, 4, 5, 6}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullMobileBytesTransferBackground(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullMobileBytesTransferBackground(atomTag, data) ); } Loading Loading @@ -555,14 +554,14 @@ public class StatsPullAtomService extends SystemService { private void registerBluetoothBytesTransfer() { int tagId = StatsLog.BLUETOOTH_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullBluetoothBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBluetoothBytesTransfer(atomTag, data) ); } Loading Loading @@ -634,8 +633,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullKernelWakelock(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullKernelWakelock(atomTag, data) ); } Loading Loading @@ -670,14 +669,14 @@ public class StatsPullAtomService extends SystemService { private void registerCpuTimePerFreq() { int tagId = StatsLog.CPU_TIME_PER_FREQ; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimePerFreq(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimePerFreq(atomTag, data) ); } Loading @@ -701,14 +700,14 @@ public class StatsPullAtomService extends SystemService { private void registerCpuTimePerUid() { int tagId = StatsLog.CPU_TIME_PER_UID; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimePerUid(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimePerUid(atomTag, data) ); } Loading @@ -730,14 +729,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_TIME_PER_UID_FREQ; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {4}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimeperUidFreq(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimeperUidFreq(atomTag, data) ); } Loading @@ -762,14 +761,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_ACTIVE_TIME; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuActiveTime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuActiveTime(atomTag, data) ); } Loading @@ -789,14 +788,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_CLUSTER_TIME; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuClusterTime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuClusterTime(atomTag, data) ); } Loading Loading @@ -913,8 +912,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* metadata */ null, (atomTag, data) -> pullBluetoothActivityInfo(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBluetoothActivityInfo(atomTag, data) ); } Loading Loading @@ -949,8 +948,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values (atomTag, data) -> pullSystemUptime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullSystemUptime(atomTag, data) ); } Loading Loading @@ -1232,8 +1231,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullIonHeapSize(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullIonHeapSize(atomTag, data) ); } Loading Loading @@ -1511,8 +1510,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullPowerProfile(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullPowerProfile(atomTag, data) ); } Loading Loading @@ -1681,8 +1680,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values (atomTag, data) -> pullBuildInformation(atomTag, data), BackgroundThread.getExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBuildInformation(atomTag, data) ); } Loading Loading
api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,7 @@ package android.app { method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] getRegisteredExperimentIds() throws android.app.StatsManager.StatsUnavailableException; method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getReports(long) throws android.app.StatsManager.StatsUnavailableException; method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getStatsMetadata() throws android.app.StatsManager.StatsUnavailableException; method public void registerPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback); method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void removeConfig(long) throws android.app.StatsManager.StatsUnavailableException; method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean removeConfiguration(long); method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] setActiveConfigsChangedOperation(@Nullable android.app.PendingIntent) throws android.app.StatsManager.StatsUnavailableException; Loading @@ -668,6 +669,7 @@ package android.app { method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent); method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setDataFetchOperation(long, android.app.PendingIntent); method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setFetchReportsOperation(android.app.PendingIntent, long) throws android.app.StatsManager.StatsUnavailableException; method public void unregisterPullAtomCallback(int); field public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED"; field public static final String EXTRA_STATS_ACTIVE_CONFIG_KEYS = "android.app.extra.STATS_ACTIVE_CONFIG_KEYS"; field public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES"; Loading @@ -676,6 +678,23 @@ package android.app { field public static final String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE"; field public static final String EXTRA_STATS_SUBSCRIPTION_ID = "android.app.extra.STATS_SUBSCRIPTION_ID"; field public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID"; field public static final int PULL_SKIP = 1; // 0x1 field public static final int PULL_SUCCESS = 0; // 0x0 } public static class StatsManager.PullAtomMetadata { } public static class StatsManager.PullAtomMetadata.Builder { ctor public StatsManager.PullAtomMetadata.Builder(); method @NonNull public android.app.StatsManager.PullAtomMetadata build(); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setAdditiveFields(@NonNull int[]); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setCoolDownNs(long); method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setTimeoutNs(long); } public static interface StatsManager.StatsPullAtomCallback { method public int onPullAtom(int, @NonNull java.util.List<android.util.StatsEvent>); } public static class StatsManager.StatsUnavailableException extends android.util.AndroidException { Loading
core/java/android/app/StatsManager.java +48 −29 Original line number Diff line number Diff line Loading @@ -18,11 +18,13 @@ package android.app; import static android.Manifest.permission.DUMP; import static android.Manifest.permission.PACKAGE_USAGE_STATS; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.os.Binder; import android.os.IBinder; import android.os.IPullAtomCallback; import android.os.IPullAtomResultReceiver; Loading Loading @@ -108,13 +110,11 @@ public final class StatsManager { /** * Value indicating that this pull was successful and that the result should be used. * * @hide **/ public static final int PULL_SUCCESS = 0; /** * Value indicating that this pull was unsuccessful and that the result should not be used. * @hide **/ public static final int PULL_SKIP = 1; Loading Loading @@ -511,6 +511,17 @@ public final class StatsManager { } /** * Temp registration for while the migration is in progress. * * @hide */ public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata, @NonNull StatsPullAtomCallback callback, @NonNull @CallbackExecutor Executor executor) { registerPullAtomCallback(atomTag, metadata, executor, callback); } /** * Registers a callback for an atom when that atom is to be pulled. The stats service will * invoke pullData in the callback when the stats service determines that this atom needs to be Loading @@ -520,18 +531,19 @@ public final class StatsManager { * @param metadata Optional metadata specifying the timeout, cool down time, and * additive fields for mapping isolated to host uids. * @param callback The callback to be invoked when the stats service pulls the atom. * @param executor The executor in which to run the callback * @param executor The executor in which to run the callback. * * @hide */ public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata, @NonNull StatsPullAtomCallback callback, @NonNull Executor executor) { @NonNull @CallbackExecutor Executor executor, @NonNull StatsPullAtomCallback callback) { long coolDownNs = metadata == null ? DEFAULT_COOL_DOWN_NS : metadata.mCoolDownNs; long timeoutNs = metadata == null ? DEFAULT_TIMEOUT_NS : metadata.mTimeoutNs; int[] additiveFields = metadata == null ? new int[0] : metadata.mAdditiveFields; if (additiveFields == null) { additiveFields = new int[0]; } synchronized (sLock) { try { IStatsManagerService service = getIStatsManagerServiceLocked(); Loading @@ -551,7 +563,6 @@ public final class StatsManager { * * @param atomTag The tag of the atom of which to unregister * * @hide */ public void unregisterPullAtomCallback(int atomTag) { synchronized (sLock) { Loading @@ -577,6 +588,8 @@ public final class StatsManager { @Override public void onPullAtom(int atomTag, IPullAtomResultReceiver resultReceiver) { long token = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> { List<StatsEvent> data = new ArrayList<>(); int successInt = mCallback.onPullAtom(atomTag, data); Loading @@ -592,6 +605,9 @@ public final class StatsManager { Slog.w(TAG, "StatsPullResultReceiver failed for tag " + mAtomId); } }); } finally { Binder.restoreCallingIdentity(token); } } } Loading @@ -599,7 +615,6 @@ public final class StatsManager { * Metadata required for registering a StatsPullAtomCallback. * All fields are optional, and defaults will be used for fields that are unspecified. * * @hide */ public static class PullAtomMetadata { private final long mCoolDownNs; Loading @@ -614,8 +629,9 @@ public final class StatsManager { } /** * Returns a new PullAtomMetadata.Builder object for constructing PullAtomMetadata for * StatsManager#registerPullAtomCallback * Temp for while migrations are in progress. * * @hide */ public static PullAtomMetadata.Builder newBuilder() { return new PullAtomMetadata.Builder(); Loading @@ -629,7 +645,11 @@ public final class StatsManager { private long mTimeoutNs; private int[] mAdditiveFields; private Builder() { /** * Returns a new PullAtomMetadata.Builder object for constructing PullAtomMetadata for * StatsManager#registerPullAtomCallback */ public Builder() { mCoolDownNs = DEFAULT_COOL_DOWN_NS; mTimeoutNs = DEFAULT_TIMEOUT_NS; mAdditiveFields = null; Loading Loading @@ -662,7 +682,7 @@ public final class StatsManager { * will be combined when the non-additive fields are the same. */ @NonNull public Builder setAdditiveFields(int[] additiveFields) { public Builder setAdditiveFields(@NonNull int[] additiveFields) { mAdditiveFields = additiveFields; return this; } Loading Loading @@ -705,14 +725,13 @@ public final class StatsManager { /** * Callback interface for pulling atoms requested by the stats service. * * @hide */ public interface StatsPullAtomCallback { /** * Pull data for the specified atom tag, filling in the provided list of StatsEvent data. * @return {@link #PULL_SUCCESS} if the pull was successful, or {@link #PULL_SKIP} if not. */ int onPullAtom(int atomTag, List<StatsEvent> data); int onPullAtom(int atomTag, @NonNull List<StatsEvent> data); } private class StatsdDeathRecipient implements IBinder.DeathRecipient { Loading
services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +42 −43 Original line number Diff line number Diff line Loading @@ -173,7 +173,6 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; Loading Loading @@ -349,14 +348,14 @@ public class StatsPullAtomService extends SystemService { } private void registerWifiBytesTransfer() { int tagId = StatsLog.WIFI_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3, 4, 5}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullWifiBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullWifiBytesTransfer(atomTag, data) ); } Loading Loading @@ -441,14 +440,14 @@ public class StatsPullAtomService extends SystemService { private void registerWifiBytesTransferBackground() { int tagId = StatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3, 4, 5, 6}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullWifiBytesTransferBackground(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullWifiBytesTransferBackground(atomTag, data) ); } Loading Loading @@ -479,14 +478,14 @@ public class StatsPullAtomService extends SystemService { private void registerMobileBytesTransfer() { int tagId = StatsLog.MOBILE_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3, 4, 5}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullMobileBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullMobileBytesTransfer(atomTag, data) ); } Loading Loading @@ -517,14 +516,14 @@ public class StatsPullAtomService extends SystemService { private void registerMobileBytesTransferBackground() { int tagId = StatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3, 4, 5, 6}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullMobileBytesTransferBackground(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullMobileBytesTransferBackground(atomTag, data) ); } Loading Loading @@ -555,14 +554,14 @@ public class StatsPullAtomService extends SystemService { private void registerBluetoothBytesTransfer() { int tagId = StatsLog.BLUETOOTH_BYTES_TRANSFER; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullBluetoothBytesTransfer(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBluetoothBytesTransfer(atomTag, data) ); } Loading Loading @@ -634,8 +633,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullKernelWakelock(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullKernelWakelock(atomTag, data) ); } Loading Loading @@ -670,14 +669,14 @@ public class StatsPullAtomService extends SystemService { private void registerCpuTimePerFreq() { int tagId = StatsLog.CPU_TIME_PER_FREQ; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimePerFreq(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimePerFreq(atomTag, data) ); } Loading @@ -701,14 +700,14 @@ public class StatsPullAtomService extends SystemService { private void registerCpuTimePerUid() { int tagId = StatsLog.CPU_TIME_PER_UID; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2, 3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimePerUid(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimePerUid(atomTag, data) ); } Loading @@ -730,14 +729,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_TIME_PER_UID_FREQ; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {4}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuTimeperUidFreq(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuTimeperUidFreq(atomTag, data) ); } Loading @@ -762,14 +761,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_ACTIVE_TIME; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {2}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuActiveTime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuActiveTime(atomTag, data) ); } Loading @@ -789,14 +788,14 @@ public class StatsPullAtomService extends SystemService { // the throttling is 3sec, handled in // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader int tagId = StatsLog.CPU_CLUSTER_TIME; PullAtomMetadata metadata = PullAtomMetadata.newBuilder() PullAtomMetadata metadata = new PullAtomMetadata.Builder() .setAdditiveFields(new int[] {3}) .build(); mStatsManager.registerPullAtomCallback( tagId, metadata, (atomTag, data) -> pullCpuClusterTime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullCpuClusterTime(atomTag, data) ); } Loading Loading @@ -913,8 +912,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* metadata */ null, (atomTag, data) -> pullBluetoothActivityInfo(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBluetoothActivityInfo(atomTag, data) ); } Loading Loading @@ -949,8 +948,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values (atomTag, data) -> pullSystemUptime(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullSystemUptime(atomTag, data) ); } Loading Loading @@ -1232,8 +1231,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullIonHeapSize(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullIonHeapSize(atomTag, data) ); } Loading Loading @@ -1511,8 +1510,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, /* PullAtomMetadata */ null, (atomTag, data) -> pullPowerProfile(atomTag, data), Executors.newSingleThreadExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullPowerProfile(atomTag, data) ); } Loading Loading @@ -1681,8 +1680,8 @@ public class StatsPullAtomService extends SystemService { mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values (atomTag, data) -> pullBuildInformation(atomTag, data), BackgroundThread.getExecutor() BackgroundThread.getExecutor(), (atomTag, data) -> pullBuildInformation(atomTag, data) ); } Loading