diff --git a/cmds/statsd/Android.mk b/cmds/statsd/Android.mk index 8101b16700b4e..b0019ac90708b 100644 --- a/cmds/statsd/Android.mk +++ b/cmds/statsd/Android.mk @@ -41,6 +41,8 @@ statsd_common_src := \ src/external/ResourceHealthManagerPuller.cpp \ src/external/CpuTimePerUidPuller.cpp \ src/external/CpuTimePerUidFreqPuller.cpp \ + src/external/KernelUidCpuActiveTimeReader.cpp \ + src/external/KernelUidCpuClusterTimeReader.cpp \ src/external/StatsPullerManagerImpl.cpp \ src/logd/LogEvent.cpp \ src/logd/LogListener.cpp \ diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index f545bb0738e9d..4e4145439e25c 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -551,6 +551,12 @@ status_t StatsService::cmd_dump_memory_info(FILE* out) { return NO_ERROR; } +status_t StatsService::cmd_clear_puller_cache(FILE* out) { + mStatsPullerManager.ClearPullerCache(); + fprintf(out, "Puller cached data removed!\n"); + return NO_ERROR; +} + Status StatsService::informAllUidData(const vector& uid, const vector& version, const vector& app) { VLOG("StatsService::informAllUidData was called"); diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index be20893994f10..fd3ed1dbed722 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -197,6 +197,11 @@ private: */ status_t cmd_dump_memory_info(FILE* out); + /* + * Clear all puller cached data + */ + status_t cmd_clear_puller_cache(FILE* out); + /** * Update a configuration. */ diff --git a/cmds/statsd/src/external/StatsPuller.cpp b/cmds/statsd/src/external/StatsPuller.cpp index cadc535f2469e..da14434737afb 100644 --- a/cmds/statsd/src/external/StatsPuller.cpp +++ b/cmds/statsd/src/external/StatsPuller.cpp @@ -59,6 +59,11 @@ bool StatsPuller::Pull(std::vector>* data) { return ret; } +void StatsPuller::ClearCache() { + lock_guard lock(mLock); + mCachedData.clear(); +} + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/src/external/StatsPuller.h b/cmds/statsd/src/external/StatsPuller.h index 47cc9f01e0547..bc7c45f535d1f 100644 --- a/cmds/statsd/src/external/StatsPuller.h +++ b/cmds/statsd/src/external/StatsPuller.h @@ -38,6 +38,8 @@ public: bool Pull(std::vector>* data); + void ClearCache(); + protected: // The atom tag id this puller pulls const int mTagId; diff --git a/cmds/statsd/src/external/StatsPullerManager.h b/cmds/statsd/src/external/StatsPullerManager.h index 00a1475c0829c..4826d963a3ede 100644 --- a/cmds/statsd/src/external/StatsPullerManager.h +++ b/cmds/statsd/src/external/StatsPullerManager.h @@ -50,10 +50,14 @@ class StatsPullerManager { return mPullerManager.Pull(tagId, data); } - virtual void SetTimeBaseSec(const long timeBaseSec) { + void SetTimeBaseSec(const long timeBaseSec) { mPullerManager.SetTimeBaseSec(timeBaseSec); } + void ClearPullerCache() { + mPullerManager.ClearPullerCache(); + } + private: StatsPullerManagerImpl & mPullerManager = StatsPullerManagerImpl::GetInstance(); diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp index d8e8a41331cb8..71b0abe25d282 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp @@ -199,6 +199,12 @@ void StatsPullerManagerImpl::OnAlarmFired() { } } +void StatsPullerManagerImpl::ClearPullerCache() { + for (auto puller : mPullers) { + puller.second->ClearCache(); + } +} + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.h b/cmds/statsd/src/external/StatsPullerManagerImpl.h index 7c59f6659d1f1..fba3ade8c1bb6 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.h +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.h @@ -49,6 +49,8 @@ public: void SetTimeBaseSec(long timeBaseSec) {mTimeBaseSec = timeBaseSec;}; + void ClearPullerCache(); + private: StatsPullerManagerImpl();