diff options
26 files changed, 56 insertions, 43 deletions
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index fcb5107c31fc..01a58d5a78d4 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -114,7 +114,7 @@ void StatsLogProcessor::OnConfigUpdated(const ConfigKey& key, const StatsdConfig } } -size_t StatsLogProcessor::GetMetricsSize(const ConfigKey& key) { +size_t StatsLogProcessor::GetMetricsSize(const ConfigKey& key) const { auto it = mMetricsManagers.find(key); if (it == mMetricsManagers.end()) { ALOGW("Config source %s does not exist", key.ToString().c_str()); diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index 510dc5145dfe..7db026719d5d 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -41,8 +41,8 @@ public: void OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config); void OnConfigRemoved(const ConfigKey& key); - size_t GetMetricsSize(const ConfigKey& key); - + size_t GetMetricsSize(const ConfigKey& key) const; + void onDumpReport(const ConfigKey& key, vector<uint8_t>* outData); void onAnomalyAlarmFired( const uint64_t timestampNs, diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 65b3da1cd258..aaf1868acbf1 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -667,7 +667,7 @@ void StatsService::OnLogEvent(const LogEvent& event) { mProcessor->OnLogEvent(event); } -Status StatsService::getData(const String16& key, vector <uint8_t>* output) { +Status StatsService::getData(const String16& key, vector<uint8_t>* output) { IPCThreadState* ipc = IPCThreadState::self(); ALOGD("StatsService::getData with Pid %i, Uid %i", ipc->getCallingPid(), ipc->getCallingUid()); diff --git a/cmds/statsd/src/condition/CombinationConditionTracker.cpp b/cmds/statsd/src/condition/CombinationConditionTracker.cpp index 41f5fcaf8dbc..dd84cf4b4b93 100644 --- a/cmds/statsd/src/condition/CombinationConditionTracker.cpp +++ b/cmds/statsd/src/condition/CombinationConditionTracker.cpp @@ -104,7 +104,8 @@ bool CombinationConditionTracker::init(const vector<Condition>& allConditionConf void CombinationConditionTracker::isConditionMet( const map<string, HashableDimensionKey>& conditionParameters, - const vector<sp<ConditionTracker>>& allConditions, vector<ConditionState>& conditionCache) { + const vector<sp<ConditionTracker>>& allConditions, + vector<ConditionState>& conditionCache) const { for (const int childIndex : mChildren) { if (conditionCache[childIndex] == ConditionState::kNotEvaluated) { allConditions[childIndex]->isConditionMet(conditionParameters, allConditions, diff --git a/cmds/statsd/src/condition/CombinationConditionTracker.h b/cmds/statsd/src/condition/CombinationConditionTracker.h index 3d2c6bb82e72..00dc6b7445b4 100644 --- a/cmds/statsd/src/condition/CombinationConditionTracker.h +++ b/cmds/statsd/src/condition/CombinationConditionTracker.h @@ -43,7 +43,7 @@ public: void isConditionMet(const std::map<std::string, HashableDimensionKey>& conditionParameters, const std::vector<sp<ConditionTracker>>& allConditions, - std::vector<ConditionState>& conditionCache) override; + std::vector<ConditionState>& conditionCache) const override; private: LogicalOperation mLogicalOperation; diff --git a/cmds/statsd/src/condition/ConditionTracker.h b/cmds/statsd/src/condition/ConditionTracker.h index 0ac7ef38e0aa..b85d8c1e8eca 100644 --- a/cmds/statsd/src/condition/ConditionTracker.h +++ b/cmds/statsd/src/condition/ConditionTracker.h @@ -72,7 +72,7 @@ public: std::vector<bool>& conditionChanged) = 0; // Return the current condition state. - virtual ConditionState isConditionMet() { + virtual ConditionState isConditionMet() const { return mNonSlicedConditionState; }; @@ -85,7 +85,7 @@ public: virtual void isConditionMet( const std::map<std::string, HashableDimensionKey>& conditionParameters, const std::vector<sp<ConditionTracker>>& allConditions, - std::vector<ConditionState>& conditionCache) = 0; + std::vector<ConditionState>& conditionCache) const = 0; // return the list of LogMatchingTracker index that this ConditionTracker uses. virtual const std::set<int>& getLogTrackerIndex() const { diff --git a/cmds/statsd/src/condition/SimpleConditionTracker.cpp b/cmds/statsd/src/condition/SimpleConditionTracker.cpp index 60060fe60fbd..ea5c64fd2b3a 100644 --- a/cmds/statsd/src/condition/SimpleConditionTracker.cpp +++ b/cmds/statsd/src/condition/SimpleConditionTracker.cpp @@ -236,17 +236,19 @@ void SimpleConditionTracker::evaluateCondition(const LogEvent& event, // if the condition result is sliced. metrics won't directly get value from the // cache, so just set any value other than kNotEvaluated. conditionCache[mIndex] = ConditionState::kUnknown; - } else if (mSlicedConditionState.find(DEFAULT_DIMENSION_KEY) == - mSlicedConditionState.end()) { - // condition not sliced, but we haven't seen the matched start or stop yet. so return - // initial value. - conditionCache[mIndex] = mInitialValue; } else { - // return the cached condition. - conditionCache[mIndex] = mSlicedConditionState[DEFAULT_DIMENSION_KEY] > 0 - ? ConditionState::kTrue - : ConditionState::kFalse; + const auto& itr = mSlicedConditionState.find(DEFAULT_DIMENSION_KEY); + if (itr == mSlicedConditionState.end()) { + // condition not sliced, but we haven't seen the matched start or stop yet. so + // return initial value. + conditionCache[mIndex] = mInitialValue; + } else { + // return the cached condition. + conditionCache[mIndex] = + itr->second > 0 ? ConditionState::kTrue : ConditionState::kFalse; + } } + return; } @@ -257,7 +259,8 @@ void SimpleConditionTracker::evaluateCondition(const LogEvent& event, void SimpleConditionTracker::isConditionMet( const map<string, HashableDimensionKey>& conditionParameters, - const vector<sp<ConditionTracker>>& allConditions, vector<ConditionState>& conditionCache) { + const vector<sp<ConditionTracker>>& allConditions, + vector<ConditionState>& conditionCache) const { const auto pair = conditionParameters.find(mName); HashableDimensionKey key = (pair == conditionParameters.end()) ? DEFAULT_DIMENSION_KEY : pair->second; diff --git a/cmds/statsd/src/condition/SimpleConditionTracker.h b/cmds/statsd/src/condition/SimpleConditionTracker.h index 2eda0b1af8b0..c287d8f34e8f 100644 --- a/cmds/statsd/src/condition/SimpleConditionTracker.h +++ b/cmds/statsd/src/condition/SimpleConditionTracker.h @@ -47,7 +47,7 @@ public: void isConditionMet(const std::map<std::string, HashableDimensionKey>& conditionParameters, const std::vector<sp<ConditionTracker>>& allConditions, - std::vector<ConditionState>& conditionCache) override; + std::vector<ConditionState>& conditionCache) const override; private: // The index of the LogEventMatcher which defines the start. diff --git a/cmds/statsd/src/config/ConfigManager.cpp b/cmds/statsd/src/config/ConfigManager.cpp index 0c9252e2095f..ba59d6844798 100644 --- a/cmds/statsd/src/config/ConfigManager.cpp +++ b/cmds/statsd/src/config/ConfigManager.cpp @@ -132,7 +132,7 @@ void ConfigManager::RemoveConfigs(int uid) { } } -vector<ConfigKey> ConfigManager::GetAllConfigKeys() { +vector<ConfigKey> ConfigManager::GetAllConfigKeys() const { vector<ConfigKey> ret; for (auto it = mConfigs.cbegin(); it != mConfigs.cend(); ++it) { ret.push_back(it->first); @@ -140,7 +140,7 @@ vector<ConfigKey> ConfigManager::GetAllConfigKeys() { return ret; } -const pair<string, string> ConfigManager::GetConfigReceiver(const ConfigKey& key) { +const pair<string, string> ConfigManager::GetConfigReceiver(const ConfigKey& key) const { auto it = mConfigReceivers.find(key); if (it == mConfigReceivers.end()) { return pair<string,string>(); diff --git a/cmds/statsd/src/config/ConfigManager.h b/cmds/statsd/src/config/ConfigManager.h index 01d7fb969230..3c0c5996864d 100644 --- a/cmds/statsd/src/config/ConfigManager.h +++ b/cmds/statsd/src/config/ConfigManager.h @@ -70,12 +70,12 @@ public: /** * Returns the package name and class name representing the broadcast receiver for this config. */ - const pair<string, string> GetConfigReceiver(const ConfigKey& key); + const pair<string, string> GetConfigReceiver(const ConfigKey& key) const; /** * Returns all config keys registered. */ - vector<ConfigKey> GetAllConfigKeys(); + vector<ConfigKey> GetAllConfigKeys() const; /** * Erase any broadcast receiver associated with this config key. diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp index 07d0b3e2aac5..3ffcd77bea44 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp @@ -88,11 +88,11 @@ StatsPullerManagerImpl& StatsPullerManagerImpl::GetInstance() { return instance; } -bool StatsPullerManagerImpl::PullerForMatcherExists(int tagId) { +bool StatsPullerManagerImpl::PullerForMatcherExists(int tagId) const { return mPullers.find(tagId) != mPullers.end(); } -long StatsPullerManagerImpl::get_pull_start_time_ms() { +long StatsPullerManagerImpl::get_pull_start_time_ms() const { // TODO: limit and align pull intervals to 10min boundaries if this turns out to be a problem return time(nullptr) * 1000; } diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.h b/cmds/statsd/src/external/StatsPullerManagerImpl.h index 0b9f21e3217c..306cc32c5f16 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.h +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.h @@ -41,7 +41,7 @@ public: void UnRegisterReceiver(int tagId, wp<PullDataReceiver> receiver); // Verify if we know how to pull for this matcher - bool PullerForMatcherExists(int tagId); + bool PullerForMatcherExists(int tagId) const; void OnAlarmFired(); @@ -77,7 +77,7 @@ private: // request time. const long mPullStartTimeMs; - long get_pull_start_time_ms(); + long get_pull_start_time_ms() const; LogEvent parse_pulled_data(String16 data); }; diff --git a/cmds/statsd/src/metrics/CountMetricProducer.cpp b/cmds/statsd/src/metrics/CountMetricProducer.cpp index a5ce38915574..149b9c16fd88 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.cpp +++ b/cmds/statsd/src/metrics/CountMetricProducer.cpp @@ -247,7 +247,7 @@ void CountMetricProducer::flushIfNeeded(const uint64_t eventTimeNs) { // Rough estimate of CountMetricProducer buffer stored. This number will be // greater than actual data size as it contains each dimension of // CountMetricData is duplicated. -size_t CountMetricProducer::byteSize() { +size_t CountMetricProducer::byteSize() const { size_t totalSize = 0; for (const auto& pair : mPastBuckets) { totalSize += pair.second.size() * kBucketSize; diff --git a/cmds/statsd/src/metrics/CountMetricProducer.h b/cmds/statsd/src/metrics/CountMetricProducer.h index b3f8ee37379e..293e5b971fa5 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.h +++ b/cmds/statsd/src/metrics/CountMetricProducer.h @@ -58,7 +58,7 @@ public: void onSlicedConditionMayChange(const uint64_t eventTime) override; - size_t byteSize() override; + size_t byteSize() const override; // TODO: Implement this later. virtual void notifyAppUpgrade(const string& apk, const int uid, const int version) override{}; diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp index a32e0cb8b274..0ee7dcdf3c2e 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp +++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp @@ -264,12 +264,12 @@ void DurationMetricProducer::onMatchedLogEventInternal( } } -size_t DurationMetricProducer::byteSize() { - size_t totalSize = 0; - for (const auto& pair : mPastBuckets) { - totalSize += pair.second.size() * kBucketSize; - } - return totalSize; +size_t DurationMetricProducer::byteSize() const { + size_t totalSize = 0; + for (const auto& pair : mPastBuckets) { + totalSize += pair.second.size() * kBucketSize; + } + return totalSize; } } // namespace statsd diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.h b/cmds/statsd/src/metrics/DurationMetricProducer.h index 4c8dbcb83a6b..ebd5e8d36412 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.h +++ b/cmds/statsd/src/metrics/DurationMetricProducer.h @@ -55,7 +55,7 @@ public: void onSlicedConditionMayChange(const uint64_t eventTime) override; - size_t byteSize() override; + size_t byteSize() const override; // TODO: Implement this later. virtual void notifyAppUpgrade(const string& apk, const int uid, const int version) override{}; diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp index 9a94a0efa850..567b4c77bf7b 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.cpp +++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp @@ -122,7 +122,7 @@ void EventMetricProducer::onMatchedLogEventInternal( mProto->end(wrapperToken); } -size_t EventMetricProducer::byteSize() { +size_t EventMetricProducer::byteSize() const { return mProto->bytesWritten(); } diff --git a/cmds/statsd/src/metrics/EventMetricProducer.h b/cmds/statsd/src/metrics/EventMetricProducer.h index 0c453cdac99b..5afcebd29e58 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.h +++ b/cmds/statsd/src/metrics/EventMetricProducer.h @@ -55,7 +55,7 @@ public: void onSlicedConditionMayChange(const uint64_t eventTime) override; - size_t byteSize() override; + size_t byteSize() const override; // TODO: Implement this later. virtual void notifyAppUpgrade(const string& apk, const int uid, const int version) override{}; diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index d7b72965ae1e..be030d856aee 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -295,7 +295,7 @@ void GaugeMetricProducer::flushIfNeeded(const uint64_t eventTimeNs) { (long long)mCurrentBucketStartTimeNs); } -size_t GaugeMetricProducer::byteSize() { +size_t GaugeMetricProducer::byteSize() const { size_t totalSize = 0; for (const auto& pair : mPastBuckets) { totalSize += pair.second.size() * kBucketSize; diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h index 930afb21543f..4b7654b4ca6b 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.h +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h @@ -65,7 +65,7 @@ public: // TODO: Pass a timestamp as a parameter in onDumpReport. std::unique_ptr<std::vector<uint8_t>> onDumpReport() override; - size_t byteSize() override; + size_t byteSize() const override; // TODO: Implement this later. virtual void notifyAppUpgrade(const string& apk, const int uid, const int version) override{}; diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h index 0f9374429930..ddccf9a1970b 100644 --- a/cmds/statsd/src/metrics/MetricProducer.h +++ b/cmds/statsd/src/metrics/MetricProducer.h @@ -72,7 +72,7 @@ public: // Returns the memory in bytes currently used to store this metric's data. Does not change // state. - virtual size_t byteSize() = 0; + virtual size_t byteSize() const = 0; void addAnomalyTracker(sp<AnomalyTracker> tracker) { mAnomalyTrackers.push_back(tracker); diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 0dbdd2981307..cc02c69d4405 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -345,7 +345,7 @@ void ValueMetricProducer::flushIfNeeded(const uint64_t eventTimeNs) { (long long)mCurrentBucketStartTimeNs); } -size_t ValueMetricProducer::byteSize() { +size_t ValueMetricProducer::byteSize() const { size_t totalSize = 0; for (const auto& pair : mPastBuckets) { totalSize += pair.second.size() * kBucketSize; diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index 2b0b0ada2a8f..24c76f26dcaa 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -56,7 +56,7 @@ public: void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) override; - size_t byteSize() override; + size_t byteSize() const override; // TODO: Implement this later. virtual void notifyAppUpgrade(const string& apk, const int uid, const int version) override{}; diff --git a/cmds/statsd/src/metrics/duration_helper/DurationTracker.h b/cmds/statsd/src/metrics/duration_helper/DurationTracker.h index c91ea0f845bd..7ce7f02e06bb 100644 --- a/cmds/statsd/src/metrics/duration_helper/DurationTracker.h +++ b/cmds/statsd/src/metrics/duration_helper/DurationTracker.h @@ -73,14 +73,18 @@ public: mDuration(0), mCurrentBucketNum(0), mAnomalyTrackers(anomalyTrackers){}; + virtual ~DurationTracker(){}; + virtual void noteStart(const HashableDimensionKey& key, bool condition, const uint64_t eventTime, const ConditionKey& conditionKey) = 0; virtual void noteStop(const HashableDimensionKey& key, const uint64_t eventTime, const bool stopAll) = 0; virtual void noteStopAll(const uint64_t eventTime) = 0; + virtual void onSlicedConditionMayChange(const uint64_t timestamp) = 0; virtual void onConditionChanged(bool condition, const uint64_t timestamp) = 0; + // Flush stale buckets if needed, and return true if the tracker has no on-going duration // events, so that the owner can safely remove the tracker. virtual bool flushIfNeeded(uint64_t timestampNs) = 0; diff --git a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h index ca1021041e34..0f79ffed4ec2 100644 --- a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h +++ b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h @@ -38,7 +38,9 @@ public: void noteStop(const HashableDimensionKey& key, const uint64_t eventTime, const bool stopAll) override; void noteStopAll(const uint64_t eventTime) override; + bool flushIfNeeded(uint64_t timestampNs) override; + void onSlicedConditionMayChange(const uint64_t timestamp) override; void onConditionChanged(bool condition, const uint64_t timestamp) override; diff --git a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h index 6f921139b76f..ef32fdb510d1 100644 --- a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h +++ b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h @@ -32,13 +32,16 @@ public: uint64_t bucketSizeNs, const std::vector<sp<AnomalyTracker>>& anomalyTrackers, std::vector<DurationBucket>& bucket); + void noteStart(const HashableDimensionKey& key, bool condition, const uint64_t eventTime, const ConditionKey& conditionKey) override; void noteStop(const HashableDimensionKey& key, const uint64_t eventTime, const bool stopAll) override; void noteStopAll(const uint64_t eventTime) override; + void onSlicedConditionMayChange(const uint64_t timestamp) override; void onConditionChanged(bool condition, const uint64_t timestamp) override; + bool flushIfNeeded(uint64_t timestampNs) override; int64_t predictAnomalyTimestampNs(const AnomalyTracker& anomalyTracker, |