Merge "Statsd test mapping" into rvc-dev am: e715d2f0e7

Change-Id: I6f02eaad93603ad9ab8c375985c70e5bb584f0b9
This commit is contained in:
Tej Singh
2020-04-11 04:07:20 +00:00
committed by Automerger Merge Worker
12 changed files with 272 additions and 286 deletions

View File

@@ -301,6 +301,8 @@ cc_test {
"-Wno-unused-parameter", "-Wno-unused-parameter",
], ],
require_root: true,
srcs: [ srcs: [
// atom_field_options.proto needs field_options.proto, but that is // atom_field_options.proto needs field_options.proto, but that is
// not included in libprotobuf-cpp-lite, so compile it here. // not included in libprotobuf-cpp-lite, so compile it here.
@@ -373,10 +375,6 @@ cc_test {
include_dirs: ["external/protobuf/src"], include_dirs: ["external/protobuf/src"],
}, },
shared_libs: [
"libprotobuf-cpp-lite",
],
} }
//############################# //#############################

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration description="Config for statsd_test">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="statsd_test->/data/nativetest/statsd_test" />
</target_preparer>
<option name="test-suite-tag" value="apct" />
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/nativetest" />
<option name="module-name" value="statsd_test" />
</test>
</configuration>

7
cmds/statsd/TEST_MAPPING Normal file
View File

@@ -0,0 +1,7 @@
{
"presubmit" : [
{
"name" : "statsd_test"
}
]
}

View File

@@ -181,12 +181,15 @@ message GaugeBucketInfo {
message GaugeMetricData { message GaugeMetricData {
optional DimensionsValue dimensions_in_what = 1; optional DimensionsValue dimensions_in_what = 1;
optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; // Currently unsupported
repeated StateValue slice_by_state = 6;
repeated GaugeBucketInfo bucket_info = 3; repeated GaugeBucketInfo bucket_info = 3;
repeated DimensionsValue dimension_leaf_values_in_what = 4; repeated DimensionsValue dimension_leaf_values_in_what = 4;
optional DimensionsValue dimensions_in_condition = 2 [deprecated = true];
repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true];
} }

View File

