115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// Copyright (C) 2017 The Android Open Source Project 215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// 315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// Licensed under the Apache License, Version 2.0 (the "License"); 415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// you may not use this file except in compliance with the License. 515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// You may obtain a copy of the License at 615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// 715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// http://www.apache.org/licenses/LICENSE-2.0 815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// 915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// Unless required by applicable law or agreed to in writing, software 1015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// distributed under the License is distributed on an "AS IS" BASIS, 1115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// See the License for the specific language governing permissions and 1315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac// limitations under the License. 1415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 1515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#include <gtest/gtest.h> 1615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 1715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#include "src/StatsLogProcessor.h" 1815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#include "src/stats_log_util.h" 1915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#include "tests/statsd_test_util.h" 2015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 2115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#include <vector> 2215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 2315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macnamespace android { 2415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macnamespace os { 2515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macnamespace statsd { 2615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 2715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#ifdef __ANDROID__ 2815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 2915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macnamespace { 3015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 3115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macStatsdConfig CreateStatsdConfig(const GaugeMetric::SamplingType sampling_type) { 3215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsdConfig config; 3315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root. 3415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto temperatureAtomMatcher = CreateTemperatureAtomMatcher(); 3515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac *config.add_atom_matcher() = temperatureAtomMatcher; 3615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac *config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher(); 3715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac *config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher(); 3815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 3915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenIsOffPredicate = CreateScreenIsOffPredicate(); 4015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac *config.add_predicate() = screenIsOffPredicate; 4115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 4215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto gaugeMetric = config.add_gauge_metric(); 4315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->set_id(123456); 4415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->set_what(temperatureAtomMatcher.id()); 4515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->set_condition(screenIsOffPredicate.id()); 4615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->set_sampling_type(sampling_type); 4715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->mutable_gauge_fields_filter()->set_include_all(true); 4815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac *gaugeMetric->mutable_dimensions_in_what() = 4915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac CreateDimensions(android::util::TEMPERATURE, {2/* sensor name field */ }); 5015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac gaugeMetric->set_bucket(FIVE_MINUTES); 5115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 5215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac return config; 5315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} 5415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 5515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} // namespace 5615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 5715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macTEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents) { 5815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE); 5915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t baseTimeNs = 10 * NS_PER_SEC; 6015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs; 6115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t bucketSizeNs = 6215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000; 6315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 6415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigKey cfgKey; 6515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto processor = CreateStatsLogProcessor( 6615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac baseTimeNs, configAddedTimeNs, config, cfgKey); 6715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(processor->mMetricsManagers.size(), 1u); 6815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); 6958e609e33947fa912b50fc4fc0daed21facd28a0Yangster-mac processor->mStatsPullerManager.ForceClearPullerCache(); 7015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 7115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int startBucketNum = processor->mMetricsManagers.begin()->second-> 7215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac mAllMetricProducers[0]->getCurrentBucketNum(); 7315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(startBucketNum, (int64_t)0); 7415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 7515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // When creating the config, the gauge metric producer should register the alarm at the 7615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // end of the current bucket. 7715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ((size_t)1, StatsPullerManagerImpl::GetInstance().mReceivers.size()); 7815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(bucketSizeNs, 7915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsPullerManagerImpl::GetInstance().mReceivers.begin()-> 8015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac second.front().intervalNs); 8115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t& nextPullTimeNs = StatsPullerManagerImpl::GetInstance().mReceivers.begin()-> 8215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac second.front().nextPullTimeNs; 8315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs); 8415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 8515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 8615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 55); 8715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 8815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 8915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // Pulling alarm arrives on time and reset the sequential pulling alarm. 9015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 1); 9115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 2 * bucketSizeNs, nextPullTimeNs); 9215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 9315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 9415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + bucketSizeNs + 10); 9515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 9615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 9715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 9815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + bucketSizeNs + 100); 9915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 10015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 10115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 1); 10215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, 10315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac nextPullTimeNs); 10415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 10515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 1); 10615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 4 * bucketSizeNs, nextPullTimeNs); 10715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 10815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 10915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 3 * bucketSizeNs + 2); 11015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 11115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 11215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 3); 11315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs); 11415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 11515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 11615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 5 * bucketSizeNs + 1); 11715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 11815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 11915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 2); 12015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 6 * bucketSizeNs, nextPullTimeNs); 12115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 12215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + 2); 12315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 12415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigMetricsReportList reports; 12515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac vector<uint8_t> buffer; 12656ae0d9a48212c6e886e5887a6f9191f3020af40David Chen processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, ADB_DUMP, 12756ae0d9a48212c6e886e5887a6f9191f3020af40David Chen &buffer); 12815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(buffer.size() > 0); 12915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); 1309def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(&reports); 1319def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInReport(&reports); 1329def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestamp(&reports); 13315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports_size()); 13415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports(0).metrics_size()); 13515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsLogReport::GaugeMetricDataWrapper gaugeMetrics; 13615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac sortMetricDataByDimensionsValue( 13715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics); 13815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT((int)gaugeMetrics.data_size(), 1); 13915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 14015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto data = gaugeMetrics.data(0); 14115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(android::util::TEMPERATURE, data.dimensions_in_what().field()); 14215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size()); 14315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(2 /* sensor name field */, 14415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.dimensions_in_what().value_tuple().dimensions_value(0).field()); 14515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty()); 14615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(6, data.bucket_info_size()); 14715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 14815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).atom_size()); 14915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size()); 15015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 15115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size()); 15215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos()); 15315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos()); 15415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(0).atom(0).temperature().sensor_name().empty()); 15515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(0).atom(0).temperature().temperature_dc(), 0); 15615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 15715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(1).atom_size()); 15815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 1, 15915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(1).elapsed_timestamp_nanos(0)); 16015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 16115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos()); 16215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos()); 16315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(1).atom(0).temperature().sensor_name().empty()); 16415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(1).atom(0).temperature().temperature_dc(), 0); 16515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 16615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(2).atom_size()); 16715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size()); 16815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs + 1, 16915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(2).elapsed_timestamp_nanos(0)); 17015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos()); 17115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos()); 17215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(2).atom(0).temperature().sensor_name().empty()); 17315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(2).atom(0).temperature().temperature_dc(), 0); 17415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 17515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(3).atom_size()); 17615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(3).elapsed_timestamp_nanos_size()); 17715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs + 1, 17815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(3).elapsed_timestamp_nanos(0)); 17915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos()); 18015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos()); 18115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(3).atom(0).temperature().sensor_name().empty()); 18215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(3).atom(0).temperature().temperature_dc(), 0); 18315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 18415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(4).atom_size()); 18515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(4).elapsed_timestamp_nanos_size()); 18615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1, 18715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(4).elapsed_timestamp_nanos(0)); 18815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(4).start_bucket_elapsed_nanos()); 18915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(4).end_bucket_elapsed_nanos()); 19015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(4).atom(0).temperature().sensor_name().empty()); 19115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(4).atom(0).temperature().temperature_dc(), 0); 19215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 19315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(5).atom_size()); 19415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(5).elapsed_timestamp_nanos_size()); 19515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs + 2, 19615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(5).elapsed_timestamp_nanos(0)); 19715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(5).start_bucket_elapsed_nanos()); 19815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(5).end_bucket_elapsed_nanos()); 19915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(5).atom(0).temperature().sensor_name().empty()); 20015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(5).atom(0).temperature().temperature_dc(), 0); 20115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} 20215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 20315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macTEST(GaugeMetricE2eTest, TestAllConditionChangesSamplePulledEvents) { 20415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto config = CreateStatsdConfig(GaugeMetric::ALL_CONDITION_CHANGES); 20515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t baseTimeNs = 10 * NS_PER_SEC; 20615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs; 20715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t bucketSizeNs = 20815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000; 20915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 21015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigKey cfgKey; 21115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto processor = CreateStatsLogProcessor( 21215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac baseTimeNs, configAddedTimeNs, config, cfgKey); 21315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(processor->mMetricsManagers.size(), 1u); 21415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); 21558e609e33947fa912b50fc4fc0daed21facd28a0Yangster-mac processor->mStatsPullerManager.ForceClearPullerCache(); 21615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 21715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int startBucketNum = processor->mMetricsManagers.begin()->second-> 21815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac mAllMetricProducers[0]->getCurrentBucketNum(); 21915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(startBucketNum, (int64_t)0); 22015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 22115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 22215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 55); 22315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 22415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 22515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 22615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + bucketSizeNs + 10); 22715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 22815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 22915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 23015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + bucketSizeNs + 100); 23115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 23215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 23315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 23415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 3 * bucketSizeNs + 2); 23515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 23615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 23715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 23815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 5 * bucketSizeNs + 1); 23915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 24015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 24115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 5 * bucketSizeNs + 3); 24215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 24315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 24415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 5 * bucketSizeNs + 10); 24515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 24615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 24715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigMetricsReportList reports; 24815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac vector<uint8_t> buffer; 24956ae0d9a48212c6e886e5887a6f9191f3020af40David Chen processor->onDumpReport(cfgKey, configAddedTimeNs + 8 * bucketSizeNs + 10, false, ADB_DUMP, 25056ae0d9a48212c6e886e5887a6f9191f3020af40David Chen &buffer); 25115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(buffer.size() > 0); 25215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); 2539def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(&reports); 2549def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInReport(&reports); 2559def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestamp(&reports); 25615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports_size()); 25715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports(0).metrics_size()); 25815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsLogReport::GaugeMetricDataWrapper gaugeMetrics; 25915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac sortMetricDataByDimensionsValue( 26015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics); 26115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT((int)gaugeMetrics.data_size(), 1); 26215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 26315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto data = gaugeMetrics.data(0); 26415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(android::util::TEMPERATURE, data.dimensions_in_what().field()); 26515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size()); 26615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(2 /* sensor name field */, 26715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.dimensions_in_what().value_tuple().dimensions_value(0).field()); 26815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty()); 26915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(3, data.bucket_info_size()); 27015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 27115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).atom_size()); 27215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size()); 27315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 27415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size()); 27515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos()); 27615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos()); 27715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(0).atom(0).temperature().sensor_name().empty()); 27815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(0).atom(0).temperature().temperature_dc(), 0); 27915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 28015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(1).atom_size()); 28115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs + 100, 28215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(1).elapsed_timestamp_nanos(0)); 28315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 28415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos()); 28515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos()); 28615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(1).atom(0).temperature().sensor_name().empty()); 28715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(1).atom(0).temperature().temperature_dc(), 0); 28815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 28915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(2, data.bucket_info(2).atom_size()); 29015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size()); 29115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 1, 29215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(2).elapsed_timestamp_nanos(0)); 29315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs + 10, 29415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(2).elapsed_timestamp_nanos(1)); 29515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos()); 29615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos()); 29715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(2).atom(0).temperature().sensor_name().empty()); 29815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(2).atom(0).temperature().temperature_dc(), 0); 29915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(2).atom(1).temperature().sensor_name().empty()); 30015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(2).atom(1).temperature().temperature_dc(), 0); 30115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} 30215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 30315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 30415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macTEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm) { 30515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto config = CreateStatsdConfig(GaugeMetric::RANDOM_ONE_SAMPLE); 30615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t baseTimeNs = 10 * NS_PER_SEC; 30715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t configAddedTimeNs = 10 * 60 * NS_PER_SEC + baseTimeNs; 30815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t bucketSizeNs = 30915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac TimeUnitToBucketSizeInMillis(config.gauge_metric(0).bucket()) * 1000000; 31015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 31115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigKey cfgKey; 31215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto processor = CreateStatsLogProcessor( 31315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac baseTimeNs, configAddedTimeNs, config, cfgKey); 31415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(processor->mMetricsManagers.size(), 1u); 31515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); 31658e609e33947fa912b50fc4fc0daed21facd28a0Yangster-mac processor->mStatsPullerManager.ForceClearPullerCache(); 31715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 31815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int startBucketNum = processor->mMetricsManagers.begin()->second-> 31915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac mAllMetricProducers[0]->getCurrentBucketNum(); 32015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(startBucketNum, (int64_t)0); 32115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 32215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // When creating the config, the gauge metric producer should register the alarm at the 32315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // end of the current bucket. 32415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ((size_t)1, StatsPullerManagerImpl::GetInstance().mReceivers.size()); 32515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(bucketSizeNs, 32615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsPullerManagerImpl::GetInstance().mReceivers.begin()-> 32715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac second.front().intervalNs); 32815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac int64_t& nextPullTimeNs = StatsPullerManagerImpl::GetInstance().mReceivers.begin()-> 32915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac second.front().nextPullTimeNs; 33015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + bucketSizeNs, nextPullTimeNs); 33115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 33215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 33315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 55); 33415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 33515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 33615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto screenOnEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_ON, 33715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + bucketSizeNs + 10); 33815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOnEvent.get()); 33915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 34015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // Pulling alarm arrives one bucket size late. 34115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs); 34215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 3 * bucketSizeNs, nextPullTimeNs); 34315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 34415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac screenOffEvent = CreateScreenStateChangedEvent(android::view::DISPLAY_STATE_OFF, 34515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac configAddedTimeNs + 3 * bucketSizeNs + 11); 34615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->OnLogEvent(screenOffEvent.get()); 34715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 34815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac // Pulling alarm arrives more than one bucket size late. 34915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac processor->informPullAlarmFired(nextPullTimeNs + bucketSizeNs + 12); 35015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + startBucketNum * bucketSizeNs + 5 * bucketSizeNs, nextPullTimeNs); 35115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 35215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac ConfigMetricsReportList reports; 35315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac vector<uint8_t> buffer; 35456ae0d9a48212c6e886e5887a6f9191f3020af40David Chen processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, ADB_DUMP, 35556ae0d9a48212c6e886e5887a6f9191f3020af40David Chen &buffer); 35615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(buffer.size() > 0); 35715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); 3589def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillDimensionPath(&reports); 3599def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStringInReport(&reports); 3609def8e3995b1034d943a0fd22b6e512bfacdab77Yangster-mac backfillStartEndTimestamp(&reports); 36115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports_size()); 36215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, reports.reports(0).metrics_size()); 36315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac StatsLogReport::GaugeMetricDataWrapper gaugeMetrics; 36415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac sortMetricDataByDimensionsValue( 36515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac reports.reports(0).metrics(0).gauge_metrics(), &gaugeMetrics); 36615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT((int)gaugeMetrics.data_size(), 1); 36715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 36815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac auto data = gaugeMetrics.data(0); 36915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(android::util::TEMPERATURE, data.dimensions_in_what().field()); 37015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size()); 37115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(2 /* sensor name field */, 37215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.dimensions_in_what().value_tuple().dimensions_value(0).field()); 37315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str().empty()); 37415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(3, data.bucket_info_size()); 37515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 37615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).atom_size()); 37715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size()); 37815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 37915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size()); 38015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos()); 38115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos()); 38215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(0).atom(0).temperature().sensor_name().empty()); 38315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(0).atom(0).temperature().temperature_dc(), 0); 38415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 38515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(1).atom_size()); 38615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 3 * bucketSizeNs + 11, 38715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(1).elapsed_timestamp_nanos(0)); 38815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(configAddedTimeNs + 55, data.bucket_info(0).elapsed_timestamp_nanos(0)); 38915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos()); 39015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos()); 39115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(1).atom(0).temperature().sensor_name().empty()); 39215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(1).atom(0).temperature().temperature_dc(), 0); 39315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 39415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(2).atom_size()); 39515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size()); 39615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs + 12, 39715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac data.bucket_info(2).elapsed_timestamp_nanos(0)); 39815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos()); 39915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos()); 40015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_FALSE(data.bucket_info(2).atom(0).temperature().sensor_name().empty()); 40115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac EXPECT_GT(data.bucket_info(2).atom(0).temperature().temperature_dc(), 0); 40215f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 40315f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} 40415f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 40515f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#else 40615f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-macGTEST_LOG_(INFO) << "This test does nothing.\n"; 40715f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac#endif 40815f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac 40915f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} // namespace statsd 41015f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} // namespace os 41115f6bbc24f4d7a3d4481d90a18df33d402ddacbaYangster-mac} // namespace android 412