diff --git a/apex/statsd/framework/java/android/app/StatsManager.java b/apex/statsd/framework/java/android/app/StatsManager.java index f021dcf3cd2ff..62badb41faa85 100644 --- a/apex/statsd/framework/java/android/app/StatsManager.java +++ b/apex/statsd/framework/java/android/app/StatsManager.java @@ -616,7 +616,7 @@ public final class StatsManager { /** * Set the cool down time of the pull in milliseconds. If two successive pulls are * issued within the cool down, a cached version of the first pull will be used for the - * second pull. + * second pull. The minimum allowed cool down is 1 second. */ @NonNull public Builder setCoolDownMillis(long coolDownMillis) { @@ -625,7 +625,8 @@ public final class StatsManager { } /** - * Set the maximum time the pull can take in milliseconds. + * Set the maximum time the pull can take in milliseconds. The maximum allowed timeout + * is 10 seconds. */ @NonNull public Builder setTimeoutMillis(long timeoutMillis) { diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 4ffa3d8666af0..a3701a77f27a1 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -313,8 +313,10 @@ void StatsPullerManager::RegisterPullAtomCallback(const int uid, const int32_t a // TODO(b/146439412): linkToDeath with the callback so that we can remove it // and delete the puller. StatsdStats::getInstance().notePullerCallbackRegistrationChanged(atomTag, /*registered=*/true); - kAllPullAtomInfo[{.atomTag = atomTag, .uid = useUid ? uid : -1}] = - new StatsCallbackPuller(atomTag, callback, coolDownNs, timeoutNs, additiveFields); + int64_t actualCoolDownNs = coolDownNs < kMinCoolDownNs ? kMinCoolDownNs : coolDownNs; + int64_t actualTimeoutNs = timeoutNs > kMaxTimeoutNs ? kMaxTimeoutNs : timeoutNs; + kAllPullAtomInfo[{.atomTag = atomTag, .uid = useUid ? uid : -1}] = new StatsCallbackPuller( + atomTag, callback, actualCoolDownNs, actualTimeoutNs, additiveFields); } void StatsPullerManager::UnregisterPullAtomCallback(const int uid, const int32_t atomTag) { diff --git a/cmds/statsd/src/external/StatsPullerManager.h b/cmds/statsd/src/external/StatsPullerManager.h index 714b0aebf7aba..c5824a8de17a9 100644 --- a/cmds/statsd/src/external/StatsPullerManager.h +++ b/cmds/statsd/src/external/StatsPullerManager.h @@ -66,6 +66,7 @@ public: virtual ~StatsPullerManager() { } + // Registers a receiver for tagId. It will be pulled on the nextPullTimeNs // and then every intervalNs thereafter. virtual void RegisterReceiver(int tagId, const ConfigKey& configKey, @@ -124,6 +125,8 @@ public: std::map> kAllPullAtomInfo; private: + const static int64_t kMinCoolDownNs = NS_PER_SEC; + const static int64_t kMaxTimeoutNs = 10 * NS_PER_SEC; shared_ptr mStatsCompanionService = nullptr; // A struct containing an atom id and a Config Key