@@ -1564,7 +1564,7 @@ TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart) {
// Trigger Activation 1 for Metric 1. Should activate on boot. // Trigger Activation 1 for Metric 1. Should activate on boot.
// Trigger Activation 4 for Metric 2. Should activate immediately. // Trigger Activation 4 for Metric 2. Should activate immediately.
long configAddedTimeNs = metricsManager1->mLastReportTimeNs; int64_t configAddedTimeNs = metricsManager1->mLastReportTimeNs;
std::vector<int> attributionUids = {111}; std::vector<int> attributionUids = {111};
std::vector<string> attributionTags = {"App1"}; std::vector<string> attributionTags = {"App1"};
std::unique_ptr<LogEvent> event1 = CreateAcquireWakelockEvent( std::unique_ptr<LogEvent> event1 = CreateAcquireWakelockEvent(

View File

@@ -65,7 +65,6 @@ TEST(StatsServiceTest, TestGetUidFromArgs) {
args.push(String8("-1")); args.push(String8("-1"));
args.push(String8("0")); args.push(String8("0"));
args.push(String8("1")); args.push(String8("1"));
args.push(String8("9999999999999999999999999999999999"));
args.push(String8("a1")); args.push(String8("a1"));
args.push(String8("")); args.push(String8(""));
@@ -85,14 +84,11 @@ TEST(StatsServiceTest, TestGetUidFromArgs) {
EXPECT_TRUE(service->getUidFromArgs(args, 2, uid)); EXPECT_TRUE(service->getUidFromArgs(args, 2, uid));
EXPECT_EQ(1, uid); EXPECT_EQ(1, uid);
// "999999999999999999" // "a1"
EXPECT_FALSE(service->getUidFromArgs(args, 3, uid)); EXPECT_FALSE(service->getUidFromArgs(args, 3, uid));
// "a1"
EXPECT_FALSE(service->getUidFromArgs(args, 4, uid));
// "" // ""
EXPECT_FALSE(service->getUidFromArgs(args, 5, uid)); EXPECT_FALSE(service->getUidFromArgs(args, 4, uid));
// For a non-userdebug, uid "1" cannot be impersonated. // For a non-userdebug, uid "1" cannot be impersonated.
service->mEngBuild = false; service->mEngBuild = false;

View File

@@ -141,36 +141,38 @@ TEST(CountMetricE2eTest, TestSlicedState) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size()); StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
EXPECT_EQ(3, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets // For each CountMetricData, check StateValue info is correct and buckets
// have correct counts. // have correct counts.
auto data = reports.reports(0).metrics(0).count_metrics().data(0); auto data = countMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(1, data.bucket_info(1).count());
data = reports.reports(0).metrics(0).count_metrics().data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN, EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_UNKNOWN,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(2); data = countMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value()); EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, data.slice_by_state(0).value());
EXPECT_EQ(2, data.bucket_info_size()); ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(2, data.bucket_info(1).count()); EXPECT_EQ(2, data.bucket_info(1).count());
data = countMetrics.data(2);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, data.slice_by_state(0).value());
ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(1, data.bucket_info(1).count());
} }
/** /**
@@ -191,7 +193,9 @@ TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
auto syncStartMatcher = CreateSyncStartAtomMatcher(); auto syncStartMatcher = CreateSyncStartAtomMatcher();
*config.add_atom_matcher() = syncStartMatcher; *config.add_atom_matcher() = syncStartMatcher;
auto state = CreateScreenStateWithOnOffMap(); int64_t screenOnId = 4444;
int64_t screenOffId = 9876;
auto state = CreateScreenStateWithOnOffMap(screenOnId, screenOffId);
*config.add_state() = state; *config.add_state() = state;
// Create count metric that slices by screen state with on/off map. // Create count metric that slices by screen state with on/off map.
@@ -321,11 +325,13 @@ TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size()); StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
EXPECT_EQ(3, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets // For each CountMetricData, check StateValue info is correct and buckets
// have correct counts. // have correct counts.
auto data = reports.reports(0).metrics(0).count_metrics().data(0); auto data = countMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -333,23 +339,23 @@ TEST(CountMetricE2eTest, TestSlicedStateWithMap) {
EXPECT_EQ(1, data.bucket_info_size()); EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(1); data = countMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(4, data.bucket_info(0).count());
EXPECT_EQ(2, data.bucket_info(1).count());
data = reports.reports(0).metrics(0).count_metrics().data(2);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
EXPECT_EQ(2, data.bucket_info_size()); EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(1, data.bucket_info(1).count()); EXPECT_EQ(1, data.bucket_info(1).count());
data = countMetrics.data(2);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(4, data.bucket_info(0).count());
EXPECT_EQ(2, data.bucket_info(1).count());
} }
/** /**
@@ -499,50 +505,52 @@ TEST(CountMetricE2eTest, TestSlicedStateWithPrimaryFields) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size()); StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
EXPECT_EQ(5, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets // For each CountMetricData, check StateValue info is correct and buckets
// have correct counts. // have correct counts.
auto data = reports.reports(0).metrics(0).count_metrics().data(0); auto data = countMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(2); data = countMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(3);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value()); EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count()); EXPECT_EQ(2, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(4); data = countMetrics.data(2);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(0).value()); EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(0).value());
EXPECT_EQ(2, data.bucket_info_size()); ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(2, data.bucket_info(1).count()); EXPECT_EQ(2, data.bucket_info(1).count());
data = countMetrics.data(3);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count());
data = countMetrics.data(4);
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
} }
TEST(CountMetricE2eTest, TestMultipleSlicedStates) { TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
@@ -554,7 +562,9 @@ TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", util::APP_CRASH_OCCURRED); CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", util::APP_CRASH_OCCURRED);
*config.add_atom_matcher() = appCrashMatcher; *config.add_atom_matcher() = appCrashMatcher;
auto state1 = CreateScreenStateWithOnOffMap(); int64_t screenOnId = 4444;
int64_t screenOffId = 9876;
auto state1 = CreateScreenStateWithOnOffMap(screenOnId, screenOffId);
*config.add_state() = state1; *config.add_state() = state1;
auto state2 = CreateUidProcessState(); auto state2 = CreateUidProcessState();
*config.add_state() = state2; *config.add_state() = state2;
@@ -725,22 +735,13 @@ TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
EXPECT_EQ(6, reports.reports(0).metrics(0).count_metrics().data_size()); StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
EXPECT_EQ(6, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets // For each CountMetricData, check StateValue info is correct and buckets
// have correct counts. // have correct counts.
auto data = reports.reports(0).metrics(0).count_metrics().data(0); auto data = countMetrics.data(0);
EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(1);
EXPECT_EQ(2, data.slice_by_state_size()); EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -748,53 +749,64 @@ TEST(CountMetricE2eTest, TestMultipleSlicedStates) {
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value()); EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(2); data = countMetrics.data(1);
EXPECT_EQ(2, data.slice_by_state_size()); EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value()); EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
EXPECT_EQ(2, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count());
EXPECT_EQ(1, data.bucket_info(1).count());
data = reports.reports(0).metrics(0).count_metrics().data(3);
EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(4); data = countMetrics.data(2);
EXPECT_EQ(2, data.slice_by_state_size()); EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value()); EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count()); EXPECT_EQ(1, data.bucket_info(0).count());
data = reports.reports(0).metrics(0).count_metrics().data(5); data = countMetrics.data(3);
EXPECT_EQ(2, data.slice_by_state_size()); EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value()); EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value()); EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count()); EXPECT_EQ(2, data.bucket_info(0).count());
data = countMetrics.data(4);
EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
data = countMetrics.data(5);
EXPECT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count());
EXPECT_EQ(1, data.bucket_info(1).count());
} }
} // namespace statsd } // namespace statsd

View File

@@ -98,8 +98,9 @@ TEST(DurationMetricE2eTest, TestOneBucket) {
EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id()); EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
const StatsLogReport::DurationMetricDataWrapper& durationMetrics = StatsLogReport::DurationMetricDataWrapper durationMetrics;
reports.reports(0).metrics(0).duration_metrics(); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size()); EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = durationMetrics.data(0); DurationMetricData data = durationMetrics.data(0);
@@ -180,8 +181,9 @@ TEST(DurationMetricE2eTest, TestTwoBuckets) {
EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id()); EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
const StatsLogReport::DurationMetricDataWrapper& durationMetrics = StatsLogReport::DurationMetricDataWrapper durationMetrics;
reports.reports(0).metrics(0).duration_metrics(); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size()); EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = durationMetrics.data(0); DurationMetricData data = durationMetrics.data(0);
@@ -350,8 +352,9 @@ TEST(DurationMetricE2eTest, TestWithActivation) {
EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id()); EXPECT_EQ(metricId, reports.reports(0).metrics(0).metric_id());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
const StatsLogReport::DurationMetricDataWrapper& durationMetrics = StatsLogReport::DurationMetricDataWrapper durationMetrics;
reports.reports(0).metrics(0).duration_metrics(); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size()); EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = durationMetrics.data(0); DurationMetricData data = durationMetrics.data(0);
@@ -433,9 +436,12 @@ TEST(DurationMetricE2eTest, TestWithCondition) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
// Validate bucket info. // Validate bucket info.
EXPECT_EQ(1, data.bucket_info_size()); EXPECT_EQ(1, data.bucket_info_size());
@@ -532,9 +538,12 @@ TEST(DurationMetricE2eTest, TestWithSlicedCondition) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
// Validate dimension value. // Validate dimension value.
ValidateAttributionUidDimension(data.dimensions_in_what(), ValidateAttributionUidDimension(data.dimensions_in_what(),
util::WAKELOCK_STATE_CHANGED, appUid); util::WAKELOCK_STATE_CHANGED, appUid);
@@ -690,9 +699,12 @@ TEST(DurationMetricE2eTest, TestWithActivationAndSlicedCondition) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(1, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(1, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
// Validate dimension value. // Validate dimension value.
ValidateAttributionUidDimension(data.dimensions_in_what(), ValidateAttributionUidDimension(data.dimensions_in_what(),
util::WAKELOCK_STATE_CHANGED, appUid); util::WAKELOCK_STATE_CHANGED, appUid);
@@ -811,9 +823,12 @@ TEST(DurationMetricE2eTest, TestWithSlicedState) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
EXPECT_EQ(3, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(3, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -826,7 +841,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedState) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(370 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(370 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(1); data = durationMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -839,7 +854,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedState) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(370 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(370 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(2); data = durationMetrics.data(2);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -970,9 +985,12 @@ TEST(DurationMetricE2eTest, TestWithConditionAndSlicedState) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
EXPECT_EQ(3, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(3, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -985,7 +1003,7 @@ TEST(DurationMetricE2eTest, TestWithConditionAndSlicedState) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(420 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(420 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(2); data = durationMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -998,7 +1016,7 @@ TEST(DurationMetricE2eTest, TestWithConditionAndSlicedState) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(420 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(420 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(1); data = durationMetrics.data(2);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
@@ -1020,7 +1038,9 @@ TEST(DurationMetricE2eTest, TestWithSlicedStateMapped) {
auto batterySaverModePredicate = CreateBatterySaverModePredicate(); auto batterySaverModePredicate = CreateBatterySaverModePredicate();
*config.add_predicate() = batterySaverModePredicate; *config.add_predicate() = batterySaverModePredicate;
auto screenStateWithMap = CreateScreenStateWithOnOffMap(); int64_t screenOnId = 4444;
int64_t screenOffId = 9876;
auto screenStateWithMap = CreateScreenStateWithOnOffMap(screenOnId, screenOffId);
*config.add_state() = screenStateWithMap; *config.add_state() = screenStateWithMap;
// Create duration metric that slices by mapped screen state. // Create duration metric that slices by mapped screen state.
@@ -1123,13 +1143,16 @@ TEST(DurationMetricE2eTest, TestWithSlicedStateMapped) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
EXPECT_EQ(2, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(2, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_ON"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
EXPECT_EQ(2, data.bucket_info_size()); EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(130 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(130 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
@@ -1138,11 +1161,11 @@ TEST(DurationMetricE2eTest, TestWithSlicedStateMapped) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(500 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(500 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(1); data = durationMetrics.data(1);
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id()); EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(StringToId("SCREEN_OFF"), data.slice_by_state(0).group_id()); EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(2, data.bucket_info_size()); EXPECT_EQ(2, data.bucket_info_size());
EXPECT_EQ(70 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(70 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
@@ -1314,47 +1337,25 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics()); EXPECT_TRUE(reports.reports(0).metrics(0).has_duration_metrics());
EXPECT_EQ(9, reports.reports(0).metrics(0).duration_metrics().data_size()); StatsLogReport::DurationMetricDataWrapper durationMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).duration_metrics(),
&durationMetrics);
EXPECT_EQ(9, durationMetrics.data_size());
DurationMetricData data = reports.reports(0).metrics(0).duration_metrics().data(0); DurationMetricData data = durationMetrics.data(0);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1, ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock2"); "wakelock1");
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id()); EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND, EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(35 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(40 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(1); data = durationMetrics.data(1);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock2");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(140 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(2);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock1");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker:: kStateUnknown */, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(20 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(3);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1, ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock1"); "wakelock1");
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
@@ -1362,7 +1363,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND, EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(2, data.bucket_info_size()); ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(240 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(240 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
@@ -1370,7 +1371,45 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(330 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(330 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(4); data = durationMetrics.data(2);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock2");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(35 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = durationMetrics.data(3);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock2");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(140 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = durationMetrics.data(4);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock1");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker:: kStateUnknown */, data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(20 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = durationMetrics.data(5);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2, ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock1"); "wakelock1");
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
@@ -1378,12 +1417,24 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND, EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(50 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(50 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(5); data = durationMetrics.data(6);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock2");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker:: kStateUnknown */, data.slice_by_state(0).value());
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(15 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = durationMetrics.data(7);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2, ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock2"); "wakelock2");
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
@@ -1391,7 +1442,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE, EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_FOREGROUND_SERVICE,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(2, data.bucket_info_size()); ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(180 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(180 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
@@ -1399,32 +1450,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(1).start_bucket_elapsed_nanos());
EXPECT_EQ(330 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos()); EXPECT_EQ(330 * NS_PER_SEC, data.bucket_info(1).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(6); data = durationMetrics.data(8);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock2");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker:: kStateUnknown */, data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(15 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(7);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid1,
"wakelock1");
EXPECT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_FOREGROUND,
data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size());
EXPECT_EQ(40 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());
data = reports.reports(0).metrics(0).duration_metrics().data(8);
ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2, ValidateWakelockAttributionUidAndTagDimension(data.dimensions_in_what(), 10, appUid2,
"wakelock2"); "wakelock2");
EXPECT_EQ(1, data.slice_by_state_size()); EXPECT_EQ(1, data.slice_by_state_size());
@@ -1432,7 +1458,7 @@ TEST(DurationMetricE2eTest, TestWithSlicedStatePrimaryFieldsSubset) {
EXPECT_TRUE(data.slice_by_state(0).has_value()); EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND, EXPECT_EQ(android::app::ProcessStateEnum::PROCESS_STATE_IMPORTANT_BACKGROUND,
data.slice_by_state(0).value()); data.slice_by_state(0).value());
EXPECT_EQ(1, data.bucket_info_size()); ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(70 * NS_PER_SEC, data.bucket_info(0).duration_nanos()); EXPECT_EQ(70 * NS_PER_SEC, data.bucket_info(0).duration_nanos());
EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(10 * NS_PER_SEC, data.bucket_info(0).start_bucket_elapsed_nanos());
EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos()); EXPECT_EQ(310 * NS_PER_SEC, data.bucket_info(0).end_bucket_elapsed_nanos());

View File

@@ -391,7 +391,6 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
backfillStartEndTimestamp(&reports); backfillStartEndTimestamp(&reports);
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(4, reports.reports(0).metrics(0).count_metrics().data_size());
StatsLogReport::CountMetricDataWrapper countMetrics; StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
@@ -699,7 +698,6 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
backfillStartEndTimestamp(&reports); backfillStartEndTimestamp(&reports);
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
StatsLogReport::CountMetricDataWrapper countMetrics; StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
@@ -1033,7 +1031,6 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
backfillStartEndTimestamp(&reports); backfillStartEndTimestamp(&reports);
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
StatsLogReport::CountMetricDataWrapper countMetrics; StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
@@ -1257,7 +1254,6 @@ TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation) {
backfillStartEndTimestamp(&reports); backfillStartEndTimestamp(&reports);
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(1, reports.reports(0).metrics_size()); EXPECT_EQ(1, reports.reports(0).metrics_size());
EXPECT_EQ(3, reports.reports(0).metrics(0).count_metrics().data_size());
StatsLogReport::CountMetricDataWrapper countMetrics; StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics); sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
@@ -1695,8 +1691,6 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
backfillStartEndTimestamp(&reports); backfillStartEndTimestamp(&reports);
EXPECT_EQ(1, reports.reports_size()); EXPECT_EQ(1, reports.reports_size());
EXPECT_EQ(2, reports.reports(0).metrics_size()); EXPECT_EQ(2, reports.reports(0).metrics_size());
EXPECT_EQ(5, reports.reports(0).metrics(0).count_metrics().data_size());
EXPECT_EQ(5, reports.reports(0).metrics(1).count_metrics().data_size());
StatsLogReport::CountMetricDataWrapper countMetrics; StatsLogReport::CountMetricDataWrapper countMetrics;

View File

@@ -3726,7 +3726,8 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) {
return true; return true;
})); }));
const StateMap& stateMap = CreateScreenStateOnOffMap(); const StateMap& stateMap =
CreateScreenStateOnOffMap(/*screen on id=*/321, /*screen off id=*/123);
const StateMap_StateGroup screenOnGroup = stateMap.group(0); const StateMap_StateGroup screenOnGroup = stateMap.group(0);
const StateMap_StateGroup screenOffGroup = stateMap.group(1); const StateMap_StateGroup screenOffGroup = stateMap.group(1);

