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