statsd_test_util.cpp revision 87718e283a62660eaa0e39fd780c97a290da988f
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 <gtest/gtest.h> 162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac#include "statsd_test_util.h" 172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 182087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace android { 192087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace os { 202087716f2bdca90c7c3034d556ac12911bd8018eYangster-macnamespace statsd { 212087716f2bdca90c7c3034d556ac12911bd8018eYangster-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 302087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateWakelockStateChangedAtomMatcher(const string& name, 312087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac WakelockStateChanged::State state) { 322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 3394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::WAKELOCK_STATE_CHANGED); 362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(4); // State field. 382087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 412087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 422087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateAcquireWakelockAtomMatcher() { 432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedAtomMatcher("AcquireWakelock", WakelockStateChanged::ACQUIRE); 442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 452087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 462087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateReleaseWakelockAtomMatcher() { 472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedAtomMatcher("ReleaseWakelock", WakelockStateChanged::RELEASE); 482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 492087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 502087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenStateChangedAtomMatcher( 512087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& name, ScreenStateChanged::State state) { 522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 5394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 542087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::SCREEN_STATE_CHANGED); 562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 572087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(1); // State field. 582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 622087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOnAtomMatcher() { 632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateScreenStateChangedAtomMatcher("ScreenTurnedOn", ScreenStateChanged::STATE_ON); 642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 662087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateScreenTurnedOffAtomMatcher() { 672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateScreenStateChangedAtomMatcher("ScreenTurnedOff", ScreenStateChanged::STATE_OFF); 682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 702087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStateChangedAtomMatcher( 712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& name, SyncStateChanged::State state) { 722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 7394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::SYNC_STATE_CHANGED); 762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(3); // State field. 782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(state); 792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 822087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncStartAtomMatcher() { 832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedAtomMatcher("SyncStart", SyncStateChanged::ON); 842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 862087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateSyncEndAtomMatcher() { 872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedAtomMatcher("SyncEnd", SyncStateChanged::OFF); 882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 902087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateActivityForegroundStateChangedAtomMatcher( 912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& name, ActivityForegroundStateChanged::Activity activity) { 922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 9394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED); 962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(4); // Activity field. 982087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(activity); 992087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1012087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1022087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToBackgroundAtomMatcher() { 1032087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedAtomMatcher( 1042087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac "MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND); 1052087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1062087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1072087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateMoveToForegroundAtomMatcher() { 1082087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedAtomMatcher( 1092087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac "MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND); 1102087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1112087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1122087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessLifeCycleStateChangedAtomMatcher( 1132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& name, ProcessLifeCycleStateChanged::Event event) { 1142087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AtomMatcher atom_matcher; 11594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac atom_matcher.set_id(StringToId(name)); 1162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); 1172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac simple_atom_matcher->set_atom_id(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED); 1182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); 1192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_field(3); // Process state field. 1202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac field_value_matcher->set_eq_int(event); 1212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return atom_matcher; 1222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1242087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAtomMatcher CreateProcessCrashAtomMatcher() { 1252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateProcessLifeCycleStateChangedAtomMatcher( 1262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac "ProcessCrashed", ProcessLifeCycleStateChanged::PROCESS_CRASHED); 1272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1302087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOnPredicate() { 1312087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 13294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("ScreenIsOn")); 13394e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOn")); 13494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOff")); 1352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 1362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1382087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateScreenIsOffPredicate() { 1392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 14094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("ScreenIsOff")); 14194e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("ScreenTurnedOff")); 14294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ScreenTurnedOn")); 1432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 1442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1452087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1462087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateHoldingWakelockPredicate() { 1472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 14894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("HoldingWakelock")); 14994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("AcquireWakelock")); 15094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("ReleaseWakelock")); 1512087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 1522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1542087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsSyncingPredicate() { 1552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 15694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("IsSyncing")); 15794e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("SyncStart")); 15894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("SyncEnd")); 1592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 1602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1622087716f2bdca90c7c3034d556ac12911bd8018eYangster-macPredicate CreateIsInBackgroundPredicate() { 1632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate predicate; 16494e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.set_id(StringToId("IsInBackground")); 16594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_start(StringToId("MoveToBackground")); 16694e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac predicate.mutable_simple_predicate()->set_stop(StringToId("MoveToForeground")); 1672087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return predicate; 1682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1702087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid addPredicateToPredicateCombination(const Predicate& predicate, 1712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac Predicate* combinationPredicate) { 17294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac combinationPredicate->mutable_combination()->add_predicate(predicate.id()); 1732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1752087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidDimensions(const int atomId, 1762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<Position>& positions) { 1772087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 1782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 1792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const auto position : positions) { 1802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto child = dimensions.add_child(); 1812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_field(1); 1822087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_position(position); 1832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(1); 1842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 1852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 1862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 1872087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 1882087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateAttributionUidAndTagDimensions(const int atomId, 1892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<Position>& positions) { 1902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 1912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 1922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const auto position : positions) { 1932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto child = dimensions.add_child(); 1942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_field(1); 1952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->set_position(position); 1962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(1); 1972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac child->add_child()->set_field(2); 1982087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 1992087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 2002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2012087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2022087716f2bdca90c7c3034d556ac12911bd8018eYangster-macFieldMatcher CreateDimensions(const int atomId, const std::vector<int>& fields) { 2032087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac FieldMatcher dimensions; 2042087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.set_field(atomId); 2052087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac for (const int field : fields) { 2062087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac dimensions.add_child()->set_field(field); 2072087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac } 2082087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return dimensions; 2092087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2102087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2112087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateScreenStateChangedEvent( 2122087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const ScreenStateChanged::State state, uint64_t timestampNs) { 2132087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::SCREEN_STATE_CHANGED, timestampNs); 2142087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac EXPECT_TRUE(event->write(state)); 2152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 2162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 2172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2192087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateWakelockStateChangedEvent( 2202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<AttributionNode>& attributions, const string& wakelockName, 2212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const WakelockStateChanged::State state, uint64_t timestampNs) { 2222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::WAKELOCK_STATE_CHANGED, timestampNs); 2232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(attributions); 2242087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(WakelockStateChanged::PARTIAL); 2252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(wakelockName); 2262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(state); 2272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 2282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 2292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2302087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2312087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAcquireWakelockEvent( 2322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<AttributionNode>& attributions, 2332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& wakelockName, uint64_t timestampNs) { 2342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedEvent( 2352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attributions, wakelockName, WakelockStateChanged::ACQUIRE, timestampNs); 2362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2382087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateReleaseWakelockEvent( 2392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const std::vector<AttributionNode>& attributions, 2402087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const string& wakelockName, uint64_t timestampNs) { 2412087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateWakelockStateChangedEvent( 2422087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attributions, wakelockName, WakelockStateChanged::RELEASE, timestampNs); 2432087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2442087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2452087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent( 2462087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) { 2472087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>( 2482087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs); 2492087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(uid); 2502087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write("pkg_name"); 2512087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write("class_name"); 2522087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(activity); 2532087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 2542087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 2552087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2562087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2572087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) { 2582087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedEvent( 2592087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs); 2602087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2612087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2622087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) { 2632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateActivityForegroundStateChangedEvent( 2642087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs); 2652087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2662087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2672087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStateChangedEvent( 2682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const int uid, const string& name, const SyncStateChanged::State state, uint64_t timestampNs) { 2692087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto event = std::make_unique<LogEvent>(android::util::SYNC_STATE_CHANGED, timestampNs); 2702087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(uid); 2712087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(name); 2722087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->write(state); 2732087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac event->init(); 2742087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return event; 2752087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2762087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2772087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncStartEvent( 2782087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const int uid, const string& name, uint64_t timestampNs){ 2792087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedEvent(uid, name, SyncStateChanged::ON, timestampNs); 2802087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2812087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2822087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateSyncEndEvent( 2832087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const int uid, const string& name, uint64_t timestampNs) { 2842087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateSyncStateChangedEvent(uid, name, SyncStateChanged::OFF, timestampNs); 2852087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2862087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2872087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent( 2882087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const int uid, const ProcessLifeCycleStateChanged::Event event, uint64_t timestampNs) { 2892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac auto logEvent = std::make_unique<LogEvent>( 2902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs); 2912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->write(uid); 2922087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->write(""); 2932087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->write(event); 2942087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac logEvent->init(); 2952087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return logEvent; 2962087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 2972087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 2982087716f2bdca90c7c3034d556ac12911bd8018eYangster-macstd::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) { 2992087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return CreateProcessLifeCycleStateChangedEvent( 3002087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac uid, ProcessLifeCycleStateChanged::PROCESS_CRASHED, timestampNs); 3012087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3022087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 303d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-macstd::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent( 304d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac int isolatedUid, int hostUid, bool is_create, uint64_t timestampNs) { 305d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac auto logEvent = std::make_unique<LogEvent>( 306d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac android::util::ISOLATED_UID_CHANGED, timestampNs); 307d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(hostUid); 308d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(isolatedUid); 309d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->write(is_create); 310d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac logEvent->init(); 311d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac return logEvent; 312d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac} 313d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac 3142087716f2bdca90c7c3034d556ac12911bd8018eYangster-macsp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const StatsdConfig& config, 3152087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const ConfigKey& key) { 3162087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac sp<UidMap> uidMap = new UidMap(); 3172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac sp<AnomalyMonitor> anomalyMonitor = new AnomalyMonitor(10); // 10 seconds 3182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac sp<StatsLogProcessor> processor = new StatsLogProcessor( 3192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac uidMap, anomalyMonitor, timeBaseSec, [](const ConfigKey&){}); 3202087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac processor->OnConfigUpdated(key, config); 3212087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return processor; 3222087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3232087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3242087716f2bdca90c7c3034d556ac12911bd8018eYangster-macAttributionNode CreateAttribution(const int& uid, const string& tag) { 3252087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac AttributionNode attribution; 3262087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attribution.set_uid(uid); 3272087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac attribution.set_tag(tag); 3282087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return attribution; 3292087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3302087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 3312087716f2bdca90c7c3034d556ac12911bd8018eYangster-macvoid sortLogEventsByTimestamp(std::vector<std::unique_ptr<LogEvent>> *events) { 3322087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac std::sort(events->begin(), events->end(), 3332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac [](const std::unique_ptr<LogEvent>& a, const std::unique_ptr<LogEvent>& b) { 3342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac return a->GetTimestampNs() < b->GetTimestampNs(); 3352087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac }); 3362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} 3372087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac 33894e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-macint64_t StringToId(const string& str) { 33994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac return static_cast<int64_t>(std::hash<std::string>()(str)); 34094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac} 341b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 342b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidDimension(const DimensionsValue& value, int atomId, int uid) { 343b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 344b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value_size(), 1); 345b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 346b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1); 347b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 348b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 349b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 1); 350b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 351b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 352b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 353b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 354b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 355b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 356b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateUidDimension(const DimensionsValue& value, int atomId, int uid) { 357b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 358b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value_size(), 1); 359b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 360b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1); 361b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 362b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 363b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 1); 364b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 365b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 366b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 367b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 368b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 369b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 370b5bc74122fb95c81bedad625160fb8d144a863cdYangster-macvoid ValidateAttributionUidAndTagDimension( 371b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac const DimensionsValue& value, int atomId, int uid, const std::string& tag) { 372b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.field(), atomId); 373b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value_size(), 1); 374b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Attribution field. 375b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0).field(), 1); 376b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac // Uid only. 377b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 378b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value_size(), 2); 379b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 380b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).field(), 1); 381b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 382b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(0).value_int(), uid); 383b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 384b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(1).field(), 2); 385b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac EXPECT_EQ(value.value_tuple().dimensions_value(0) 386b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac .value_tuple().dimensions_value(1).value_str(), tag); 387b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac} 388b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac 3892087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace statsd 3902087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace os 3912087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac} // namespace android