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 2115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 2287718e283a62660eaa0e39fd780c97a290da988fYangster-macAtomMatcher CreateSimpleAtomMatcher(const string& name, int atomId) { 2387718e283a62660eaa0e39fd780c97a290da988fYangster-mac AtomMatcher atom_matcher; 2487718e283a62660eaa0e39fd780c97a290da988fYangster-mac atom_matcher.set_id(StringToId(name)); 2587718e283a62660eaa0e39fd780c97a290da988fYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 2687718e283a62660eaa0e39fd780c97a290da988fYangster-mac simple_atom_matcher->set_atom_id(atomId); 2787718e283a62660eaa0e39fd780c97a290da988fYangster-mac return atom_matcher; 2887718e283a62660eaa0e39fd780c97a290da988fYangster-mac} 2987718e283a62660eaa0e39fd780c97a290da988fYangster-mac 3015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macAtomMatcher CreateTemperatureAtomMatcher() { 3115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac return CreateSimpleAtomMatcher("TemperatureMatcher", android::util::TEMPERATURE); 3215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} 3315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 3413fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateScheduledJobStateChangedAtomMatcher(const string& name, 3513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster ScheduledJobStateChanged::State state) { 3613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster AtomMatcher atom_matcher; 3713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster atom_matcher.set_id(StringToId(name)); 3813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 3913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster simple_atom_matcher->set_atom_id(android::util::SCHEDULED_JOB_STATE_CHANGED); 4013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 4113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster field_value_matcher->set_field(3); // State field. 4213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster field_value_matcher->set_eq_int(state); 4313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return atom_matcher; 4413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 4513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 4613fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateStartScheduledJobAtomMatcher() { 4713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return CreateScheduledJobStateChangedAtomMatcher("ScheduledJobStart", 4813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster ScheduledJobStateChanged::STARTED); 4913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 5013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 5113fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterAtomMatcher CreateFinishScheduledJobAtomMatcher() { 5213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return CreateScheduledJobStateChangedAtomMatcher("ScheduledJobFinish", 5313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster ScheduledJobStateChanged::FINISHED); 5413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 5513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 569369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateScreenBrightnessChangedAtomMatcher() { 579369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac AtomMatcher atom_matcher; 589369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac atom_matcher.set_id(StringToId("ScreenBrightnessChanged")); 599369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 609369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac simple_atom_matcher->set_atom_id(android::util::SCREEN_BRIGHTNESS_CHANGED); 619369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return atom_matcher; 629369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 639369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 649369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateUidProcessStateChangedAtomMatcher() { 659369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac AtomMatcher atom_matcher; 669369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac atom_matcher.set_id(StringToId("UidProcessStateChanged")); 679369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 689369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac simple_atom_matcher->set_atom_id(android::util::UID_PROCESS_STATE_CHANGED); 699369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return atom_matcher; 709369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 719369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 722087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateWakelockStateChangedAtomMatcher(const string& name, 732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac WakelockStateChanged::State state) { 742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 7594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::WAKELOCK_STATE_CHANGED); 782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(4); // State field. 802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 842087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateAcquireWakelockAtomMatcher() { 852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedAtomMatcher("AcquireWakelock", WakelockStateChanged::ACQUIRE); 862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 882087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateReleaseWakelockAtomMatcher() { 892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedAtomMatcher("ReleaseWakelock", WakelockStateChanged::RELEASE); 902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 929369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStateChangedAtomMatcher( 939369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac const string& name, BatterySaverModeStateChanged::State state) { 949369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac AtomMatcher atom_matcher; 959369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac atom_matcher.set_id(StringToId(name)); 969369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 979369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac simple_atom_matcher->set_atom_id(android::util::BATTERY_SAVER_MODE_STATE_CHANGED); 989369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 999369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac field_value_matcher->set_field(1); // State field. 1009369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac field_value_matcher->set_eq_int(state); 1019369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return atom_matcher; 1029369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 1039369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1049369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStartAtomMatcher() { 1059369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return CreateBatterySaverModeStateChangedAtomMatcher( 1069369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac "BatterySaverModeStart", BatterySaverModeStateChanged::ON); 1079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 1089369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1099369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1109369446f0b04945d6674550728ae81196d6fb5c2Yangster-macAtomMatcher CreateBatterySaverModeStopAtomMatcher() { 1119369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return CreateBatterySaverModeStateChangedAtomMatcher( 1129369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac "BatterySaverModeStop", BatterySaverModeStateChanged::OFF); 1139369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 1149369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1159369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1162087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenStateChangedAtomMatcher( 1171a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz const string& name, android::view::DisplayStateEnum state) { 1182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 11994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 1202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 1212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::SCREEN_STATE_CHANGED); 1222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 1232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(1); // State field. 1242087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 1252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1289369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 1292087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOnAtomMatcher() { 1301a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz return CreateScreenStateChangedAtomMatcher("ScreenTurnedOn", 1311a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz android::view::DisplayStateEnum::DISPLAY_STATE_ON); 1322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1342087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOffAtomMatcher() { 1351a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz return CreateScreenStateChangedAtomMatcher("ScreenTurnedOff", 1361a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz ::android::view::DisplayStateEnum::DISPLAY_STATE_OFF); 1372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1382087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1392087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStateChangedAtomMatcher( 1402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& name, SyncStateChanged::State state) { 1412087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 14294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 1432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 1442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::SYNC_STATE_CHANGED); 1452087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 1462087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(3); // State field. 1472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 1482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1492087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1502087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1512087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStartAtomMatcher() { 1522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedAtomMatcher("SyncStart", SyncStateChanged::ON); 1532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1542087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1552087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncEndAtomMatcher() { 1562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedAtomMatcher("SyncEnd", SyncStateChanged::OFF); 1572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1592087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateActivityForegroundStateChangedAtomMatcher( 1605caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu const string& name, ActivityForegroundStateChanged::State state) { 1612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 16294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 1632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 1642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED); 1652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 1662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(4); // Activity field. 1675caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu field_value_matcher->set_eq_int(state); 1682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1712087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToBackgroundAtomMatcher() { 1722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedAtomMatcher( 1735caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu "Background", ActivityForegroundStateChanged::BACKGROUND); 1742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1762087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToForegroundAtomMatcher() { 1772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedAtomMatcher( 1785caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu "Foreground", ActivityForegroundStateChanged::FOREGROUND); 1792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1812087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessLifeCycleStateChangedAtomMatcher( 1825caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu const string& name, ProcessLifeCycleStateChanged::State state) { 1832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 18494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 1852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 1862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED); 1872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 1882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(3); // Process state field. 1895caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu field_value_matcher->set_eq_int(state); 1902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1932087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessCrashAtomMatcher() { 1942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateProcessLifeCycleStateChangedAtomMatcher( 1955caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu "Crashed", ProcessLifeCycleStateChanged::CRASHED); 1962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 19813fb7e4eeaf7aee408821afe7ee55a5167e49e59YangsterPredicate CreateScheduledJobPredicate() { 19913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster Predicate predicate; 20013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster predicate.set_id(StringToId("ScheduledJobRunningPredicate")); 20113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster predicate.mutable_simple_predicate()->set_start(StringToId("ScheduledJobStart")); 20213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster predicate.mutable_simple_predicate()->set_stop(StringToId("ScheduledJobFinish")); 20313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return predicate; 20413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 20513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 2069369446f0b04945d6674550728ae81196d6fb5c2Yangster-macPredicate CreateBatterySaverModePredicate() { 2079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac Predicate predicate; 2089369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac predicate.set_id(StringToId("BatterySaverIsOn")); 2099369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("BatterySaverModeStart")); 2109369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("BatterySaverModeStop")); 2119369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return predicate; 2129369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 2132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2142087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOnPredicate() { 2152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 21694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("ScreenIsOn")); 21794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOn")); 21894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOff")); 2192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 2202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2222087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOffPredicate() { 2232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 2248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen predicate.set_id(1111123); 22594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOff")); 22694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOn")); 2272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 2282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2302087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateHoldingWakelockPredicate() { 2312087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 23294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("HoldingWakelock")); 23394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("AcquireWakelock")); 23494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ReleaseWakelock")); 2352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 2362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2382087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsSyncingPredicate() { 2392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 2408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen predicate.set_id(33333333333333); 24194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("SyncStart")); 24294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("SyncEnd")); 2432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 2442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2452087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2462087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsInBackgroundPredicate() { 2472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 24894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("IsInBackground")); 2495caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu predicate.mutable_simple_predicate()->set_start(StringToId("Background")); 2505caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu predicate.mutable_simple_predicate()->set_stop(StringToId("Foreground")); 2512087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 2522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2542087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid addPredicateToPredicateCombination(const Predicate& predicate, 2552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate* combinationPredicate) { 25694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac combinationPredicate->mutable_combination()->add_predicate(predicate.id()); 2572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2592087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidDimensions(const int atomId, 2602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<Position>& positions) { 2612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 2622087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 2632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const auto position : positions) { 2642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto child = dimensions.add_child(); 2652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_field(1); 2662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_position(position); 2672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(1); 2682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 2692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 2702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2722087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidAndTagDimensions(const int atomId, 2732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<Position>& positions) { 2742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 2752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 2762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const auto position : positions) { 2772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto child = dimensions.add_child(); 2782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_field(1); 2792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_position(position); 2802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(1); 2812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(2); 2822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 2832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 2842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2862087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateDimensions(const int atomId, const std::vector<int>& fields) { 2872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 2882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 2892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const int field : fields) { 2902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.add_child()->set_field(field); 2912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 2922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 2932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2952087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateScreenStateChangedEvent( 2961a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz const android::view::DisplayStateEnum state, uint64_t timestampNs) { 2972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::SCREEN_STATE_CHANGED, timestampNs); 2982087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac EXPECT_TRUE(event->write(state)); 2992087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 3002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 3012087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3022087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3039369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateBatterySaverOnEvent(uint64_t timestampNs) { 3049369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto event = std::make_unique<LogEvent>( 3059369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs); 3069369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac EXPECT_TRUE(event->write(BatterySaverModeStateChanged::ON)); 3079369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac event->init(); 3089369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return event; 3099369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 3109369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 3119369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateBatterySaverOffEvent(uint64_t timestampNs) { 3129369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto event = std::make_unique<LogEvent>( 3139369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac android::util::BATTERY_SAVER_MODE_STATE_CHANGED, timestampNs); 3149369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac EXPECT_TRUE(event->write(BatterySaverModeStateChanged::OFF)); 3159369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac event->init(); 3169369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return event; 3179369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 3189369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 3199369446f0b04945d6674550728ae81196d6fb5c2Yangster-macstd::unique_ptr<LogEvent> CreateScreenBrightnessChangedEvent( 3209369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac int level, uint64_t timestampNs) { 3219369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac auto event = std::make_unique<LogEvent>(android::util::SCREEN_BRIGHTNESS_CHANGED, timestampNs); 3229369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac EXPECT_TRUE(event->write(level)); 3239369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac event->init(); 3249369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return event; 3259369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 3269369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac} 3279369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac 32813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateScheduledJobStateChangedEvent( 32913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const std::vector<AttributionNodeInternal>& attributions, const string& jobName, 33013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const ScheduledJobStateChanged::State state, uint64_t timestampNs) { 33113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster auto event = std::make_unique<LogEvent>(android::util::SCHEDULED_JOB_STATE_CHANGED, timestampNs); 33213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write(attributions); 33313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write(jobName); 33413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write(state); 33513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->init(); 33613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return event; 33713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 33813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 33913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateStartScheduledJobEvent( 34013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const std::vector<AttributionNodeInternal>& attributions, 34113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const string& name, uint64_t timestampNs) { 34213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return CreateScheduledJobStateChangedEvent( 34313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster attributions, name, ScheduledJobStateChanged::STARTED, timestampNs); 34413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 34513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 34613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster// Create log event when scheduled job finishes. 34713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstd::unique_ptr<LogEvent> CreateFinishScheduledJobEvent( 34813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const std::vector<AttributionNodeInternal>& attributions, 34913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster const string& name, uint64_t timestampNs) { 35013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster return CreateScheduledJobStateChangedEvent( 35113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster attributions, name, ScheduledJobStateChanged::FINISHED, timestampNs); 35213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 35313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 3542087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateWakelockStateChangedEvent( 3559c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName, 3569c1debe330006b2b4d5c08a55905789c57369609Yao Chen const WakelockStateChanged::State state, uint64_t timestampNs) { 3572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, timestampNs); 3582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(attributions); 3591a1b0464cb43903ed540f4c43fd423b16e398c04Bookatz event->write(android::os::WakeLockLevelEnum::PARTIAL_WAKE_LOCK); 3602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(wakelockName); 3612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(state); 3622087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 3632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 3642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3662087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAcquireWakelockEvent( 3679c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName, 3689c1debe330006b2b4d5c08a55905789c57369609Yao Chen uint64_t timestampNs) { 3692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedEvent( 3702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attributions, wakelockName, WakelockStateChanged::ACQUIRE, timestampNs); 3712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3732087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateReleaseWakelockEvent( 3749c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& wakelockName, 3759c1debe330006b2b4d5c08a55905789c57369609Yao Chen uint64_t timestampNs) { 3762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedEvent( 3772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attributions, wakelockName, WakelockStateChanged::RELEASE, timestampNs); 3782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3802087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent( 3815caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) { 3822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>( 3832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs); 3842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(uid); 3852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write("pkg_name"); 3862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write("class_name"); 3875caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu event->write(state); 3882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 3892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 3902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3922087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) { 3932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedEvent( 3945caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs); 3952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3972087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) { 3982087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedEvent( 3995caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs); 4002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4012087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4022087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStateChangedEvent( 4039c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& name, 4049c1debe330006b2b4d5c08a55905789c57369609Yao Chen const SyncStateChanged::State state, uint64_t timestampNs) { 4052087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::SYNC_STATE_CHANGED, timestampNs); 4069369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac event->write(attributions); 4072087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(name); 4082087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(state); 4092087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 4102087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 4112087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4122087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4132087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStartEvent( 4149c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& name, 4159c1debe330006b2b4d5c08a55905789c57369609Yao Chen uint64_t timestampNs) { 4169369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::ON, timestampNs); 4172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4192087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncEndEvent( 4209c1debe330006b2b4d5c08a55905789c57369609Yao Chen const std::vector<AttributionNodeInternal>& attributions, const string& name, 4219c1debe330006b2b4d5c08a55905789c57369609Yao Chen uint64_t timestampNs) { 4229369446f0b04945d6674550728ae81196d6fb5c2Yangster-mac return CreateSyncStateChangedEvent(attributions, name, SyncStateChanged::OFF, timestampNs); 4232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4242087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4252087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent( 4265caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu const int uid, const ProcessLifeCycleStateChanged::State state, uint64_t timestampNs) { 4272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto logEvent = std::make_unique<LogEvent>( 4282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs); 4292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->write(uid); 4302087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->write(""); 4315caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu logEvent->write(state); 4322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->init(); 4332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return logEvent; 4342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4362087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) { 4372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateProcessLifeCycleStateChangedEvent( 4385caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu uid, ProcessLifeCycleStateChanged::CRASHED, timestampNs); 4392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 441d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-macstd::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent( 442d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac int isolatedUid, int hostUid, bool is_create, uint64_t timestampNs) { 443d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac auto logEvent = std::make_unique<LogEvent>( 444d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac android::util::ISOLATED_UID_CHANGED, timestampNs); 445d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(hostUid); 446d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(isolatedUid); 447d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(is_create); 448d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->init(); 449d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac return logEvent; 450d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac} 451d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac 45215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macsp<StatsLogProcessor> CreateStatsLogProcessor(const int64_t timeBaseNs, const int64_t currentTimeNs, 45315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac const StatsdConfig& config, const ConfigKey& key) { 4542087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac sp<UidMap> uidMap = new UidMap(); 455be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac sp<AlarmMonitor> anomalyAlarmMonitor = 456be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac new AlarmMonitor(1, [](const sp<IStatsCompanionService>&, int64_t){}, 457be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac [](const sp<IStatsCompanionService>&){}); 458684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac sp<AlarmMonitor> periodicAlarmMonitor = 459684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac new AlarmMonitor(1, [](const sp<IStatsCompanionService>&, int64_t){}, 460684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac [](const sp<IStatsCompanionService>&){}); 4612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac sp<StatsLogProcessor> processor = new StatsLogProcessor( 46248944901f7e6334724efadda6c6b27d9e88fc9e2David Chen uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseNs, [](const ConfigKey&){return true;}); 46315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnConfigUpdated(currentTimeNs, key, config); 4642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return processor; 4652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4679c1debe330006b2b4d5c08a55905789c57369609Yao ChenAttributionNodeInternal CreateAttribution(const int& uid, const string& tag) { 4689c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution; 4692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attribution.set_uid(uid); 4702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attribution.set_tag(tag); 4712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return attribution; 4722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 4742087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid sortLogEventsByTimestamp(std::vector<std::unique_ptr<LogEvent>> *events) { 4752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac std::sort(events->begin(), events->end(), 4762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac [](const std::unique_ptr<LogEvent>& a, const std::unique_ptr<LogEvent>& b) { 477330af58f2b8582b855085655fae553cdfaf44e6cYangster-mac return a->GetElapsedTimestampNs() < b->GetElapsedTimestampNs(); 4782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac }); 4792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 4802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 48194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-macint64_t StringToId(const string& str) { 48294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac return static_cast<int64_t>(std::hash<std::string>()(str)); 48394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac} 484b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 485b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidDimension(const DimensionsValue& value, int atomId, int uid) { 486b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 487b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 488b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1); 489b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 490b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 491b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 1); 492b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 493b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 494b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 495b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 496b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 497b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 498b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateUidDimension(const DimensionsValue& value, int atomId, int uid) { 499b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 500b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value_size(), 1); 501b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 502b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1); 503b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 504b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 505b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 1); 506b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 507b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 508b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 509b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 510b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 511b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 512e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macvoid ValidateUidDimension(const DimensionsValue& value, int node_idx, int atomId, int uid) { 513e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(value.field(), atomId); 514e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_GT(value.value_tuple().dimensions_value_size(), node_idx); 515e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac // Attribution field. 516e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(node_idx).field(), 1); 517e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(node_idx) 518e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(0).field(), 1); 519e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(node_idx) 520e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 521e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac} 522e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 523e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macvoid ValidateAttributionUidAndTagDimension( 524e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac const DimensionsValue& value, int node_idx, int atomId, int uid, const std::string& tag) { 525e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(value.field(), atomId); 526e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_GT(value.value_tuple().dimensions_value_size(), node_idx); 527e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac // Attribution field. 528e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(1, value.value_tuple().dimensions_value(node_idx).field()); 529e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac // Uid only. 530e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(2, value.value_tuple().dimensions_value(node_idx) 531e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value_size()); 532e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(1, value.value_tuple().dimensions_value(node_idx) 533e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(0).field()); 534e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(uid, value.value_tuple().dimensions_value(node_idx) 535e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(0).value_int()); 536e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(2, value.value_tuple().dimensions_value(node_idx) 537e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(1).field()); 538e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(tag, value.value_tuple().dimensions_value(node_idx) 539e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac .value_tuple().dimensions_value(1).value_str()); 540e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac} 541e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 542b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidAndTagDimension( 543b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac const DimensionsValue& value, int atomId, int uid, const std::string& tag) { 544b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 545e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(1, value.value_tuple().dimensions_value_size()); 546b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 547e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ(1, value.value_tuple().dimensions_value(0).field()); 548b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 549b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 550b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 2); 551b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 552b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 553b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 554b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 555b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 556b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(1).field(), 2); 557b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 558b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(1).value_str(), tag); 559b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 560b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 5618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool EqualsTo(const DimensionsValue& s1, const DimensionsValue& s2) { 5628a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.field() != s2.field()) { 5638a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 5648a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5658a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.value_case() != s2.value_case()) { 5668a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 5678a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5688a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen switch (s1.value_case()) { 5698a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueStr: 5708a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return (s1.value_str() == s2.value_str()); 5718a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueInt: 5728a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_int() == s2.value_int(); 5738a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueLong: 5748a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_long() == s2.value_long(); 5758a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueBool: 5768a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_bool() == s2.value_bool(); 5778a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueFloat: 5788a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_float() == s2.value_float(); 5798a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueTuple: { 5808a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.value_tuple().dimensions_value_size() != 5818a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value_size()) { 5828a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 5838a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5848a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen bool allMatched = true; 5858a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen for (int i = 0; allMatched && i < s1.value_tuple().dimensions_value_size(); ++i) { 5868a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen allMatched &= EqualsTo(s1.value_tuple().dimensions_value(i), 5878a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value(i)); 5888a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5898a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return allMatched; 5908a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5918a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::VALUE_NOT_SET: 5928a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen default: 5938a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return true; 5948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 5958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 5968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 5978a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool LessThan(const DimensionsValue& s1, const DimensionsValue& s2) { 5988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.field() != s2.field()) { 5998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.field() < s2.field(); 6008a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6018a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.value_case() != s2.value_case()) { 6028a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_case() < s2.value_case(); 6038a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6048a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen switch (s1.value_case()) { 6058a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueStr: 6068a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_str() < s2.value_str(); 6078a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueInt: 6088a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_int() < s2.value_int(); 6098a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueLong: 6108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_long() < s2.value_long(); 6118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueBool: 6128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return (int)s1.value_bool() < (int)s2.value_bool(); 6138a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueFloat: 6148a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_float() < s2.value_float(); 6158a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::kValueTuple: { 6168a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (s1.value_tuple().dimensions_value_size() != 6178a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value_size()) { 6188a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return s1.value_tuple().dimensions_value_size() < 6198a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value_size(); 6208a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6218a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen for (int i = 0; i < s1.value_tuple().dimensions_value_size(); ++i) { 6228a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (EqualsTo(s1.value_tuple().dimensions_value(i), 6238a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value(i))) { 6248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen continue; 6258a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } else { 6268a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return LessThan(s1.value_tuple().dimensions_value(i), 6278a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen s2.value_tuple().dimensions_value(i)); 6288a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6298a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6308a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 6318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen case DimensionsValue::ValueCase::VALUE_NOT_SET: 6338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen default: 6348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 6358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 6378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 6388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chenbool LessThan(const DimensionsPair& s1, const DimensionsPair& s2) { 6398a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen if (LessThan(s1.dimInWhat, s2.dimInWhat)) { 6408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return true; 6418a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } else if (LessThan(s2.dimInWhat, s1.dimInWhat)) { 6428a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return false; 6438a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 6448a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 6458a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen return LessThan(s1.dimInCondition, s2.dimInCondition); 6468a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 6478a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 6489def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStringInDimension(const std::map<uint64_t, string>& str_map, 6499def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac DimensionsValue* dimension) { 6509def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (dimension->has_value_str_hash()) { 6519def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto it = str_map.find((uint64_t)(dimension->value_str_hash())); 6529def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (it != str_map.end()) { 6539def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac dimension->clear_value_str_hash(); 6549def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac dimension->set_value_str(it->second); 6559def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else { 6569def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac ALOGE("Can not find the string hash: %llu", 6579def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac (unsigned long long)dimension->value_str_hash()); 6589def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6599def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (dimension->has_value_tuple()) { 6609def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto value_tuple = dimension->mutable_value_tuple(); 6619def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < value_tuple->dimensions_value_size(); ++i) { 6629def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInDimension(str_map, value_tuple->mutable_dimensions_value(i)); 6639def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6649def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6659def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 6669def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 6679def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStringInReport(ConfigMetricsReport *config_report) { 6689def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac std::map<uint64_t, string> str_map; 6699def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (const auto& str : config_report->strings()) { 6709def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac uint64_t hash = Hash64(str); 6719def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (str_map.find(hash) != str_map.end()) { 6729def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac ALOGE("String hash conflicts: %s %s", str.c_str(), str_map[hash].c_str()); 6739def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6749def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac str_map[hash] = str; 6759def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6769def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < config_report->metrics_size(); ++i) { 6779def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto metric_report = config_report->mutable_metrics(i); 6789def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (metric_report->has_count_metrics()) { 6799def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInDimension(str_map, metric_report->mutable_count_metrics()); 6809def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_duration_metrics()) { 6819def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInDimension(str_map, metric_report->mutable_duration_metrics()); 6829def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_gauge_metrics()) { 6839def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInDimension(str_map, metric_report->mutable_gauge_metrics()); 6849def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_value_metrics()) { 6859def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInDimension(str_map, metric_report->mutable_value_metrics()); 6869def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6879def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 6889def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac // Backfill the package names. 6899def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0 ; i < config_report->uid_map().snapshots_size(); ++i) { 6909def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto snapshot = config_report->mutable_uid_map()->mutable_snapshots(i); 6919def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int j = 0 ; j < snapshot->package_info_size(); ++j) { 6929def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto package_info = snapshot->mutable_package_info(j); 6939def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (package_info->has_name_hash()) { 6949def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto it = str_map.find((uint64_t)(package_info->name_hash())); 6959def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (it != str_map.end()) { 6969def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac package_info->clear_name_hash(); 6979def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac package_info->set_name(it->second); 6989def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else { 6999def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac ALOGE("Can not find the string package name hash: %llu", 7009def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac (unsigned long long)package_info->name_hash()); 7019def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7029def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7039def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7049def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7059def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7069def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac // Backfill the app name in app changes. 7079def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0 ; i < config_report->uid_map().changes_size(); ++i) { 7089def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto change = config_report->mutable_uid_map()->mutable_changes(i); 7099def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (change->has_app_hash()) { 7109def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto it = str_map.find((uint64_t)(change->app_hash())); 7119def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (it != str_map.end()) { 7129def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac change->clear_app_hash(); 7139def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac change->set_app(it->second); 7149def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else { 7159def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac ALOGE("Can not find the string change app name hash: %llu", 7169def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac (unsigned long long)change->app_hash()); 7179def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7189def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7199def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7209def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 7219def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7229def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStringInReport(ConfigMetricsReportList *config_report_list) { 7239def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < config_report_list->reports_size(); ++i) { 7249def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInReport(config_report_list->mutable_reports(i)); 7259def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7269def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 7279def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7289def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macbool backfillDimensionPath(const DimensionsValue& path, 7299def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac const google::protobuf::RepeatedPtrField<DimensionsValue>& leafValues, 7309def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac int* leafIndex, 7319def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac DimensionsValue* dimension) { 7329def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac dimension->set_field(path.field()); 7339def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (path.has_value_tuple()) { 7349def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < path.value_tuple().dimensions_value_size(); ++i) { 7359def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (!backfillDimensionPath( 7369def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac path.value_tuple().dimensions_value(i), leafValues, leafIndex, 7379def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac dimension->mutable_value_tuple()->add_dimensions_value())) { 7389def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac return false; 7399def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7409def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7419def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else { 7429def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (*leafIndex < 0 || *leafIndex >= leafValues.size()) { 7439def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac return false; 7449def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7459def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac dimension->MergeFrom(leafValues.Get(*leafIndex)); 7469def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac (*leafIndex)++; 7479def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7489def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac return true; 7499def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 7509def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7519def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macbool backfillDimensionPath(const DimensionsValue& path, 7529def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac const google::protobuf::RepeatedPtrField<DimensionsValue>& leafValues, 7539def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac DimensionsValue* dimension) { 7549def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac int leafIndex = 0; 7559def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac return backfillDimensionPath(path, leafValues, &leafIndex, dimension); 7569def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 7579def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7589def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillDimensionPath(ConfigMetricsReportList *config_report_list) { 7599def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < config_report_list->reports_size(); ++i) { 7609def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto report = config_report_list->mutable_reports(i); 7619def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int j = 0; j < report->metrics_size(); ++j) { 7629def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto metric_report = report->mutable_metrics(j); 7639def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (metric_report->has_dimensions_path_in_what() || 7649def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->has_dimensions_path_in_condition()) { 7659def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto whatPath = metric_report->dimensions_path_in_what(); 7669def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac auto conditionPath = metric_report->dimensions_path_in_condition(); 7679def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (metric_report->has_count_metrics()) { 7689def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(whatPath, conditionPath, 7699def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->mutable_count_metrics()); 7709def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_duration_metrics()) { 7719def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(whatPath, conditionPath, 7729def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->mutable_duration_metrics()); 7739def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_gauge_metrics()) { 7749def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(whatPath, conditionPath, 7759def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->mutable_gauge_metrics()); 7769def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (metric_report->has_value_metrics()) { 7779def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(whatPath, conditionPath, 7789def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->mutable_value_metrics()); 7799def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7809def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->clear_dimensions_path_in_what(); 7819def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac metric_report->clear_dimensions_path_in_condition(); 7829def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7839def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7849def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 7859def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 7869def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 7879def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStartEndTimestamp(StatsLogReport *report) { 7889def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac const int64_t timeBaseNs = report->time_base_elapsed_nano_seconds(); 7899def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac const int64_t bucketSizeNs = report->bucket_size_nano_seconds(); 7909def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (report->has_count_metrics()) { 7919def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForMetrics( 7929def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, bucketSizeNs, report->mutable_count_metrics()); 7939def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (report->has_duration_metrics()) { 7949def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForMetrics( 7959def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, bucketSizeNs, report->mutable_duration_metrics()); 7969def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (report->has_gauge_metrics()) { 7979def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForMetrics( 7989def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, bucketSizeNs, report->mutable_gauge_metrics()); 7999def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (report->gauge_metrics().skipped_size() > 0) { 8009def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForSkippedBuckets( 8019def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, report->mutable_gauge_metrics()); 8029def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 8039def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } else if (report->has_value_metrics()) { 8049def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForMetrics( 8059def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, bucketSizeNs, report->mutable_value_metrics()); 8069def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac if (report->value_metrics().skipped_size() > 0) { 8079def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestampForSkippedBuckets( 8089def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac timeBaseNs, report->mutable_value_metrics()); 8099def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 8109def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 8119def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 8129def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 8139def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStartEndTimestamp(ConfigMetricsReport *config_report) { 8149def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int j = 0; j < config_report->metrics_size(); ++j) { 8159def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestamp(config_report->mutable_metrics(j)); 8169def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 8179def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 8189def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 8199def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-macvoid backfillStartEndTimestamp(ConfigMetricsReportList *config_report_list) { 8209def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac for (int i = 0; i < config_report_list->reports_size(); ++i) { 8219def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestamp(config_report_list->mutable_reports(i)); 8229def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac } 8239def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac} 8249def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac 8252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace statsd 8262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace os 8272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace android