Merge "Guardrail for pull cooldown/timeout" into rvc-dev am: 533a99f3b0

Change-Id: I8153e00118d8977c5429aaca1b7b6eea6678fd93
This commit is contained in:
TreeHugger Robot
2020-03-31 18:49:06 +00:00
committed by Automerger Merge Worker
3 changed files with 10 additions and 4 deletions

View File

@@ -616,7 +616,7 @@ public final class StatsManager {
/** /**
* Set the cool down time of the pull in milliseconds. If two successive pulls are * 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 * 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 @NonNull
public Builder setCoolDownMillis(long coolDownMillis) { 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 @NonNull
public Builder setTimeoutMillis(long timeoutMillis) { public Builder setTimeoutMillis(long timeoutMillis) {

View File

@@ -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 // TODO(b/146439412): linkToDeath with the callback so that we can remove it
// and delete the puller. // and delete the puller.
StatsdStats::getInstance().notePullerCallbackRegistrationChanged(atomTag, /*registered=*/true); StatsdStats::getInstance().notePullerCallbackRegistrationChanged(atomTag, /*registered=*/true);
kAllPullAtomInfo[{.atomTag = atomTag, .uid = useUid ? uid : -1}] = int64_t actualCoolDownNs = coolDownNs < kMinCoolDownNs ? kMinCoolDownNs : coolDownNs;
new StatsCallbackPuller(atomTag, callback, coolDownNs, timeoutNs, additiveFields); 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) { void StatsPullerManager::UnregisterPullAtomCallback(const int uid, const int32_t atomTag) {

View File

@@ -66,6 +66,7 @@ public:
virtual ~StatsPullerManager() { virtual ~StatsPullerManager() {
} }
// Registers a receiver for tagId. It will be pulled on the nextPullTimeNs // Registers a receiver for tagId. It will be pulled on the nextPullTimeNs
// and then every intervalNs thereafter. // and then every intervalNs thereafter.
virtual void RegisterReceiver(int tagId, const ConfigKey& configKey, virtual void RegisterReceiver(int tagId, const ConfigKey& configKey,
@@ -124,6 +125,8 @@ public:
std::map<const PullerKey, sp<StatsPuller>> kAllPullAtomInfo; std::map<const PullerKey, sp<StatsPuller>> kAllPullAtomInfo;
private: private:
const static int64_t kMinCoolDownNs = NS_PER_SEC;
const static int64_t kMaxTimeoutNs = 10 * NS_PER_SEC;
shared_ptr<IStatsCompanionService> mStatsCompanionService = nullptr; shared_ptr<IStatsCompanionService> mStatsCompanionService = nullptr;
// A struct containing an atom id and a Config Key // A struct containing an atom id and a Config Key