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