View File

@@ -324,40 +324,29 @@ State CreateOverlayState() {
return state; return state;
} }
State CreateScreenStateWithOnOffMap() { State CreateScreenStateWithOnOffMap(int64_t screenOnId, int64_t screenOffId) {
State state; State state;
state.set_id(StringToId("ScreenStateOnOff")); state.set_id(StringToId("ScreenStateOnOff"));
state.set_atom_id(util::SCREEN_STATE_CHANGED); state.set_atom_id(util::SCREEN_STATE_CHANGED);
auto map = CreateScreenStateOnOffMap(); auto map = CreateScreenStateOnOffMap(screenOnId, screenOffId);
*state.mutable_map() = map; *state.mutable_map() = map;
return state; return state;
} }
State CreateScreenStateWithInDozeMap() { StateMap_StateGroup CreateScreenStateOnGroup(int64_t screenOnId) {
State state;
state.set_id(StringToId("ScreenStateInDoze"));
state.set_atom_id(util::SCREEN_STATE_CHANGED);
auto map = CreateScreenStateInDozeMap();
*state.mutable_map() = map;
return state;
}
StateMap_StateGroup CreateScreenStateOnGroup() {
StateMap_StateGroup group; StateMap_StateGroup group;
group.set_group_id(StringToId("SCREEN_ON")); group.set_group_id(screenOnId);
group.add_value(2); group.add_value(2);
group.add_value(5); group.add_value(5);
group.add_value(6); group.add_value(6);
return group; return group;
} }
StateMap_StateGroup CreateScreenStateOffGroup() { StateMap_StateGroup CreateScreenStateOffGroup(int64_t screenOffId) {
StateMap_StateGroup group; StateMap_StateGroup group;
group.set_group_id(StringToId("SCREEN_OFF")); group.set_group_id(screenOffId);
group.add_value(0); group.add_value(0);
group.add_value(1); group.add_value(1);
group.add_value(3); group.add_value(3);
@@ -365,36 +354,10 @@ StateMap_StateGroup CreateScreenStateOffGroup() {
return group; return group;
} }
StateMap CreateScreenStateOnOffMap() { StateMap CreateScreenStateOnOffMap(int64_t screenOnId, int64_t screenOffId) {
StateMap map; StateMap map;
*map.add_group() = CreateScreenStateOnGroup(); *map.add_group() = CreateScreenStateOnGroup(screenOnId);
*map.add_group() = CreateScreenStateOffGroup(); *map.add_group() = CreateScreenStateOffGroup(screenOffId);
return map;
}
StateMap_StateGroup CreateScreenStateInDozeGroup() {
StateMap_StateGroup group;
group.set_group_id(StringToId("SCREEN_DOZE"));
group.add_value(3);
group.add_value(4);
return group;
}
StateMap_StateGroup CreateScreenStateNotDozeGroup() {
StateMap_StateGroup group;
group.set_group_id(StringToId("SCREEN_NOT_DOZE"));
group.add_value(0);
group.add_value(1);
group.add_value(2);
group.add_value(5);
group.add_value(6);
return group;
}
StateMap CreateScreenStateInDozeMap() {
StateMap map;
*map.add_group() = CreateScreenStateInDozeGroup();
*map.add_group() = CreateScreenStateNotDozeGroup();
return map; return map;
} }
@@ -1038,6 +1001,27 @@ bool EqualsTo(const DimensionsValue& s1, const DimensionsValue& s2) {
} }
} }
bool LessThan(const google::protobuf::RepeatedPtrField<StateValue>& s1,
const google::protobuf::RepeatedPtrField<StateValue>& s2) {
if (s1.size() != s2.size()) {
return s1.size() < s2.size();
}
for (int i = 0; i < s1.size(); i++) {
const StateValue& state1 = s1[i];
const StateValue& state2 = s2[i];
if (state1.atom_id() != state2.atom_id()) {
return state1.atom_id() < state2.atom_id();
}
if (state1.value() != state2.value()) {
return state1.value() < state2.value();
}
if (state1.group_id() != state2.group_id()) {
return state1.group_id() < state2.group_id();
}
}
return false;
}
bool LessThan(const DimensionsValue& s1, const DimensionsValue& s2) { bool LessThan(const DimensionsValue& s1, const DimensionsValue& s2) {
if (s1.field() != s2.field()) { if (s1.field() != s2.field()) {
return s1.field() < s2.field(); return s1.field() < s2.field();
@@ -1086,7 +1070,7 @@ bool LessThan(const DimensionsPair& s1, const DimensionsPair& s2) {
return false; return false;
} }
return LessThan(s1.dimInCondition, s2.dimInCondition); return LessThan(s1.stateValues, s2.stateValues);
} }
void backfillStringInDimension(const std::map<uint64_t, string>& str_map, void backfillStringInDimension(const std::map<uint64_t, string>& str_map,

View File

@@ -138,27 +138,16 @@ State CreateUidProcessState();
// Create State proto for overlay state atom. // Create State proto for overlay state atom.
State CreateOverlayState(); State CreateOverlayState();
State CreateScreenStateWithOnOffMap(); State CreateScreenStateWithOnOffMap(int64_t screenOnId, int64_t screenOffId);
State CreateScreenStateWithInDozeMap();
// Create StateGroup proto for ScreenState ON group // Create StateGroup proto for ScreenState ON group
StateMap_StateGroup CreateScreenStateOnGroup(); StateMap_StateGroup CreateScreenStateOnGroup(int64_t screenOnId);
// Create StateGroup proto for ScreenState OFF group // Create StateGroup proto for ScreenState OFF group
StateMap_StateGroup CreateScreenStateOffGroup(); StateMap_StateGroup CreateScreenStateOffGroup(int64_t screenOffId);
// Create StateMap proto for ScreenState ON/OFF map // Create StateMap proto for ScreenState ON/OFF map
StateMap CreateScreenStateOnOffMap(); StateMap CreateScreenStateOnOffMap(int64_t screenOnId, int64_t screenOffId);
// Create StateGroup proto for ScreenState IN DOZE group
StateMap_StateGroup CreateScreenStateInDozeGroup();
// Create StateGroup proto for ScreenState NOT IN DOZE group
StateMap_StateGroup CreateScreenStateNotDozeGroup();
// Create StateMap proto for ScreenState IN DOZE map
StateMap CreateScreenStateInDozeMap();
// Add a predicate to the predicate combination. // Add a predicate to the predicate combination.
void addPredicateToPredicateCombination(const Predicate& predicate, Predicate* combination); void addPredicateToPredicateCombination(const Predicate& predicate, Predicate* combination);
@@ -319,12 +308,14 @@ void ValidateAttributionUidAndTagDimension(
const DimensionsValue& value, int node_idx, int atomId, int uid, const std::string& tag); const DimensionsValue& value, int node_idx, int atomId, int uid, const std::string& tag);
struct DimensionsPair { struct DimensionsPair {
DimensionsPair(DimensionsValue m1, DimensionsValue m2) : dimInWhat(m1), dimInCondition(m2){}; DimensionsPair(DimensionsValue m1, google::protobuf::RepeatedPtrField<StateValue> m2)
: dimInWhat(m1), stateValues(m2){};
DimensionsValue dimInWhat; DimensionsValue dimInWhat;
DimensionsValue dimInCondition; google::protobuf::RepeatedPtrField<StateValue> stateValues;
}; };
bool LessThan(const StateValue& s1, const StateValue& s2);
bool LessThan(const DimensionsValue& s1, const DimensionsValue& s2); bool LessThan(const DimensionsValue& s1, const DimensionsValue& s2);
bool LessThan(const DimensionsPair& s1, const DimensionsPair& s2); bool LessThan(const DimensionsPair& s1, const DimensionsPair& s2);
@@ -393,7 +384,7 @@ void sortMetricDataByDimensionsValue(const T& metricData, T* sortedMetricData) {
for (int i = 0; i < metricData.data_size(); ++i) { for (int i = 0; i < metricData.data_size(); ++i) {
dimensionIndexMap.insert( dimensionIndexMap.insert(
std::make_pair(DimensionsPair(metricData.data(i).dimensions_in_what(), std::make_pair(DimensionsPair(metricData.data(i).dimensions_in_what(),
metricData.data(i).dimensions_in_condition()), metricData.data(i).slice_by_state()),
i)); i));
} }
for (const auto& itr : dimensionIndexMap) { for (const auto& itr : dimensionIndexMap) {