Merge "Change SimplePredicate InitialValue default to UNKNOWN" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d7b08c7690
@@ -307,9 +307,6 @@ private:
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsWithActivation);
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsNoCondition);
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestConditionChangeToTrueSamplePulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation);
|
||||
|
||||
FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket);
|
||||
FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets);
|
||||
@@ -328,6 +325,7 @@ private:
|
||||
FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation);
|
||||
FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations);
|
||||
|
||||
FRIEND_TEST(CountMetricE2eTest, TestInitialConditionChanges);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedState);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedStateWithMap);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestMultipleSlicedStates);
|
||||
@@ -345,6 +343,10 @@ private:
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestSlicedStatePrimaryFieldsNotSubsetDimInWhat);
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset);
|
||||
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitialConditionChanges);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithDimensions);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithIncorrectDimensions);
|
||||
|
||||
@@ -459,6 +459,7 @@ protected:
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedStateWithMap);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestMultipleSlicedStates);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedStateWithPrimaryFields);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestInitialConditionChanges);
|
||||
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestOneBucket);
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestTwoBuckets);
|
||||
@@ -488,6 +489,7 @@ protected:
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithDimensions);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithIncorrectDimensions);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitialConditionChanges);
|
||||
};
|
||||
|
||||
} // namespace statsd
|
||||
|
||||
@@ -292,9 +292,6 @@ private:
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsWithActivation);
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsNoCondition);
|
||||
FRIEND_TEST(GaugeMetricE2eTest, TestConditionChangeToTrueSamplePulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation);
|
||||
|
||||
FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket);
|
||||
FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets);
|
||||
@@ -322,6 +319,7 @@ private:
|
||||
TestActivationOnBootMultipleActivationsDifferentActivationTypes);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart);
|
||||
|
||||
FRIEND_TEST(CountMetricE2eTest, TestInitialConditionChanges);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedState);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestSlicedStateWithMap);
|
||||
FRIEND_TEST(CountMetricE2eTest, TestMultipleSlicedStates);
|
||||
@@ -339,6 +337,10 @@ private:
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSuperset);
|
||||
FRIEND_TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset);
|
||||
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitialConditionChanges);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithDimensions);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestInitWithSlicedState_WithIncorrectDimensions);
|
||||
|
||||
@@ -131,7 +131,7 @@ message SimplePredicate {
|
||||
UNKNOWN = 0;
|
||||
FALSE = 1;
|
||||
}
|
||||
optional InitialValue initial_value = 5 [default = FALSE];
|
||||
optional InitialValue initial_value = 5 [default = UNKNOWN];
|
||||
|
||||
optional FieldMatcher dimensions = 6;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,92 @@ namespace statsd {
|
||||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
/**
|
||||
* Tests the initial condition and condition after the first log events for
|
||||
* count metrics with either a combination condition or simple condition.
|
||||
*
|
||||
* Metrics should be initialized with condition kUnknown (given that the
|
||||
* predicate is using the default InitialValue of UNKNOWN). The condition should
|
||||
* be updated to either kFalse or kTrue if a condition event is logged for all
|
||||
* children conditions.
|
||||
*/
|
||||
TEST(CountMetricE2eTest, TestInitialConditionChanges) {
|
||||
// Initialize config.
|
||||
StatsdConfig config;
|
||||
config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
|
||||
config.add_default_pull_packages("AID_ROOT"); // Fake puller is registered with root.
|
||||
|
||||
auto syncStartMatcher = CreateSyncStartAtomMatcher();
|
||||
*config.add_atom_matcher() = syncStartMatcher;
|
||||
*config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
|
||||
*config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher();
|
||||
*config.add_atom_matcher() = CreateBatteryStateNoneMatcher();
|
||||
*config.add_atom_matcher() = CreateBatteryStateUsbMatcher();
|
||||
|
||||
auto screenOnPredicate = CreateScreenIsOnPredicate();
|
||||
*config.add_predicate() = screenOnPredicate;
|
||||
|
||||
auto deviceUnpluggedPredicate = CreateDeviceUnpluggedPredicate();
|
||||
*config.add_predicate() = deviceUnpluggedPredicate;
|
||||
|
||||
auto screenOnOnBatteryPredicate = config.add_predicate();
|
||||
screenOnOnBatteryPredicate->set_id(StringToId("screenOnOnBatteryPredicate"));
|
||||
screenOnOnBatteryPredicate->mutable_combination()->set_operation(LogicalOperation::AND);
|
||||
addPredicateToPredicateCombination(screenOnPredicate, screenOnOnBatteryPredicate);
|
||||
addPredicateToPredicateCombination(deviceUnpluggedPredicate, screenOnOnBatteryPredicate);
|
||||
|
||||
// CountSyncStartWhileScreenOnOnBattery (CombinationCondition)
|
||||
CountMetric* countMetric1 = config.add_count_metric();
|
||||
countMetric1->set_id(StringToId("CountSyncStartWhileScreenOnOnBattery"));
|
||||
countMetric1->set_what(syncStartMatcher.id());
|
||||
countMetric1->set_condition(screenOnOnBatteryPredicate->id());
|
||||
countMetric1->set_bucket(FIVE_MINUTES);
|
||||
|
||||
// CountSyncStartWhileOnBattery (SimpleCondition)
|
||||
CountMetric* countMetric2 = config.add_count_metric();
|
||||
countMetric2->set_id(StringToId("CountSyncStartWhileOnBatterySliceScreen"));
|
||||
countMetric2->set_what(syncStartMatcher.id());
|
||||
countMetric2->set_condition(deviceUnpluggedPredicate.id());
|
||||
countMetric2->set_bucket(FIVE_MINUTES);
|
||||
|
||||
const uint64_t bucketStartTimeNs = 10000000000; // 0:10
|
||||
const uint64_t bucketSizeNs =
|
||||
TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000LL;
|
||||
int uid = 12345;
|
||||
int64_t cfgId = 98765;
|
||||
ConfigKey cfgKey(uid, cfgId);
|
||||
auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
|
||||
|
||||
EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
|
||||
sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
|
||||
EXPECT_TRUE(metricsManager->isConfigValid());
|
||||
EXPECT_EQ(2, metricsManager->mAllMetricProducers.size());
|
||||
|
||||
sp<MetricProducer> metricProducer1 = metricsManager->mAllMetricProducers[0];
|
||||
sp<MetricProducer> metricProducer2 = metricsManager->mAllMetricProducers[1];
|
||||
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer2->mCondition);
|
||||
|
||||
auto screenOnEvent =
|
||||
CreateScreenStateChangedEvent(bucketStartTimeNs + 30, android::view::DISPLAY_STATE_ON);
|
||||
processor->OnLogEvent(screenOnEvent.get());
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer2->mCondition);
|
||||
|
||||
auto pluggedUsbEvent = CreateBatteryStateChangedEvent(
|
||||
bucketStartTimeNs + 50, BatteryPluggedStateEnum::BATTERY_PLUGGED_USB);
|
||||
processor->OnLogEvent(pluggedUsbEvent.get());
|
||||
EXPECT_EQ(ConditionState::kFalse, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kFalse, metricProducer2->mCondition);
|
||||
|
||||
auto pluggedNoneEvent = CreateBatteryStateChangedEvent(
|
||||
bucketStartTimeNs + 70, BatteryPluggedStateEnum::BATTERY_PLUGGED_NONE);
|
||||
processor->OnLogEvent(pluggedNoneEvent.get());
|
||||
EXPECT_EQ(ConditionState::kTrue, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kTrue, metricProducer2->mCondition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a count metric that has one slice_by_state with no primary fields.
|
||||
*
|
||||
@@ -85,7 +171,7 @@ TEST(CountMetricE2eTest, TestSlicedState) {
|
||||
x x x x x x (syncStartEvents)
|
||||
| | (ScreenIsOnEvent)
|
||||
| | (ScreenIsOffEvent)
|
||||
| (ScreenUnknownEvent)
|
||||
| (ScreenDozeEvent)
|
||||
*/
|
||||
// Initialize log events - first bucket.
|
||||
std::vector<int> attributionUids1 = {123};
|
||||
@@ -243,9 +329,8 @@ TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
|
||||
|-----------------------------|-----------------------------|--
|
||||
x x x x x x x x x (syncStartEvents)
|
||||
-----------------------------------------------------------SCREEN_OFF events
|
||||
| (ScreenStateUnknownEvent = 0)
|
||||
| | (ScreenStateOffEvent = 1)
|
||||
| (ScreenStateDozeEvent = 3)
|
||||
| | (ScreenStateDozeEvent = 3)
|
||||
| (ScreenStateDozeSuspendEvent =
|
||||
4)
|
||||
-----------------------------------------------------------SCREEN_ON events
|
||||
@@ -262,7 +347,7 @@ TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
|
||||
attributionTags1, "sync_name")); // 0:30
|
||||
events.push_back(CreateScreenStateChangedEvent(
|
||||
bucketStartTimeNs + 30 * NS_PER_SEC,
|
||||
android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN)); // 0:40
|
||||
android::view::DisplayStateEnum::DISPLAY_STATE_DOZE)); // 0:40
|
||||
events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 60 * NS_PER_SEC, attributionUids1,
|
||||
attributionTags1, "sync_name")); // 1:10
|
||||
events.push_back(CreateScreenStateChangedEvent(
|
||||
@@ -625,9 +710,8 @@ TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
|
||||
|------------------------|------------------------|--
|
||||
1 1 1 1 1 2 1 1 2 (AppCrashEvents)
|
||||
---------------------------------------------------SCREEN_OFF events
|
||||
| (ScreenUnknownEvent = 0)
|
||||
| | (ScreenOffEvent = 1)
|
||||
| (ScreenDozeEvent = 3)
|
||||
| | (ScreenDozeEvent = 3)
|
||||
---------------------------------------------------SCREEN_ON events
|
||||
| | (ScreenOnEvent = 2)
|
||||
| (ScreenOnSuspendEvent = 6)
|
||||
@@ -660,7 +744,7 @@ TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
|
||||
CreateAppCrashOccurredEvent(bucketStartTimeNs + 20 * NS_PER_SEC, 1 /*uid*/)); // 0:30
|
||||
events.push_back(CreateScreenStateChangedEvent(
|
||||
bucketStartTimeNs + 30 * NS_PER_SEC,
|
||||
android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN)); // 0:40
|
||||
android::view::DisplayStateEnum::DISPLAY_STATE_DOZE)); // 0:40
|
||||
events.push_back(
|
||||
CreateAppCrashOccurredEvent(bucketStartTimeNs + 60 * NS_PER_SEC, 1 /*uid*/)); // 1:10
|
||||
events.push_back(CreateUidProcessStateChangedEvent(
|
||||
|
||||
@@ -63,8 +63,143 @@ StatsdConfig CreateStatsdConfig(bool useCondition = true) {
|
||||
return config;
|
||||
}
|
||||
|
||||
StatsdConfig CreateStatsdConfigWithStates() {
|
||||
StatsdConfig config;
|
||||
config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
|
||||
config.add_default_pull_packages("AID_ROOT"); // Fake puller is registered with root.
|
||||
|
||||
auto pulledAtomMatcher = CreateSimpleAtomMatcher("TestMatcher", util::SUBSYSTEM_SLEEP_STATE);
|
||||
*config.add_atom_matcher() = pulledAtomMatcher;
|
||||
*config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
|
||||
*config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher();
|
||||
*config.add_atom_matcher() = CreateBatteryStateNoneMatcher();
|
||||
*config.add_atom_matcher() = CreateBatteryStateUsbMatcher();
|
||||
|
||||
auto screenOnPredicate = CreateScreenIsOnPredicate();
|
||||
*config.add_predicate() = screenOnPredicate;
|
||||
|
||||
auto screenOffPredicate = CreateScreenIsOffPredicate();
|
||||
*config.add_predicate() = screenOffPredicate;
|
||||
|
||||
auto deviceUnpluggedPredicate = CreateDeviceUnpluggedPredicate();
|
||||
*config.add_predicate() = deviceUnpluggedPredicate;
|
||||
|
||||
auto screenOnOnBatteryPredicate = config.add_predicate();
|
||||
screenOnOnBatteryPredicate->set_id(StringToId("screenOnOnBatteryPredicate"));
|
||||
screenOnOnBatteryPredicate->mutable_combination()->set_operation(LogicalOperation::AND);
|
||||
addPredicateToPredicateCombination(screenOnPredicate, screenOnOnBatteryPredicate);
|
||||
addPredicateToPredicateCombination(deviceUnpluggedPredicate, screenOnOnBatteryPredicate);
|
||||
|
||||
auto screenOffOnBatteryPredicate = config.add_predicate();
|
||||
screenOffOnBatteryPredicate->set_id(StringToId("ScreenOffOnBattery"));
|
||||
screenOffOnBatteryPredicate->mutable_combination()->set_operation(LogicalOperation::AND);
|
||||
addPredicateToPredicateCombination(screenOffPredicate, screenOffOnBatteryPredicate);
|
||||
addPredicateToPredicateCombination(deviceUnpluggedPredicate, screenOffOnBatteryPredicate);
|
||||
|
||||
const State screenState =
|
||||
CreateScreenStateWithSimpleOnOffMap(/*screen on id=*/321, /*screen off id=*/123);
|
||||
*config.add_state() = screenState;
|
||||
|
||||
// ValueMetricSubsystemSleepWhileScreenOnOnBattery
|
||||
auto valueMetric1 = config.add_value_metric();
|
||||
valueMetric1->set_id(metricId);
|
||||
valueMetric1->set_what(pulledAtomMatcher.id());
|
||||
valueMetric1->set_condition(screenOnOnBatteryPredicate->id());
|
||||
*valueMetric1->mutable_value_field() =
|
||||
CreateDimensions(util::SUBSYSTEM_SLEEP_STATE, {4 /* time sleeping field */});
|
||||
valueMetric1->set_bucket(FIVE_MINUTES);
|
||||
valueMetric1->set_use_absolute_value_on_reset(true);
|
||||
valueMetric1->set_skip_zero_diff_output(false);
|
||||
valueMetric1->set_max_pull_delay_sec(INT_MAX);
|
||||
|
||||
// ValueMetricSubsystemSleepWhileScreenOffOnBattery
|
||||
ValueMetric* valueMetric2 = config.add_value_metric();
|
||||
valueMetric2->set_id(StringToId("ValueMetricSubsystemSleepWhileScreenOffOnBattery"));
|
||||
valueMetric2->set_what(pulledAtomMatcher.id());
|
||||
valueMetric2->set_condition(screenOffOnBatteryPredicate->id());
|
||||
*valueMetric2->mutable_value_field() =
|
||||
CreateDimensions(util::SUBSYSTEM_SLEEP_STATE, {4 /* time sleeping field */});
|
||||
valueMetric2->set_bucket(FIVE_MINUTES);
|
||||
valueMetric2->set_use_absolute_value_on_reset(true);
|
||||
valueMetric2->set_skip_zero_diff_output(false);
|
||||
valueMetric2->set_max_pull_delay_sec(INT_MAX);
|
||||
|
||||
// ValueMetricSubsystemSleepWhileOnBatterySliceScreen
|
||||
ValueMetric* valueMetric3 = config.add_value_metric();
|
||||
valueMetric3->set_id(StringToId("ValueMetricSubsystemSleepWhileOnBatterySliceScreen"));
|
||||
valueMetric3->set_what(pulledAtomMatcher.id());
|
||||
valueMetric3->set_condition(deviceUnpluggedPredicate.id());
|
||||
*valueMetric3->mutable_value_field() =
|
||||
CreateDimensions(util::SUBSYSTEM_SLEEP_STATE, {4 /* time sleeping field */});
|
||||
valueMetric3->add_slice_by_state(screenState.id());
|
||||
valueMetric3->set_bucket(FIVE_MINUTES);
|
||||
valueMetric3->set_use_absolute_value_on_reset(true);
|
||||
valueMetric3->set_skip_zero_diff_output(false);
|
||||
valueMetric3->set_max_pull_delay_sec(INT_MAX);
|
||||
return config;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/**
|
||||
* Tests the initial condition and condition after the first log events for
|
||||
* value metrics with either a combination condition or simple condition.
|
||||
*
|
||||
* Metrics should be initialized with condition kUnknown (given that the
|
||||
* predicate is using the default InitialValue of UNKNOWN). The condition should
|
||||
* be updated to either kFalse or kTrue if a condition event is logged for all
|
||||
* children conditions.
|
||||
*/
|
||||
TEST(ValueMetricE2eTest, TestInitialConditionChanges) {
|
||||
StatsdConfig config = CreateStatsdConfigWithStates();
|
||||
int64_t baseTimeNs = getElapsedRealtimeNs();
|
||||
int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs;
|
||||
int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(config.value_metric(0).bucket()) * 1000000;
|
||||
|
||||
ConfigKey cfgKey;
|
||||
int32_t tagId = util::SUBSYSTEM_SLEEP_STATE;
|
||||
auto processor =
|
||||
CreateStatsLogProcessor(baseTimeNs, configAddedTimeNs, config, cfgKey,
|
||||
SharedRefBase::make<FakeSubsystemSleepCallback>(), tagId);
|
||||
|
||||
EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
|
||||
sp<MetricsManager> metricsManager = processor->mMetricsManagers.begin()->second;
|
||||
EXPECT_TRUE(metricsManager->isConfigValid());
|
||||
EXPECT_EQ(3, metricsManager->mAllMetricProducers.size());
|
||||
|
||||
// Combination condition metric - screen on and device unplugged
|
||||
sp<MetricProducer> metricProducer1 = metricsManager->mAllMetricProducers[0];
|
||||
// Simple condition metric - device unplugged
|
||||
sp<MetricProducer> metricProducer2 = metricsManager->mAllMetricProducers[2];
|
||||
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer2->mCondition);
|
||||
|
||||
auto screenOnEvent =
|
||||
CreateScreenStateChangedEvent(configAddedTimeNs + 30, android::view::DISPLAY_STATE_ON);
|
||||
processor->OnLogEvent(screenOnEvent.get());
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer2->mCondition);
|
||||
|
||||
auto screenOffEvent =
|
||||
CreateScreenStateChangedEvent(configAddedTimeNs + 40, android::view::DISPLAY_STATE_OFF);
|
||||
processor->OnLogEvent(screenOffEvent.get());
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kUnknown, metricProducer2->mCondition);
|
||||
|
||||
auto pluggedUsbEvent = CreateBatteryStateChangedEvent(
|
||||
configAddedTimeNs + 50, BatteryPluggedStateEnum::BATTERY_PLUGGED_USB);
|
||||
processor->OnLogEvent(pluggedUsbEvent.get());
|
||||
EXPECT_EQ(ConditionState::kFalse, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kFalse, metricProducer2->mCondition);
|
||||
|
||||
auto pluggedNoneEvent = CreateBatteryStateChangedEvent(
|
||||
configAddedTimeNs + 70, BatteryPluggedStateEnum::BATTERY_PLUGGED_NONE);
|
||||
processor->OnLogEvent(pluggedNoneEvent.get());
|
||||
EXPECT_EQ(ConditionState::kFalse, metricProducer1->mCondition);
|
||||
EXPECT_EQ(ConditionState::kTrue, metricProducer2->mCondition);
|
||||
}
|
||||
|
||||
TEST(ValueMetricE2eTest, TestPulledEvents) {
|
||||
auto config = CreateStatsdConfig();
|
||||
int64_t baseTimeNs = getElapsedRealtimeNs();
|
||||
|
||||
@@ -169,7 +169,6 @@ AtomMatcher CreateScreenStateChangedAtomMatcher(
|
||||
return atom_matcher;
|
||||
}
|
||||
|
||||
|
||||
AtomMatcher CreateScreenTurnedOnAtomMatcher() {
|
||||
return CreateScreenStateChangedAtomMatcher("ScreenTurnedOn",
|
||||
android::view::DisplayStateEnum::DISPLAY_STATE_ON);
|
||||
@@ -335,22 +334,46 @@ State CreateScreenStateWithOnOffMap(int64_t screenOnId, int64_t screenOffId) {
|
||||
return state;
|
||||
}
|
||||
|
||||
State CreateScreenStateWithSimpleOnOffMap(int64_t screenOnId, int64_t screenOffId) {
|
||||
State state;
|
||||
state.set_id(StringToId("ScreenStateSimpleOnOff"));
|
||||
state.set_atom_id(util::SCREEN_STATE_CHANGED);
|
||||
|
||||
auto map = CreateScreenStateSimpleOnOffMap(screenOnId, screenOffId);
|
||||
*state.mutable_map() = map;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
StateMap_StateGroup CreateScreenStateOnGroup(int64_t screenOnId) {
|
||||
StateMap_StateGroup group;
|
||||
group.set_group_id(screenOnId);
|
||||
group.add_value(2);
|
||||
group.add_value(5);
|
||||
group.add_value(6);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_VR);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_ON_SUSPEND);
|
||||
return group;
|
||||
}
|
||||
|
||||
StateMap_StateGroup CreateScreenStateOffGroup(int64_t screenOffId) {
|
||||
StateMap_StateGroup group;
|
||||
group.set_group_id(screenOffId);
|
||||
group.add_value(0);
|
||||
group.add_value(1);
|
||||
group.add_value(3);
|
||||
group.add_value(4);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_OFF);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_DOZE_SUSPEND);
|
||||
return group;
|
||||
}
|
||||
|
||||
StateMap_StateGroup CreateScreenStateSimpleOnGroup(int64_t screenOnId) {
|
||||
StateMap_StateGroup group;
|
||||
group.set_group_id(screenOnId);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_ON);
|
||||
return group;
|
||||
}
|
||||
|
||||
StateMap_StateGroup CreateScreenStateSimpleOffGroup(int64_t screenOffId) {
|
||||
StateMap_StateGroup group;
|
||||
group.set_group_id(screenOffId);
|
||||
group.add_value(android::view::DisplayStateEnum::DISPLAY_STATE_OFF);
|
||||
return group;
|
||||
}
|
||||
|
||||
@@ -361,6 +384,13 @@ StateMap CreateScreenStateOnOffMap(int64_t screenOnId, int64_t screenOffId) {
|
||||
return map;
|
||||
}
|
||||
|
||||
StateMap CreateScreenStateSimpleOnOffMap(int64_t screenOnId, int64_t screenOffId) {
|
||||
StateMap map;
|
||||
*map.add_group() = CreateScreenStateSimpleOnGroup(screenOnId);
|
||||
*map.add_group() = CreateScreenStateSimpleOffGroup(screenOffId);
|
||||
return map;
|
||||
}
|
||||
|
||||
void addPredicateToPredicateCombination(const Predicate& predicate,
|
||||
Predicate* combinationPredicate) {
|
||||
combinationPredicate->mutable_combination()->add_predicate(predicate.id());
|
||||
|
||||
@@ -149,17 +149,30 @@ State CreateUidProcessState();
|
||||
// Create State proto for overlay state atom.
|
||||
State CreateOverlayState();
|
||||
|
||||
// Create State proto for screen state atom with on/off map.
|
||||
State CreateScreenStateWithOnOffMap(int64_t screenOnId, int64_t screenOffId);
|
||||
|
||||
// Create State proto for screen state atom with simple on/off map.
|
||||
State CreateScreenStateWithSimpleOnOffMap(int64_t screenOnId, int64_t screenOffId);
|
||||
|
||||
// Create StateGroup proto for ScreenState ON group
|
||||
StateMap_StateGroup CreateScreenStateOnGroup(int64_t screenOnId);
|
||||
|
||||
// Create StateGroup proto for ScreenState OFF group
|
||||
StateMap_StateGroup CreateScreenStateOffGroup(int64_t screenOffId);
|
||||
|
||||
// Create StateGroup proto for simple ScreenState ON group
|
||||
StateMap_StateGroup CreateScreenStateSimpleOnGroup(int64_t screenOnId);
|
||||
|
||||
// Create StateGroup proto for simple ScreenState OFF group
|
||||
StateMap_StateGroup CreateScreenStateSimpleOffGroup(int64_t screenOffId);
|
||||
|
||||
// Create StateMap proto for ScreenState ON/OFF map
|
||||
StateMap CreateScreenStateOnOffMap(int64_t screenOnId, int64_t screenOffId);
|
||||
|
||||
// Create StateMap proto for simple ScreenState ON/OFF map
|
||||
StateMap CreateScreenStateSimpleOnOffMap(int64_t screenOnId, int64_t screenOffId);
|
||||
|
||||
// Add a predicate to the predicate combination.
|
||||
void addPredicateToPredicateCombination(const Predicate& predicate, Predicate* combination);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user