Loading cmds/statsd/src/StatsLogProcessor.cpp +1 −3 Original line number Diff line number Diff line Loading @@ -79,8 +79,6 @@ StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, mSendBroadcast(sendBroadcast), mTimeBaseSec(timeBaseSec), mLastLogTimestamp(0) { StatsPullerManager statsPullerManager; statsPullerManager.SetTimeBaseSec(mTimeBaseSec); } StatsLogProcessor::~StatsLogProcessor() { Loading Loading @@ -177,7 +175,7 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { uint64_t curTimeSec = getElapsedRealtimeSec(); if (curTimeSec - mLastPullerCacheClearTimeSec > StatsdStats::kPullerCacheClearIntervalSec) { mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec); mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec * NS_PER_SEC); mLastPullerCacheClearTimeSec = curTimeSec; } Loading cmds/statsd/src/StatsService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -595,7 +595,7 @@ status_t StatsService::cmd_log_app_breadcrumb(FILE* out, const Vector<String8>& status_t StatsService::cmd_print_pulled_metrics(FILE* out, const Vector<String8>& args) { int s = atoi(args[1].c_str()); vector<shared_ptr<LogEvent> > stats; if (mStatsPullerManager.Pull(s, &stats)) { if (mStatsPullerManager.Pull(s, getElapsedRealtimeNs(), &stats)) { for (const auto& it : stats) { fprintf(out, "Pull from %d: %s\n", s, it->ToString().c_str()); } Loading cmds/statsd/src/external/StatsPuller.cpp +17 −12 Original line number Diff line number Diff line Loading @@ -35,26 +35,31 @@ void StatsPuller::SetUidMap(const sp<UidMap>& uidMap) { mUidMap = uidMap; } // ValueMetric has a minimum bucket size of 10min so that we don't pull too frequently StatsPuller::StatsPuller(const int tagId) : mTagId(tagId) { mCoolDownSec = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownSec; VLOG("Puller for tag %d created. Cooldown set to %ld", mTagId, mCoolDownSec); mCoolDownNs = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownNs; VLOG("Puller for tag %d created. Cooldown set to %lld", mTagId, (long long)mCoolDownNs); } bool StatsPuller::Pull(std::vector<std::shared_ptr<LogEvent>>* data) { bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector<std::shared_ptr<LogEvent>>* data) { lock_guard<std::mutex> lock(mLock); int64_t wallClockTimeNs = getWallClockNs(); StatsdStats::getInstance().notePull(mTagId); long curTime = getElapsedRealtimeSec(); if (curTime - mLastPullTimeSec < mCoolDownSec) { if (elapsedTimeNs - mLastPullTimeNs < mCoolDownNs) { (*data) = mCachedData; StatsdStats::getInstance().notePullFromCache(mTagId); return true; } if (mMinPullIntervalSec > curTime - mLastPullTimeSec) { mMinPullIntervalSec = curTime - mLastPullTimeSec; StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, mMinPullIntervalSec); if (mMinPullIntervalNs > elapsedTimeNs - mLastPullTimeNs) { mMinPullIntervalNs = elapsedTimeNs - mLastPullTimeNs; StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, mMinPullIntervalNs / NS_PER_SEC); } mCachedData.clear(); mLastPullTimeSec = curTime; mLastPullTimeNs = elapsedTimeNs; bool ret = PullInternal(&mCachedData); for (const shared_ptr<LogEvent>& data : mCachedData) { data->setElapsedTimestampNs(elapsedTimeNs); data->setLogdWallClockTimestampNs(wallClockTimeNs); } if (ret) { mergeIsolatedUidsToHostUid(mCachedData, mUidMap, mTagId); (*data) = mCachedData; Loading @@ -70,12 +75,12 @@ int StatsPuller::clearCache() { lock_guard<std::mutex> lock(mLock); int ret = mCachedData.size(); mCachedData.clear(); mLastPullTimeSec = 0; mLastPullTimeNs = 0; return ret; } int StatsPuller::ClearCacheIfNecessary(long timestampSec) { if (timestampSec - mLastPullTimeSec > mCoolDownSec) { int StatsPuller::ClearCacheIfNecessary(int64_t timestampNs) { if (timestampNs - mLastPullTimeNs > mCoolDownNs) { return clearCache(); } else { return 0; Loading cmds/statsd/src/external/StatsPuller.h +5 −5 Original line number Diff line number Diff line Loading @@ -37,13 +37,13 @@ public: virtual ~StatsPuller() {} bool Pull(std::vector<std::shared_ptr<LogEvent>>* data); bool Pull(const int64_t timeNs, std::vector<std::shared_ptr<LogEvent>>* data); // Clear cache immediately int ForceClearCache(); // Clear cache if elapsed time is more than cooldown time int ClearCacheIfNecessary(long timestampSec); int ClearCacheIfNecessary(int64_t timestampNs); static void SetUidMap(const sp<UidMap>& uidMap); Loading @@ -59,9 +59,9 @@ private: // If a pull request comes before cooldown, a cached version from purevious pull // will be returned. // The actual value should be determined by individual pullers. long mCoolDownSec; int64_t mCoolDownNs; // For puller stats long mMinPullIntervalSec = LONG_MAX; int64_t mMinPullIntervalNs = LONG_MAX; virtual bool PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) = 0; Loading @@ -69,7 +69,7 @@ private: // cached data will be returned. std::vector<std::shared_ptr<LogEvent>> mCachedData; long mLastPullTimeSec; int64_t mLastPullTimeNs; int clearCache(); Loading cmds/statsd/src/external/StatsPullerManager.h +8 −13 Original line number Diff line number Diff line Loading @@ -26,10 +26,9 @@ class StatsPullerManager { public: virtual ~StatsPullerManager() {} virtual void RegisterReceiver(int tagId, wp <PullDataReceiver> receiver, long intervalMs) { mPullerManager.RegisterReceiver(tagId, receiver, intervalMs); virtual void RegisterReceiver(int tagId, wp<PullDataReceiver> receiver, int64_t nextPullTimeNs, int64_t intervalNs) { mPullerManager.RegisterReceiver(tagId, receiver, nextPullTimeNs, intervalNs); }; virtual void UnRegisterReceiver(int tagId, wp <PullDataReceiver> receiver) { Loading @@ -45,13 +44,9 @@ class StatsPullerManager { mPullerManager.OnAlarmFired(); } virtual bool Pull(const int tagId, vector<std::shared_ptr<LogEvent>>* data) { return mPullerManager.Pull(tagId, data); } void SetTimeBaseSec(const long timeBaseSec) { mPullerManager.SetTimeBaseSec(timeBaseSec); virtual bool Pull(const int tagId, const int64_t timesNs, vector<std::shared_ptr<LogEvent>>* data) { return mPullerManager.Pull(tagId, timesNs, data); } int ForceClearPullerCache() { Loading @@ -62,8 +57,8 @@ class StatsPullerManager { mPullerManager.SetStatsCompanionService(statsCompanionService); } int ClearPullerCacheIfNecessary(long timestampSec) { return mPullerManager.ClearPullerCacheIfNecessary(timestampSec); int ClearPullerCacheIfNecessary(int64_t timestampNs) { return mPullerManager.ClearPullerCacheIfNecessary(timestampNs); } private: Loading Loading
cmds/statsd/src/StatsLogProcessor.cpp +1 −3 Original line number Diff line number Diff line Loading @@ -79,8 +79,6 @@ StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, mSendBroadcast(sendBroadcast), mTimeBaseSec(timeBaseSec), mLastLogTimestamp(0) { StatsPullerManager statsPullerManager; statsPullerManager.SetTimeBaseSec(mTimeBaseSec); } StatsLogProcessor::~StatsLogProcessor() { Loading Loading @@ -177,7 +175,7 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { uint64_t curTimeSec = getElapsedRealtimeSec(); if (curTimeSec - mLastPullerCacheClearTimeSec > StatsdStats::kPullerCacheClearIntervalSec) { mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec); mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec * NS_PER_SEC); mLastPullerCacheClearTimeSec = curTimeSec; } Loading
cmds/statsd/src/StatsService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -595,7 +595,7 @@ status_t StatsService::cmd_log_app_breadcrumb(FILE* out, const Vector<String8>& status_t StatsService::cmd_print_pulled_metrics(FILE* out, const Vector<String8>& args) { int s = atoi(args[1].c_str()); vector<shared_ptr<LogEvent> > stats; if (mStatsPullerManager.Pull(s, &stats)) { if (mStatsPullerManager.Pull(s, getElapsedRealtimeNs(), &stats)) { for (const auto& it : stats) { fprintf(out, "Pull from %d: %s\n", s, it->ToString().c_str()); } Loading
cmds/statsd/src/external/StatsPuller.cpp +17 −12 Original line number Diff line number Diff line Loading @@ -35,26 +35,31 @@ void StatsPuller::SetUidMap(const sp<UidMap>& uidMap) { mUidMap = uidMap; } // ValueMetric has a minimum bucket size of 10min so that we don't pull too frequently StatsPuller::StatsPuller(const int tagId) : mTagId(tagId) { mCoolDownSec = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownSec; VLOG("Puller for tag %d created. Cooldown set to %ld", mTagId, mCoolDownSec); mCoolDownNs = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownNs; VLOG("Puller for tag %d created. Cooldown set to %lld", mTagId, (long long)mCoolDownNs); } bool StatsPuller::Pull(std::vector<std::shared_ptr<LogEvent>>* data) { bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector<std::shared_ptr<LogEvent>>* data) { lock_guard<std::mutex> lock(mLock); int64_t wallClockTimeNs = getWallClockNs(); StatsdStats::getInstance().notePull(mTagId); long curTime = getElapsedRealtimeSec(); if (curTime - mLastPullTimeSec < mCoolDownSec) { if (elapsedTimeNs - mLastPullTimeNs < mCoolDownNs) { (*data) = mCachedData; StatsdStats::getInstance().notePullFromCache(mTagId); return true; } if (mMinPullIntervalSec > curTime - mLastPullTimeSec) { mMinPullIntervalSec = curTime - mLastPullTimeSec; StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, mMinPullIntervalSec); if (mMinPullIntervalNs > elapsedTimeNs - mLastPullTimeNs) { mMinPullIntervalNs = elapsedTimeNs - mLastPullTimeNs; StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, mMinPullIntervalNs / NS_PER_SEC); } mCachedData.clear(); mLastPullTimeSec = curTime; mLastPullTimeNs = elapsedTimeNs; bool ret = PullInternal(&mCachedData); for (const shared_ptr<LogEvent>& data : mCachedData) { data->setElapsedTimestampNs(elapsedTimeNs); data->setLogdWallClockTimestampNs(wallClockTimeNs); } if (ret) { mergeIsolatedUidsToHostUid(mCachedData, mUidMap, mTagId); (*data) = mCachedData; Loading @@ -70,12 +75,12 @@ int StatsPuller::clearCache() { lock_guard<std::mutex> lock(mLock); int ret = mCachedData.size(); mCachedData.clear(); mLastPullTimeSec = 0; mLastPullTimeNs = 0; return ret; } int StatsPuller::ClearCacheIfNecessary(long timestampSec) { if (timestampSec - mLastPullTimeSec > mCoolDownSec) { int StatsPuller::ClearCacheIfNecessary(int64_t timestampNs) { if (timestampNs - mLastPullTimeNs > mCoolDownNs) { return clearCache(); } else { return 0; Loading
cmds/statsd/src/external/StatsPuller.h +5 −5 Original line number Diff line number Diff line Loading @@ -37,13 +37,13 @@ public: virtual ~StatsPuller() {} bool Pull(std::vector<std::shared_ptr<LogEvent>>* data); bool Pull(const int64_t timeNs, std::vector<std::shared_ptr<LogEvent>>* data); // Clear cache immediately int ForceClearCache(); // Clear cache if elapsed time is more than cooldown time int ClearCacheIfNecessary(long timestampSec); int ClearCacheIfNecessary(int64_t timestampNs); static void SetUidMap(const sp<UidMap>& uidMap); Loading @@ -59,9 +59,9 @@ private: // If a pull request comes before cooldown, a cached version from purevious pull // will be returned. // The actual value should be determined by individual pullers. long mCoolDownSec; int64_t mCoolDownNs; // For puller stats long mMinPullIntervalSec = LONG_MAX; int64_t mMinPullIntervalNs = LONG_MAX; virtual bool PullInternal(std::vector<std::shared_ptr<LogEvent>>* data) = 0; Loading @@ -69,7 +69,7 @@ private: // cached data will be returned. std::vector<std::shared_ptr<LogEvent>> mCachedData; long mLastPullTimeSec; int64_t mLastPullTimeNs; int clearCache(); Loading
cmds/statsd/src/external/StatsPullerManager.h +8 −13 Original line number Diff line number Diff line Loading @@ -26,10 +26,9 @@ class StatsPullerManager { public: virtual ~StatsPullerManager() {} virtual void RegisterReceiver(int tagId, wp <PullDataReceiver> receiver, long intervalMs) { mPullerManager.RegisterReceiver(tagId, receiver, intervalMs); virtual void RegisterReceiver(int tagId, wp<PullDataReceiver> receiver, int64_t nextPullTimeNs, int64_t intervalNs) { mPullerManager.RegisterReceiver(tagId, receiver, nextPullTimeNs, intervalNs); }; virtual void UnRegisterReceiver(int tagId, wp <PullDataReceiver> receiver) { Loading @@ -45,13 +44,9 @@ class StatsPullerManager { mPullerManager.OnAlarmFired(); } virtual bool Pull(const int tagId, vector<std::shared_ptr<LogEvent>>* data) { return mPullerManager.Pull(tagId, data); } void SetTimeBaseSec(const long timeBaseSec) { mPullerManager.SetTimeBaseSec(timeBaseSec); virtual bool Pull(const int tagId, const int64_t timesNs, vector<std::shared_ptr<LogEvent>>* data) { return mPullerManager.Pull(tagId, timesNs, data); } int ForceClearPullerCache() { Loading @@ -62,8 +57,8 @@ class StatsPullerManager { mPullerManager.SetStatsCompanionService(statsCompanionService); } int ClearPullerCacheIfNecessary(long timestampSec) { return mPullerManager.ClearPullerCacheIfNecessary(timestampSec); int ClearPullerCacheIfNecessary(int64_t timestampNs) { return mPullerManager.ClearPullerCacheIfNecessary(timestampNs); } private: Loading