diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-11-20 23:36:50 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-11-20 23:36:50 +0000 |
| commit | 979e4accd82ec16ee4795b7814bfe1e4dd5415cd (patch) | |
| tree | 347961ea392270fa8c1948600263c1c4ccc2dbf0 /core/java | |
| parent | a91e08f613f99b00ef518553f95dc97296813df9 (diff) | |
| parent | 14df99d96a20f2fa8ea39cc2251f4ce2ab4e9cf1 (diff) | |
Merge "PullAtomMetadata for Registering Pullers"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/StatsManager.java | 107 |
1 files changed, 98 insertions, 9 deletions
diff --git a/core/java/android/app/StatsManager.java b/core/java/android/app/StatsManager.java index 38ae5da0d815..11d6528ab6af 100644 --- a/core/java/android/app/StatsManager.java +++ b/core/java/android/app/StatsManager.java @@ -101,6 +101,9 @@ public final class StatsManager { */ public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED"; + private static final long DEFAULT_COOL_DOWN_NS = 1_000_000_000L; // 1 second. + private static final long DEFAULT_TIMEOUT_NS = 10_000_000_000L; // 10 seconds. + /** * Constructor for StatsManagerClient. * @@ -495,20 +498,23 @@ public final class StatsManager { * pulled. * * @param atomTag The tag of the atom for this puller callback. - * @param coolDownNs The minimum time between successive pulls. A cache of the previous - * pull will be used if the time between pulls is less than coolDownNs. - * @param timeoutNs The maximum time a pull should take. Statsd will wait timeoutNs for - * the pull to complete before timing out and marking the pull as - * failed. - * @param additiveFields Fields that are added when mapping isolated uids to host uids. + * @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 * @throws RemoteException if unsuccessful due to failing to connect to system server. * * @hide */ - public void registerPullAtomCallback(int atomTag, long coolDownNs, long timeoutNs, - int[] additiveFields, @NonNull StatsPullAtomCallback callback, - @NonNull Executor executor) throws RemoteException, SecurityException { + public void registerPullAtomCallback(int atomTag, @Nullable PullAtomMetadata metadata, + @NonNull StatsPullAtomCallback callback, @NonNull Executor executor) + throws RemoteException, SecurityException { + 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 (this) { IStatsCompanionService service = getIStatsCompanionServiceLocked(); PullAtomCallbackInternal rec = @@ -545,6 +551,89 @@ 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; + private final long mTimeoutNs; + private final int[] mAdditiveFields; + + // Private Constructor for builder + private PullAtomMetadata(long coolDownNs, long timeoutNs, int[] additiveFields) { + mCoolDownNs = coolDownNs; + mTimeoutNs = timeoutNs; + mAdditiveFields = additiveFields; + } + + /** + * Returns a new PullAtomMetadata.Builder object for constructing PullAtomMetadata for + * StatsManager#registerPullAtomCallback + */ + public static PullAtomMetadata.Builder newBuilder() { + return new PullAtomMetadata.Builder(); + } + + /** + * Builder for PullAtomMetadata. + */ + public static class Builder { + private long mCoolDownNs; + private long mTimeoutNs; + private int[] mAdditiveFields; + + private Builder() { + mCoolDownNs = DEFAULT_COOL_DOWN_NS; + mTimeoutNs = DEFAULT_TIMEOUT_NS; + mAdditiveFields = null; + } + + /** + * Set the cool down time of the pull in nanoseconds. If two successive pulls are issued + * within the cool down, a cached version of the first will be used for the second. + */ + @NonNull + public Builder setCoolDownNs(long coolDownNs) { + mCoolDownNs = coolDownNs; + return this; + } + + /** + * Set the maximum time the pull can take in nanoseconds. + */ + @NonNull + public Builder setTimeoutNs(long timeoutNs) { + mTimeoutNs = timeoutNs; + return this; + } + + /** + * Set the additive fields of this pulled atom. + * + * This is only applicable for atoms which have a uid field. When tasks are run in + * isolated processes, the data will be attributed to the host uid. Additive fields + * will be combined when the non-additive fields are the same. + */ + @NonNull + public Builder setAdditiveFields(int[] additiveFields) { + mAdditiveFields = additiveFields; + return this; + } + + /** + * Builds and returns a PullAtomMetadata object with the values set in the builder and + * defaults for unset fields. + */ + @NonNull + public PullAtomMetadata build() { + return new PullAtomMetadata(mCoolDownNs, mTimeoutNs, mAdditiveFields); + } + } + } + + /** * Callback interface for pulling atoms requested by the stats service. * * @hide |
