1ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen/*
2ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * Copyright (C) 2017 The Android Open Source Project
3ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen *
4ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * Licensed under the Apache License, Version 2.0 (the "License");
5ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * you may not use this file except in compliance with the License.
6ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * You may obtain a copy of the License at
7ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen *
8ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen *      http://www.apache.org/licenses/LICENSE-2.0
9ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen *
10ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * Unless required by applicable law or agreed to in writing, software
11ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * distributed under the License is distributed on an "AS IS" BASIS,
12ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * See the License for the specific language governing permissions and
14ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen * limitations under the License.
15ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen */
16ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen
172087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac#pragma once
182087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac
192087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac#include <gtest/gtest_prod.h>
209fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato#include "config/ConfigListener.h"
219fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato#include "logd/LogReader.h"
2244cf27c14880005df093f372491c593e1a9a3c58Yao Chen#include "metrics/MetricsManager.h"
239fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato#include "packages/UidMap.h"
24fa22d65f146c94873ba98b768b08c643424c4477Chenjie Yu#include "external/StatsPullerManager.h"
259fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato
269fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
27ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen
2844cf27c14880005df093f372491c593e1a9a3c58Yao Chen#include <stdio.h>
290656b7a158f6f71989e76ba55423217e3e75d8b4David Chen#include <unordered_map>
300656b7a158f6f71989e76ba55423217e3e75d8b4David Chen
31906a35c814817c8bd503c3f4df8af9a2f622169dBookatznamespace android {
32906a35c814817c8bd503c3f4df8af9a2f622169dBookatznamespace os {
33906a35c814817c8bd503c3f4df8af9a2f622169dBookatznamespace statsd {
34ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen
35e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu// Keep this in sync with DumpReportReason enum in stats_log.proto
36e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yuenum DumpReportReason {
37e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    DEVICE_SHUTDOWN = 1,
38e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    CONFIG_UPDATED = 2,
39e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    CONFIG_REMOVED = 3,
40e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    GET_DATA_CALLED = 4,
41e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    ADB_DUMP = 5,
42e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    CONFIG_RESET = 6,
43e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu    STATSCOMPANION_DIED = 7
44e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu};
45e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu
469fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onoratoclass StatsLogProcessor : public ConfigListener {
47ab273e2e13f87d57f66395c52df424710b8066e1Yao Chenpublic:
48932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    StatsLogProcessor(const sp<UidMap>& uidMap, const sp<AlarmMonitor>& anomalyAlarmMonitor,
49932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac                      const sp<AlarmMonitor>& subscriberTriggerAlarmMonitor,
5015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac                      const int64_t timeBaseNs,
5148944901f7e6334724efadda6c6b27d9e88fc9e2David Chen                      const std::function<bool(const ConfigKey&)>& sendBroadcast);
52ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen    virtual ~StatsLogProcessor();
53ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen
54163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    void OnLogEvent(LogEvent* event, bool reconnectionStarts);
55163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
56163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    // for testing only.
57d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    void OnLogEvent(LogEvent* event);
58ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen
59c04feba805c5acde92638a062cc13030fc4d3308Yangster-mac    void OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key,
60c04feba805c5acde92638a062cc13030fc4d3308Yangster-mac                         const StatsdConfig& config);
619fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato    void OnConfigRemoved(const ConfigKey& key);
620656b7a158f6f71989e76ba55423217e3e75d8b4David Chen
637c334a129e93e405a72e8299a1cd928af079d14fYangster    size_t GetMetricsSize(const ConfigKey& key) const;
647c334a129e93e405a72e8299a1cd928af079d14fYangster
65e68f3a5811209eeab71976bc583c6075d9a5979aYangster-mac    void onDumpReport(const ConfigKey& key, const int64_t dumpTimeNs,
6656ae0d9a48212c6e886e5887a6f9191f3020af40David Chen                      const bool include_current_partial_bucket,
67e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu                      const DumpReportReason dumpReportReason, vector<uint8_t>* outData);
68cc5adef2d0c5f96a225fd69517fd1eecb557f46dBookatz
69932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies anomaly alarmSet. */
70e2cd6d509b17894b95d14523ae3e7c4c7a9a74e3Yangster-mac    void onAnomalyAlarmFired(
71b142cc8add29c8c97f6134d35873d23db666027cYangster-mac            const int64_t& timestampNs,
72932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac            unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet);
73932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac
74932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies periodic alarmSet. */
75932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    void onPeriodicAlarmFired(
76b142cc8add29c8c97f6134d35873d23db666027cYangster-mac            const int64_t& timestampNs,
77932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac            unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet);
7831eb67b3498d326659b2b164ff367a01a793d641yro
79947fbce521d9e8377df03e3c1c31884ed5577f32yro    /* Flushes data to disk. Data on memory will be gone after written to disk. */
80892f3d32293b8358c72da4a94633827abbda640bYangster-mac    void WriteDataToDisk(const DumpReportReason dumpReportReason);
81892f3d32293b8358c72da4a94633827abbda640bYangster-mac
82892f3d32293b8358c72da4a94633827abbda640bYangster-mac    // Reset all configs.
83892f3d32293b8358c72da4a94633827abbda640bYangster-mac    void resetConfigs();
84947fbce521d9e8377df03e3c1c31884ed5577f32yro
85b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    inline sp<UidMap> getUidMap() {
86b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac        return mUidMap;
87b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac    }
88b5bc74122fb95c81bedad625160fb8d144a863cdYangster-mac
89884c8c130fde0d02ada1316f7c27f0f55e7e48b9Yao Chen    void dumpStates(FILE* out, bool verbose);
90884c8c130fde0d02ada1316f7c27f0f55e7e48b9Yao Chen
9115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    void informPullAlarmFired(const int64_t timestampNs);
92b142cc8add29c8c97f6134d35873d23db666027cYangster-mac
93d37bc23f5094ebb803abe93c9e3ca27698da35a9David Chen    int64_t getLastReportTimeNs(const ConfigKey& key);
94d37bc23f5094ebb803abe93c9e3ca27698da35a9David Chen
95876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen    inline void setPrintLogs(bool enabled) {
96876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen#ifdef VERY_VERBOSE_PRINTING
97876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen        std::lock_guard<std::mutex> lock(mMetricsMutex);
98876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen        mPrintAllLogs = enabled;
99876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen#endif
100876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen    }
101876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen
10248944901f7e6334724efadda6c6b27d9e88fc9e2David Chen    // Add a specific config key to the possible configs to dump ASAP.
10348944901f7e6334724efadda6c6b27d9e88fc9e2David Chen    void noteOnDiskData(const ConfigKey& key);
10448944901f7e6334724efadda6c6b27d9e88fc9e2David Chen
105ab273e2e13f87d57f66395c52df424710b8066e1Yao Chenprivate:
106be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    // For testing only.
107be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    inline sp<AlarmMonitor> getAnomalyAlarmMonitor() const {
108be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac        return mAnomalyAlarmMonitor;
109be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    }
110be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac
111684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac    inline sp<AlarmMonitor> getPeriodicAlarmMonitor() const {
112684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac        return mPeriodicAlarmMonitor;
113684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac    }
114684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac
115b0d0628a2915449db2c4ec071bea0cdeff3af210Yangster-mac    mutable mutex mMetricsMutex;
1161d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen
117d10f7b1c7bdb1c66aa04148945cae9733ee4cadfYao Chen    std::unordered_map<ConfigKey, sp<MetricsManager>> mMetricsManagers;
118de70169109c57787a23c732ec4b361ade2e9850eDavid Chen
1191d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen    std::unordered_map<ConfigKey, long> mLastBroadcastTimes;
12069007c82625dd8b19bd68d1031191e2ff83b5f49yro
121d9269e2ee70b01cad3dda14c786e0e4434192248David Chen    // Tracks when we last checked the bytes consumed for each config key.
122d9269e2ee70b01cad3dda14c786e0e4434192248David Chen    std::unordered_map<ConfigKey, long> mLastByteSizeTimes;
123d9269e2ee70b01cad3dda14c786e0e4434192248David Chen
12448944901f7e6334724efadda6c6b27d9e88fc9e2David Chen    // Tracks which config keys has metric reports on disk
12548944901f7e6334724efadda6c6b27d9e88fc9e2David Chen    std::set<ConfigKey> mOnDiskDataConfigs;
12648944901f7e6334724efadda6c6b27d9e88fc9e2David Chen
1279fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato    sp<UidMap> mUidMap;  // Reference to the UidMap to lookup app name and version for each uid.
12831eb67b3498d326659b2b164ff367a01a793d641yro
129fa22d65f146c94873ba98b768b08c643424c4477Chenjie Yu    StatsPullerManager mStatsPullerManager;
130fa22d65f146c94873ba98b768b08c643424c4477Chenjie Yu
131932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    sp<AlarmMonitor> mAnomalyAlarmMonitor;
132932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac
133932ececa1674c59a8da9f3e32d2651e781b86fc4Yangster-mac    sp<AlarmMonitor> mPeriodicAlarmMonitor;
134e2cd6d509b17894b95d14523ae3e7c4c7a9a74e3Yangster-mac
135b142cc8add29c8c97f6134d35873d23db666027cYangster-mac    void resetIfConfigTtlExpiredLocked(const int64_t timestampNs);
136b142cc8add29c8c97f6134d35873d23db666027cYangster-mac
137b142cc8add29c8c97f6134d35873d23db666027cYangster-mac    void OnConfigUpdatedLocked(
138b142cc8add29c8c97f6134d35873d23db666027cYangster-mac        const int64_t currentTimestampNs, const ConfigKey& key, const StatsdConfig& config);
139b142cc8add29c8c97f6134d35873d23db666027cYangster-mac
140892f3d32293b8358c72da4a94633827abbda640bYangster-mac    void WriteDataToDiskLocked(const DumpReportReason dumpReportReason);
141892f3d32293b8358c72da4a94633827abbda640bYangster-mac    void WriteDataToDiskLocked(const ConfigKey& key, const int64_t timestampNs,
142892f3d32293b8358c72da4a94633827abbda640bYangster-mac                               const DumpReportReason dumpReportReason);
143e68f3a5811209eeab71976bc583c6075d9a5979aYangster-mac
144b142cc8add29c8c97f6134d35873d23db666027cYangster-mac    void onConfigMetricsReportLocked(const ConfigKey& key, const int64_t dumpTimeStampNs,
145e68f3a5811209eeab71976bc583c6075d9a5979aYangster-mac                                     const bool include_current_partial_bucket,
146e36018b2724b5ae40180f956b16c3e276855b99bChenjie Yu                                     const DumpReportReason dumpReportReason,
1474beccbe3de7537365856bbd2a34be8d6f226b8b8yro                                     util::ProtoOutputStream* proto);
148861795096296ebbe6d5b147519ad52a43b4b957cYangster-mac
1491d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen    /* Check if we should send a broadcast if approaching memory limits and if we're over, we
1501d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen     * actually delete the data. */
151b142cc8add29c8c97f6134d35873d23db666027cYangster-mac    void flushIfNecessaryLocked(int64_t timestampNs, const ConfigKey& key,
152b0d0628a2915449db2c4ec071bea0cdeff3af210Yangster-mac                                MetricsManager& metricsManager);
15331eb67b3498d326659b2b164ff367a01a793d641yro
154d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    // Maps the isolated uid in the log event to host uid if the log event contains uid fields.
155d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    void mapIsolatedUidToHostUidIfNecessaryLocked(LogEvent* event) const;
156d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac
157d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    // Handler over the isolated uid change event.
158d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac    void onIsolatedUidChangedEventLocked(const LogEvent& event);
159d40053eb8bcb19c7c3b080a36714566bb4e4a748Yangster-mac
160892f3d32293b8358c72da4a94633827abbda640bYangster-mac    // Reset all configs.
161892f3d32293b8358c72da4a94633827abbda640bYangster-mac    void resetConfigsLocked(const int64_t timestampNs);
162892f3d32293b8358c72da4a94633827abbda640bYangster-mac    // Reset the specified configs.
163163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    void resetConfigsLocked(const int64_t timestampNs, const std::vector<ConfigKey>& configs);
164163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
1651d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen    // Function used to send a broadcast so that receiver for the config key can call getData
1661d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7David Chen    // to retrieve the stored data.
16748944901f7e6334724efadda6c6b27d9e88fc9e2David Chen    std::function<bool(const ConfigKey& key)> mSendBroadcast;
16869007c82625dd8b19bd68d1031191e2ff83b5f49yro
16915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    const int64_t mTimeBaseNs;
17085ed8387135849f256cecb4429c75938ad91cd55Chenjie Yu
171163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    // Largest timestamp of the events that we have processed.
172163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    int64_t mLargestTimestampSeen = 0;
173163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
174163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    int64_t mLastTimestampSeen = 0;
175163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
176163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    bool mInReconnection = false;
177163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
178163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    // Processed log count
179163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    uint64_t mLogCount = 0;
180163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen
181163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    // Log loss detected count
182163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    int mLogLossCount = 0;
1838f42ba0e2c70a441bc7821dd32d5bab1c562b062Yao Chen
184fa22d65f146c94873ba98b768b08c643424c4477Chenjie Yu    long mLastPullerCacheClearTimeSec = 0;
185fa22d65f146c94873ba98b768b08c643424c4477Chenjie Yu
186876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen#ifdef VERY_VERBOSE_PRINTING
187876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen    bool mPrintAllLogs = false;
188876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen#endif
189876889cb760e99221c2fd77c7d67d5409bda0bc7Yao Chen
190163d2602dbc79133096b3dec7920ee157ff1a88bYao Chen    FRIEND_TEST(StatsLogProcessorTest, TestOutOfOrderLogs);
191d9269e2ee70b01cad3dda14c786e0e4434192248David Chen    FRIEND_TEST(StatsLogProcessorTest, TestRateLimitByteSize);
192d9269e2ee70b01cad3dda14c786e0e4434192248David Chen    FRIEND_TEST(StatsLogProcessorTest, TestRateLimitBroadcast);
193d9269e2ee70b01cad3dda14c786e0e4434192248David Chen    FRIEND_TEST(StatsLogProcessorTest, TestDropWhenByteSizeTooLarge);
1948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration1);
1958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration2);
1968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration3);
1978a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration1);
1988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration2);
1998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration3);
2008a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks1);
2018a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen    FRIEND_TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks2);
202e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    FRIEND_TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid);
203e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac    FRIEND_TEST(AttributionE2eTest, TestAttributionMatchAndSliceByChain);
20487718e283a62660eaa0e39fd780c97a290da988fYangster-mac    FRIEND_TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent);
20515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents);
20615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    FRIEND_TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm);
20715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    FRIEND_TEST(GaugeMetricE2eTest, TestAllConditionChangesSamplePulledEvents);
20815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
20915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac    FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
21015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac
21113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestCreateCountMetric_NoLink_OR_CombinationCondition);
21213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestCreateCountMetric_Link_OR_CombinationCondition);
21313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_OR_CombinationCondition);
21413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_OR_CombinationCondition);
21513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
21613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_SimpleCondition);
21713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_SimpleCondition);
21813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_SimpleCondition);
21913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
22013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_AND_CombinationCondition);
22113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_AND_CombinationCondition);
22213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster    FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_AND_CombinationCondition);
22313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster
224be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket);
225be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets);
226be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket);
227be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets);
228be10ddfe46ba6371bcd02cb57a06782e6b18d371Yangster-mac    FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period);
229b142cc8add29c8c97f6134d35873d23db666027cYangster-mac
230684d195227bf9eaeb21698cbdcf865afb570c454Yangster-mac    FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms);
231b142cc8add29c8c97f6134d35873d23db666027cYangster-mac    FRIEND_TEST(ConfigTtlE2eTest, TestCountMetric);
232ab273e2e13f87d57f66395c52df424710b8066e1Yao Chen};
233906a35c814817c8bd503c3f4df8af9a2f622169dBookatz
234ef99c4fa23b42fe6e58db706b9f4780018b6bf3eYao Chen}  // namespace statsd
235ef99c4fa23b42fe6e58db706b9f4780018b6bf3eYao Chen}  // namespace os
236ef99c4fa23b42fe6e58db706b9f4780018b6bf3eYao Chen}  // namespace android
237