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