statsd_test_util.cpp revision e06cfd777a501eca17f8dd796b32ad61002c5875
12087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// Copyright (C) 2017 The Android Open Source Project
22087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac//
32087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// Licensed under the Apache License, Version 2.0 (the "License");
42087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// you may not use this file except in compliance with the License.
52087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// You may obtain a copy of the License at
62087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac//
72087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac//      http://www.apache.org/licenses/LICENSE-2.0
82087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac//
92087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// Unless required by applicable law or agreed to in writing, software
102087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// distributed under the License is distributed on an "AS IS" BASIS,
112087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// See the License for the specific language governing permissions and
132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac// limitations under the License.
142087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac#include "statsd_test_util.h"
162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
172087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace android {
182087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace os {
192087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace statsd {
202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2187718e283a62660eaa0e39fd780c97a290da988fYangster-macAtomMatcher CreateSimpleAtomMatcher(const string& name, int atomId) {
2287718e283a62660eaa0e39fd780c97a290da988fYangster-mac    AtomMatcher atom_matcher;
2387718e283a62660eaa0e39fd780c97a290da988fYangster-mac    atom_matcher.set_id(StringToId(name));
2487718e283a62660eaa0e39fd780c97a290da988fYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
2587718e283a62660eaa0e39fd780c97a290da988fYangster-mac    simple_atom_matcher->set_atom_id(atomId);
2687718e283a62660eaa0e39fd780c97a290da988fYangster-mac    return atom_matcher;
2787718e283a62660eaa0e39fd780c97a290da988fYangster-mac}
2887718e283a62660eaa0e39fd780c97a290da988fYangster-mac
2913fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateScheduledJobStateChangedAtomMatcher(const string& name,
3013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster                                                      ScheduledJobStateChanged::State state) {
3113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    AtomMatcher atom_matcher;
3213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    atom_matcher.set_id(StringToId(name));
3313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
3413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    simple_atom_matcher->set_atom_id(android::util::SCHEDULED_JOB_STATE_CHANGED);
3513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
3613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    field_value_matcher->set_field(3);  // State field.
3713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    field_value_matcher->set_eq_int(state);
3813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return atom_matcher;
3913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
4013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
4113fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateStartScheduledJobAtomMatcher() {
4213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return CreateScheduledJobStateChangedAtomMatcher("ScheduledJobStart",
4313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster                                                     ScheduledJobStateChanged::STARTED);
4413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
4513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
4613fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateFinishScheduledJobAtomMatcher() {
4713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return CreateScheduledJobStateChangedAtomMatcher("ScheduledJobFinish",
4813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster                                                     ScheduledJobStateChanged::FINISHED);
4913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
5013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
519369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateScreenBrightnessChangedAtomMatcher() {
529369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    AtomMatcher atom_matcher;
539369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    atom_matcher.set_id(StringToId("ScreenBrightnessChanged"));
549369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
559369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    simple_atom_matcher->set_atom_id(android::util::SCREEN_BRIGHTNESS_CHANGED);
569369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return atom_matcher;
579369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
589369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
599369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateUidProcessStateChangedAtomMatcher() {
609369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    AtomMatcher atom_matcher;
619369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    atom_matcher.set_id(StringToId("UidProcessStateChanged"));
629369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
639369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    simple_atom_matcher->set_atom_id(android::util::UID_PROCESS_STATE_CHANGED);
649369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return atom_matcher;
659369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
669369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
672087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateWakelockStateChangedAtomMatcher(const string& name,
682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac                                                  WakelockStateChanged::State state) {
692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    AtomMatcher atom_matcher;
7094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    atom_matcher.set_id(StringToId(name));
712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    simple_atom_matcher->set_atom_id(android::util::WAKELOCK_STATE_CHANGED);
732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_field(4);  // State field.
752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_eq_int(state);
762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return atom_matcher;
772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
792087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateAcquireWakelockAtomMatcher() {
802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateWakelockStateChangedAtomMatcher("AcquireWakelock", WakelockStateChanged::ACQUIRE);
812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
832087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateReleaseWakelockAtomMatcher() {
842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateWakelockStateChangedAtomMatcher("ReleaseWakelock", WakelockStateChanged::RELEASE);
852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
879369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStateChangedAtomMatcher(
889369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    const string& name, BatterySaverModeStateChanged::State state) {
899369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    AtomMatcher atom_matcher;
909369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    atom_matcher.set_id(StringToId(name));
919369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
929369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    simple_atom_matcher->set_atom_id(android::util::BATTERY_SAVER_MODE_STATE_CHANGED);
939369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
949369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    field_value_matcher->set_field(1);  // State field.
959369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    field_value_matcher->set_eq_int(state);
969369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return atom_matcher;
979369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
989369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
999369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStartAtomMatcher() {
1009369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return CreateBatterySaverModeStateChangedAtomMatcher(
1019369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac        "BatterySaverModeStart", BatterySaverModeStateChanged::ON);
1029369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
1039369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
1049369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
1059369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStopAtomMatcher() {
1069369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return CreateBatterySaverModeStateChangedAtomMatcher(
1079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac        "BatterySaverModeStop", BatterySaverModeStateChanged::OFF);
1089369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
1099369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
1109369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
1112087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenStateChangedAtomMatcher(
1121a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz    const string& name, android::view::DisplayStateEnum state) {
1132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    AtomMatcher atom_matcher;
11494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    atom_matcher.set_id(StringToId(name));
1152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
1162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    simple_atom_matcher->set_atom_id(android::util::SCREEN_STATE_CHANGED);
1172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
1182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_field(1);  // State field.
1192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_eq_int(state);
1202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return atom_matcher;
1212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1239369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
1242087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOnAtomMatcher() {
1251a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz    return CreateScreenStateChangedAtomMatcher("ScreenTurnedOn",
1261a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz            android::view::DisplayStateEnum::DISPLAY_STATE_ON);
1272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1292087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOffAtomMatcher() {
1301a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz    return CreateScreenStateChangedAtomMatcher("ScreenTurnedOff",
1311a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz            ::android::view::DisplayStateEnum::DISPLAY_STATE_OFF);
1322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1342087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStateChangedAtomMatcher(
1352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    const string& name, SyncStateChanged::State state) {
1362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    AtomMatcher atom_matcher;
13794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    atom_matcher.set_id(StringToId(name));
1382087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
1392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    simple_atom_matcher->set_atom_id(android::util::SYNC_STATE_CHANGED);
1402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
1412087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_field(3);  // State field.
1422087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_eq_int(state);
1432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return atom_matcher;
1442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1452087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1462087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStartAtomMatcher() {
1472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateSyncStateChangedAtomMatcher("SyncStart", SyncStateChanged::ON);
1482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1492087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1502087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncEndAtomMatcher() {
1512087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateSyncStateChangedAtomMatcher("SyncEnd", SyncStateChanged::OFF);
1522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1542087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateActivityForegroundStateChangedAtomMatcher(
1552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    const string& name, ActivityForegroundStateChanged::Activity activity) {
1562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    AtomMatcher atom_matcher;
15794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    atom_matcher.set_id(StringToId(name));
1582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
1592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED);
1602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
1612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_field(4);  // Activity field.
1622087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_eq_int(activity);
1632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return atom_matcher;
1642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1662087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToBackgroundAtomMatcher() {
1672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateActivityForegroundStateChangedAtomMatcher(
1682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        "MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND);
1692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1712087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToForegroundAtomMatcher() {
1722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateActivityForegroundStateChangedAtomMatcher(
1732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        "MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND);
1742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1762087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessLifeCycleStateChangedAtomMatcher(
1772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    const string& name, ProcessLifeCycleStateChanged::Event event) {
1782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    AtomMatcher atom_matcher;
17994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    atom_matcher.set_id(StringToId(name));
1802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
1812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    simple_atom_matcher->set_atom_id(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
1822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
1832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_field(3);  // Process state field.
1842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    field_value_matcher->set_eq_int(event);
1852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return atom_matcher;
1862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
1882087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessCrashAtomMatcher() {
1892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateProcessLifeCycleStateChangedAtomMatcher(
1902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        "ProcessCrashed", ProcessLifeCycleStateChanged::PROCESS_CRASHED);
1912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
1922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
19313fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterPredicate CreateScheduledJobPredicate() {
19413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    Predicate predicate;
19513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    predicate.set_id(StringToId("ScheduledJobRunningPredicate"));
19613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    predicate.mutable_simple_predicate()->set_start(StringToId("ScheduledJobStart"));
19713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    predicate.mutable_simple_predicate()->set_stop(StringToId("ScheduledJobFinish"));
19813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return predicate;
19913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
20013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
2019369446f0b04945d6674550728ae81196d6fb5c2Yangster-macPredicate CreateBatterySaverModePredicate() {
2029369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    Predicate predicate;
2039369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    predicate.set_id(StringToId("BatterySaverIsOn"));
2049369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("BatterySaverModeStart"));
2059369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("BatterySaverModeStop"));
2069369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return predicate;
2079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
2082087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2092087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOnPredicate() {
2102087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    Predicate predicate;
21194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.set_id(StringToId("ScreenIsOn"));
21294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOn"));
21394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOff"));
2142087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return predicate;
2152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2172087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOffPredicate() {
2182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    Predicate predicate;
2198a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    predicate.set_id(1111123);
22094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOff"));
22194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOn"));
2222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return predicate;
2232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2242087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2252087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateHoldingWakelockPredicate() {
2262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    Predicate predicate;
22794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.set_id(StringToId("HoldingWakelock"));
22894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("AcquireWakelock"));
22994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("ReleaseWakelock"));
2302087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return predicate;
2312087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2332087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsSyncingPredicate() {
2342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    Predicate predicate;
2358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    predicate.set_id(33333333333333);
23694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("SyncStart"));
23794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("SyncEnd"));
2382087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return predicate;
2392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2412087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsInBackgroundPredicate() {
2422087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    Predicate predicate;
24394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.set_id(StringToId("IsInBackground"));
24494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_start(StringToId("MoveToBackground"));
24594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    predicate.mutable_simple_predicate()->set_stop(StringToId("MoveToForeground"));
2462087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return predicate;
2472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2492087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid addPredicateToPredicateCombination(const Predicate& predicate,
2502087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac                                        Predicate* combinationPredicate) {
25194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    combinationPredicate->mutable_combination()->add_predicate(predicate.id());
2522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2542087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidDimensions(const int atomId,
2552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac                                            const std::vector<Position>& positions) {
2562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    FieldMatcher dimensions;
2572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    dimensions.set_field(atomId);
2582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    for (const auto position : positions) {
2592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        auto child = dimensions.add_child();
2602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->set_field(1);
2612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->set_position(position);
2622087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->add_child()->set_field(1);
2632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    }
2642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return dimensions;
2652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2672087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidAndTagDimensions(const int atomId,
2682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac                                                 const std::vector<Position>& positions) {
2692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    FieldMatcher dimensions;
2702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    dimensions.set_field(atomId);
2712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    for (const auto position : positions) {
2722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        auto child = dimensions.add_child();
2732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->set_field(1);
2742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->set_position(position);
2752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->add_child()->set_field(1);
2762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        child->add_child()->set_field(2);
2772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    }
2782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return dimensions;
2792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2812087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateDimensions(const int atomId, const std::vector<int>& fields) {
2822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    FieldMatcher dimensions;
2832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    dimensions.set_field(atomId);
2842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    for (const int field : fields) {
2852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        dimensions.add_child()->set_field(field);
2862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    }
2872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return dimensions;
2882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2902087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateScreenStateChangedEvent(
2911a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz    const android::view::DisplayStateEnum state, uint64_t timestampNs) {
2922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto event = std::make_unique<LogEvent>(android::util::SCREEN_STATE_CHANGED, timestampNs);
2932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    EXPECT_TRUE(event->write(state));
2942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->init();
2952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return event;
2962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
2972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
2989369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateBatterySaverOnEvent(uint64_t timestampNs) {
2999369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto event = std::make_unique<LogEvent>(
3009369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
3019369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::ON));
3029369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    event->init();
3039369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return event;
3049369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
3059369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
3069369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateBatterySaverOffEvent(uint64_t timestampNs) {
3079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto event = std::make_unique<LogEvent>(
3089369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac        android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs);
3099369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    EXPECT_TRUE(event->write(BatterySaverModeStateChanged::OFF));
3109369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    event->init();
3119369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return event;
3129369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
3139369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
3149369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateScreenBrightnessChangedEvent(
3159369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    int level, uint64_t timestampNs) {
3169369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    auto event = std::make_unique<LogEvent>(android::util::SCREEN_BRIGHTNESS_CHANGED, timestampNs);
3179369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    EXPECT_TRUE(event->write(level));
3189369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    event->init();
3199369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return event;
3209369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
3219369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac}
3229369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac
32313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateScheduledJobStateChangedEvent(
32413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster        const std::vector<AttributionNodeInternal>& attributions, const string& jobName,
32513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster        const ScheduledJobStateChanged::State state, uint64_t timestampNs) {
32613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    auto event = std::make_unique<LogEvent>(android::util::SCHEDULED_JOB_STATE_CHANGED, timestampNs);
32713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    event->write(attributions);
32813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    event->write(jobName);
32913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    event->write(state);
33013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    event->init();
33113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return event;
33213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
33313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
33413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateStartScheduledJobEvent(
33513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    const std::vector<AttributionNodeInternal>& attributions,
33613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    const string& name, uint64_t timestampNs) {
33713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return CreateScheduledJobStateChangedEvent(
33813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster            attributions, name, ScheduledJobStateChanged::STARTED, timestampNs);
33913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
34013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
34113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster// Create log event when scheduled job finishes.
34213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateFinishScheduledJobEvent(
34313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    const std::vector<AttributionNodeInternal>& attributions,
34413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    const string& name, uint64_t timestampNs) {
34513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    return CreateScheduledJobStateChangedEvent(
34613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster            attributions, name, ScheduledJobStateChanged::FINISHED, timestampNs);
34713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster}
34813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
3492087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateWakelockStateChangedEvent(
3509c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
3519c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const WakelockStateChanged::State state, uint64_t timestampNs) {
3522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto event = std::make_unique<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, timestampNs);
3532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(attributions);
3541a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz    event->write(android::os::WakeLockLevelEnum::PARTIAL_WAKE_LOCK);
3552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(wakelockName);
3562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(state);
3572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->init();
3582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return event;
3592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3612087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAcquireWakelockEvent(
3629c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
3639c1debe330006b2b4d5c08a55905789c57369609Yao Chen        uint64_t timestampNs) {
3642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateWakelockStateChangedEvent(
3652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        attributions, wakelockName, WakelockStateChanged::ACQUIRE, timestampNs);
3662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3682087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateReleaseWakelockEvent(
3699c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName,
3709c1debe330006b2b4d5c08a55905789c57369609Yao Chen        uint64_t timestampNs) {
3712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateWakelockStateChangedEvent(
3722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        attributions, wakelockName, WakelockStateChanged::RELEASE, timestampNs);
3732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3752087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent(
3762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) {
3772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto event = std::make_unique<LogEvent>(
3782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs);
3792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(uid);
3802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write("pkg_name");
3812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write("class_name");
3822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(activity);
3832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->init();
3842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return event;
3852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3872087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) {
3882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateActivityForegroundStateChangedEvent(
3892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs);
3902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3922087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) {
3932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateActivityForegroundStateChangedEvent(
3942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs);
3952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
3962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
3972087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStateChangedEvent(
3989c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& name,
3999c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const SyncStateChanged::State state, uint64_t timestampNs) {
4002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto event = std::make_unique<LogEvent>(android::util::SYNC_STATE_CHANGED, timestampNs);
4019369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    event->write(attributions);
4022087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(name);
4032087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->write(state);
4042087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    event->init();
4052087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return event;
4062087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4072087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4082087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStartEvent(
4099c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& name,
4109c1debe330006b2b4d5c08a55905789c57369609Yao Chen        uint64_t timestampNs) {
4119369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::ON, timestampNs);
4122087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4142087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncEndEvent(
4159c1debe330006b2b4d5c08a55905789c57369609Yao Chen        const std::vector<AttributionNodeInternal>& attributions, const string& name,
4169c1debe330006b2b4d5c08a55905789c57369609Yao Chen        uint64_t timestampNs) {
4179369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac    return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::OFF, timestampNs);
4182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4202087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent(
4212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    const int uid, const ProcessLifeCycleStateChanged::Event event, uint64_t timestampNs) {
4222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    auto logEvent = std::make_unique<LogEvent>(
4232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs);
4242087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    logEvent->write(uid);
4252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    logEvent->write("");
4262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    logEvent->write(event);
4272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    logEvent->init();
4282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return logEvent;
4292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4302087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4312087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) {
4322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return CreateProcessLifeCycleStateChangedEvent(
4332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac        uid, ProcessLifeCycleStateChanged::PROCESS_CRASHED, timestampNs);
4342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
436d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-macstd::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent(
437d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    int isolatedUid, int hostUid, bool is_create, uint64_t timestampNs) {
438d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    auto logEvent = std::make_unique<LogEvent>(
439d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac        android::util::ISOLATED_UID_CHANGED, timestampNs);
440d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    logEvent->write(hostUid);
441d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    logEvent->write(isolatedUid);
442d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    logEvent->write(is_create);
443d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    logEvent->init();
444d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    return logEvent;
445d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac}
446d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac
4472087716f2bdca90c7c3034d556ac12911bd8018eYangster-macsp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const StatsdConfig& config,
4482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac                                              const ConfigKey& key) {
4492087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    sp<UidMap> uidMap = new UidMap();
450932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    sp<AlarmMonitor> anomalyAlarmMonitor;
451932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    sp<AlarmMonitor> periodicAlarmMonitor;
4522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    sp<StatsLogProcessor> processor = new StatsLogProcessor(
453932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac        uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){});
4542087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    processor->OnConfigUpdated(key, config);
4552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return processor;
4562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4589c1debe330006b2b4d5c08a55905789c57369609Yao ChenAttributionNodeInternal CreateAttribution(const int& uid, const string& tag) {
4599c1debe330006b2b4d5c08a55905789c57369609Yao Chen    AttributionNodeInternal attribution;
4602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    attribution.set_uid(uid);
4612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    attribution.set_tag(tag);
4622087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac    return attribution;
4632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
4652087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid sortLogEventsByTimestamp(std::vector<std::unique_ptr<LogEvent>> *events) {
4662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac  std::sort(events->begin(), events->end(),
4672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac            [](const std::unique_ptr<LogEvent>& a, const std::unique_ptr<LogEvent>& b) {
468330af58f2b8582b855085655fae553cdfaf44e6cYangster-mac              return a->GetElapsedTimestampNs() < b->GetElapsedTimestampNs();
4692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac            });
4702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}
4712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
47294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-macint64_t StringToId(const string& str) {
47394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac    return static_cast<int64_t>(std::hash<std::string>()(str));
47494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac}
475b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac
476b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidDimension(const DimensionsValue& value, int atomId, int uid) {
477b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.field(), atomId);
478b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Attribution field.
479b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1);
480b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Uid only.
481b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
482b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value_size(), 1);
483b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
484b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).field(), 1);
485b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
486b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).value_int(), uid);
487b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac}
488b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac
489b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateUidDimension(const DimensionsValue& value, int atomId, int uid) {
490b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.field(), atomId);
491b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value_size(), 1);
492b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Attribution field.
493b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1);
494b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Uid only.
495b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
496b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value_size(), 1);
497b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
498b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).field(), 1);
499b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
500b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).value_int(), uid);
501b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac}
502b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac
503e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macvoid ValidateUidDimension(const DimensionsValue& value, int node_idx, int atomId, int uid) {
504e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(value.field(), atomId);
505e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_GT(value.value_tuple().dimensions_value_size(), node_idx);
506e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    // Attribution field.
507e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(node_idx).field(), 1);
508e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(node_idx)
509e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(0).field(), 1);
510e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(node_idx)
511e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(0).value_int(), uid);
512e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac}
513e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac
514e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macvoid ValidateAttributionUidAndTagDimension(
515e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    const DimensionsValue& value, int node_idx, int atomId, int uid, const std::string& tag) {
516e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(value.field(), atomId);
517e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_GT(value.value_tuple().dimensions_value_size(), node_idx);
518e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    // Attribution field.
519e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(1, value.value_tuple().dimensions_value(node_idx).field());
520e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    // Uid only.
521e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(2, value.value_tuple().dimensions_value(node_idx)
522e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value_size());
523e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(1, value.value_tuple().dimensions_value(node_idx)
524e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(0).field());
525e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(uid, value.value_tuple().dimensions_value(node_idx)
526e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(0).value_int());
527e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(2, value.value_tuple().dimensions_value(node_idx)
528e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(1).field());
529e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(tag, value.value_tuple().dimensions_value(node_idx)
530e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac        .value_tuple().dimensions_value(1).value_str());
531e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac}
532e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac
533b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidAndTagDimension(
534b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    const DimensionsValue& value, int atomId, int uid, const std::string& tag) {
535b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.field(), atomId);
536e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(1, value.value_tuple().dimensions_value_size());
537b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Attribution field.
538e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    EXPECT_EQ(1, value.value_tuple().dimensions_value(0).field());
539b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    // Uid only.
540b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
541b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value_size(), 2);
542b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
543b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).field(), 1);
544b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
545b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(0).value_int(), uid);
546b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
547b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(1).field(), 2);
548b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    EXPECT_EQ(value.value_tuple().dimensions_value(0)
549b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        .value_tuple().dimensions_value(1).value_str(), tag);
550b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac}
551b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac
5528a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool EqualsTo(const DimensionsValue& s1, const DimensionsValue& s2) {
5538a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    if (s1.field() != s2.field()) {
5548a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return false;
5558a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
5568a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    if (s1.value_case() != s2.value_case()) {
5578a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return false;
5588a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
5598a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    switch (s1.value_case()) {
5608a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueStr:
5618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return (s1.value_str() == s2.value_str());
5628a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueInt:
5638a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_int() == s2.value_int();
5648a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueLong:
5658a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_long() == s2.value_long();
5668a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueBool:
5678a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_bool() == s2.value_bool();
5688a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueFloat:
5698a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_float() == s2.value_float();
5708a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueTuple: {
5718a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            if (s1.value_tuple().dimensions_value_size() !=
5728a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                s2.value_tuple().dimensions_value_size()) {
5738a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                return false;
5748a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            }
5758a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            bool allMatched = true;
5768a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            for (int i = 0; allMatched && i < s1.value_tuple().dimensions_value_size(); ++i) {
5778a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                allMatched &= EqualsTo(s1.value_tuple().dimensions_value(i),
5788a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                                       s2.value_tuple().dimensions_value(i));
5798a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            }
5808a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return allMatched;
5818a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        }
5828a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::VALUE_NOT_SET:
5838a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        default:
5848a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return true;
5858a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
5868a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen}
5878a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen
5888a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool LessThan(const DimensionsValue& s1, const DimensionsValue& s2) {
5898a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    if (s1.field() != s2.field()) {
5908a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return s1.field() < s2.field();
5918a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
5928a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    if (s1.value_case() != s2.value_case()) {
5938a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return s1.value_case() < s2.value_case();
5948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
5958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    switch (s1.value_case()) {
5968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueStr:
5978a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_str() < s2.value_str();
5988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueInt:
5998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_int() < s2.value_int();
6008a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueLong:
6018a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_long() < s2.value_long();
6028a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueBool:
6038a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return (int)s1.value_bool() < (int)s2.value_bool();
6048a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueFloat:
6058a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return s1.value_float() < s2.value_float();
6068a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::kValueTuple: {
6078a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            if (s1.value_tuple().dimensions_value_size() !=
6088a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                s2.value_tuple().dimensions_value_size()) {
6098a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                return s1.value_tuple().dimensions_value_size() <
6108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                       s2.value_tuple().dimensions_value_size();
6118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            }
6128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            for (int i = 0; i < s1.value_tuple().dimensions_value_size(); ++i) {
6138a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                if (EqualsTo(s1.value_tuple().dimensions_value(i),
6148a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                             s2.value_tuple().dimensions_value(i))) {
6158a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                    continue;
6168a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                } else {
6178a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                    return LessThan(s1.value_tuple().dimensions_value(i),
6188a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                                    s2.value_tuple().dimensions_value(i));
6198a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen                }
6208a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            }
6218a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return false;
6228a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        }
6238a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        case DimensionsValue::ValueCase::VALUE_NOT_SET:
6248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        default:
6258a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen            return false;
6268a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
6278a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen}
6288a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen
6298a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool LessThan(const DimensionsPair& s1, const DimensionsPair& s2) {
6308a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    if (LessThan(s1.dimInWhat, s2.dimInWhat)) {
6318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return true;
6328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    } else if (LessThan(s2.dimInWhat, s1.dimInWhat)) {
6338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen        return false;
6348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    }
6358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen
6368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    return LessThan(s1.dimInCondition, s2.dimInCondition);
6378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen}
6388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen
6392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}  // namespace statsd
6402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}  // namespace os
6412087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac}  // namespace android