From de473b513894faa4e64e430ee604e5eef39c40bd Mon Sep 17 00:00:00 2001 From: Tej Singh Date: Wed, 10 Apr 2019 19:25:03 -0700 Subject: [PATCH] Fix puller callback with gauge/value metric Allows gauge/value metrics to work with pulled atoms that were registered after the config was received. Test: gts Bug: 130314103 Change-Id: I9cddd28efd464d8bb78da868d8c0d850ffb0235c --- cmds/statsd/src/external/StatsPullerManager.cpp | 10 +++++----- cmds/statsd/src/guardrail/StatsdStats.h | 6 ++++++ cmds/statsd/src/stats_log_util.h | 4 ++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 13eee5da52cfa..d6411a7480812 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -276,7 +276,8 @@ bool StatsPullerManager::Pull(int tagId, vector>* data) { } bool StatsPullerManager::PullerForMatcherExists(int tagId) const { - return kAllPullAtomInfo.find(tagId) != kAllPullAtomInfo.end(); + // Vendor pulled atoms might be registered after we parse the config. + return isVendorPulledAtom(tagId) || kAllPullAtomInfo.find(tagId) != kAllPullAtomInfo.end(); } void StatsPullerManager::updateAlarmLocked() { @@ -449,9 +450,8 @@ void StatsPullerManager::RegisterPullerCallback(int32_t atomTag, const sp& callback) { AutoMutex _l(mLock); // Platform pullers cannot be changed. - if (atomTag < StatsdStats::kMaxPlatformAtomTag) { - VLOG("RegisterPullerCallback: atom tag %d is less than min tag %d", - atomTag, StatsdStats::kMaxPlatformAtomTag); + if (!isVendorPulledAtom(atomTag)) { + VLOG("RegisterPullerCallback: atom tag %d is not vendor pulled", atomTag); return; } VLOG("RegisterPullerCallback: adding puller for tag %d", atomTag); @@ -462,7 +462,7 @@ void StatsPullerManager::RegisterPullerCallback(int32_t atomTag, void StatsPullerManager::UnregisterPullerCallback(int32_t atomTag) { AutoMutex _l(mLock); // Platform pullers cannot be changed. - if (atomTag < StatsdStats::kMaxPlatformAtomTag) { + if (!isVendorPulledAtom(atomTag)) { return; } StatsdStats::getInstance().notePullerCallbackRegistrationChanged(atomTag, /*registered=*/false); diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index 88ecccc32407a..53f12acd3b842 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -160,6 +160,12 @@ public: // Max platform atom tag number. static const int32_t kMaxPlatformAtomTag = 100000; + // Vendor pulled atom start id. + static const int32_t kVendorPulledAtomStartTag = 150000; + + // Max accepted atom id. + static const int32_t kMaxAtomTag = 200000; + static const int64_t kInt64Max = 0x7fffffffffffffffLL; /** diff --git a/cmds/statsd/src/stats_log_util.h b/cmds/statsd/src/stats_log_util.h index cdef87451f631..2a18e22adbb68 100644 --- a/cmds/statsd/src/stats_log_util.h +++ b/cmds/statsd/src/stats_log_util.h @@ -96,6 +96,10 @@ inline bool isPushedAtom(int atomId) { return atomId <= util::kMaxPushedAtomId && atomId > 1; } +inline bool isVendorPulledAtom(int atomId) { + return atomId >= StatsdStats::kVendorPulledAtomStartTag && atomId < StatsdStats::kMaxAtomTag; +} + } // namespace statsd } // namespace os } // namespace android