Merge "Move condition check out of pullAndMatchEventsLocked" am: 62c5e2e964
Original change: https://android-review.googlesource.com/c/platform/packages/modules/StatsD/+/2154374
Change-Id: I60e99cd6d92ac831d41dd84cd914c8c7abf91447
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/statsd/src/metrics/GaugeMetricProducer.cpp b/statsd/src/metrics/GaugeMetricProducer.cpp
index 4df3e24..1627742 100644
--- a/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -204,7 +204,8 @@
// If this is a config update, we must have just forced a partial bucket. Pull if needed to get
// data for the new bucket.
- if (mIsActive && mIsPulled && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) {
+ if (mCondition == ConditionState::kTrue && mIsActive && mIsPulled &&
+ mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) {
pullAndMatchEventsLocked(mCurrentBucketStartTimeNs);
}
return true;
@@ -356,26 +357,25 @@
}
void GaugeMetricProducer::prepareFirstBucketLocked() {
- if (mIsActive && mIsPulled && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) {
+ if (mCondition == ConditionState::kTrue && mIsActive && mIsPulled &&
+ mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) {
pullAndMatchEventsLocked(mCurrentBucketStartTimeNs);
}
}
+// Only call if mCondition == ConditionState::kTrue && metric is active.
void GaugeMetricProducer::pullAndMatchEventsLocked(const int64_t timestampNs) {
bool triggerPuller = false;
switch(mSamplingType) {
// When the metric wants to do random sampling and there is already one gauge atom for the
// current bucket, do not do it again.
case GaugeMetric::RANDOM_ONE_SAMPLE: {
- triggerPuller = mCondition == ConditionState::kTrue && mCurrentSlicedBucket->empty();
+ triggerPuller = mCurrentSlicedBucket->empty();
break;
}
- case GaugeMetric::CONDITION_CHANGE_TO_TRUE: {
- triggerPuller = mCondition == ConditionState::kTrue;
- break;
- }
+ case GaugeMetric::CONDITION_CHANGE_TO_TRUE:
case GaugeMetric::FIRST_N_SAMPLES: {
- triggerPuller = mCondition == ConditionState::kTrue;
+ triggerPuller = true;
break;
}
default:
@@ -426,7 +426,7 @@
}
flushIfNeededLocked(eventTimeNs);
- if (mIsPulled && mTriggerAtomId == -1) {
+ if (conditionMet && mIsPulled && mTriggerAtomId == -1) {
pullAndMatchEventsLocked(eventTimeNs);
} // else: Push mode. No need to proactively pull the gauge data.
}
@@ -443,7 +443,7 @@
flushIfNeededLocked(eventTimeNs);
// If the condition is sliced, mCondition is true if any of the dimensions is true. And we will
// pull for every dimension.
- if (mIsPulled && mTriggerAtomId == -1) {
+ if (overallCondition && mIsPulled && mTriggerAtomId == -1) {
pullAndMatchEventsLocked(eventTimeNs);
} // else: Push mode. No need to proactively pull the gauge data.
}
@@ -528,6 +528,9 @@
flushIfNeededLocked(eventTimeNs);
if (mTriggerAtomId == event.GetTagId()) {
+ // Both Active state and Condition are true here.
+ // Active state being true is checked in onMatchedLogEventLocked.
+ // Condition being true is checked at the start of this method.
pullAndMatchEventsLocked(eventTimeNs);
return;
}
diff --git a/statsd/src/metrics/GaugeMetricProducer.h b/statsd/src/metrics/GaugeMetricProducer.h
index b6892af..8bd4a8c 100644
--- a/statsd/src/metrics/GaugeMetricProducer.h
+++ b/statsd/src/metrics/GaugeMetricProducer.h
@@ -140,6 +140,7 @@
void prepareFirstBucketLocked() override;
+ // Only call if mCondition == ConditionState::kTrue && metric is active.
void pullAndMatchEventsLocked(const int64_t timestampNs);
bool onConfigUpdatedLocked(