summaryrefslogtreecommitdiff
path: root/cmds/statsd/benchmark/duration_metric_benchmark.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/statsd/benchmark/duration_metric_benchmark.cpp')
-rw-r--r--cmds/statsd/benchmark/duration_metric_benchmark.cpp314
1 files changed, 0 insertions, 314 deletions
diff --git a/cmds/statsd/benchmark/duration_metric_benchmark.cpp b/cmds/statsd/benchmark/duration_metric_benchmark.cpp
deleted file mode 100644
index 2d315d9395bc..000000000000
--- a/cmds/statsd/benchmark/duration_metric_benchmark.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-#include <vector>
-#include "benchmark/benchmark.h"
-#include "FieldValue.h"
-#include "HashableDimensionKey.h"
-#include "logd/LogEvent.h"
-#include "stats_log_util.h"
-#include "metric_util.h"
-
-namespace android {
-namespace os {
-namespace statsd {
-
-using std::vector;
-
-static StatsdConfig CreateDurationMetricConfig_NoLink_AND_CombinationCondition(
- DurationMetric::AggregationType aggregationType, bool addExtraDimensionInCondition) {
- StatsdConfig config;
- *config.add_atom_matcher() = CreateStartScheduledJobAtomMatcher();
- *config.add_atom_matcher() = CreateFinishScheduledJobAtomMatcher();
- *config.add_atom_matcher() = CreateSyncStartAtomMatcher();
- *config.add_atom_matcher() = CreateSyncEndAtomMatcher();
- *config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
- *config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher();
-
- auto scheduledJobPredicate = CreateScheduledJobPredicate();
- auto dimensions = scheduledJobPredicate.mutable_simple_predicate()->mutable_dimensions();
- dimensions->set_field(android::util::SCHEDULED_JOB_STATE_CHANGED);
- dimensions->add_child()->set_field(2); // job name field.
-
- auto screenIsOffPredicate = CreateScreenIsOffPredicate();
-
- auto isSyncingPredicate = CreateIsSyncingPredicate();
- auto syncDimension = isSyncingPredicate.mutable_simple_predicate()->mutable_dimensions();
- *syncDimension = CreateAttributionUidAndTagDimensions(android::util::SYNC_STATE_CHANGED,
- {Position::FIRST});
- if (addExtraDimensionInCondition) {
- syncDimension->add_child()->set_field(2 /* name field*/);
- }
-
- *config.add_predicate() = scheduledJobPredicate;
- *config.add_predicate() = screenIsOffPredicate;
- *config.add_predicate() = isSyncingPredicate;
- auto combinationPredicate = config.add_predicate();
- combinationPredicate->set_id(StringToId("CombinationPredicate"));
- combinationPredicate->mutable_combination()->set_operation(LogicalOperation::AND);
- addPredicateToPredicateCombination(screenIsOffPredicate, combinationPredicate);
- addPredicateToPredicateCombination(isSyncingPredicate, combinationPredicate);
-
- auto metric = config.add_duration_metric();
- metric->set_bucket(FIVE_MINUTES);
- metric->set_id(StringToId("scheduledJob"));
- metric->set_what(scheduledJobPredicate.id());
- metric->set_condition(combinationPredicate->id());
- metric->set_aggregation_type(aggregationType);
- auto dimensionWhat = metric->mutable_dimensions_in_what();
- dimensionWhat->set_field(android::util::SCHEDULED_JOB_STATE_CHANGED);
- dimensionWhat->add_child()->set_field(2); // job name field.
- *metric->mutable_dimensions_in_condition() = CreateAttributionUidAndTagDimensions(
- android::util::SYNC_STATE_CHANGED, {Position::FIRST});
- return config;
-}
-
-static StatsdConfig CreateDurationMetricConfig_Link_AND_CombinationCondition(
- DurationMetric::AggregationType aggregationType, bool addExtraDimensionInCondition) {
- StatsdConfig config;
- *config.add_atom_matcher() = CreateStartScheduledJobAtomMatcher();
- *config.add_atom_matcher() = CreateFinishScheduledJobAtomMatcher();
- *config.add_atom_matcher() = CreateSyncStartAtomMatcher();
- *config.add_atom_matcher() = CreateSyncEndAtomMatcher();
- *config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
- *config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher();
-
- auto scheduledJobPredicate = CreateScheduledJobPredicate();
- auto dimensions = scheduledJobPredicate.mutable_simple_predicate()->mutable_dimensions();
- *dimensions = CreateAttributionUidDimensions(
- android::util::SCHEDULED_JOB_STATE_CHANGED, {Position::FIRST});
- dimensions->add_child()->set_field(2); // job name field.
-
- auto isSyncingPredicate = CreateIsSyncingPredicate();
- auto syncDimension = isSyncingPredicate.mutable_simple_predicate()->mutable_dimensions();
- *syncDimension = CreateAttributionUidDimensions(
- android::util::SYNC_STATE_CHANGED, {Position::FIRST});
- if (addExtraDimensionInCondition) {
- syncDimension->add_child()->set_field(2 /* name field*/);
- }
-
- auto screenIsOffPredicate = CreateScreenIsOffPredicate();
-
- *config.add_predicate() = scheduledJobPredicate;
- *config.add_predicate() = screenIsOffPredicate;
- *config.add_predicate() = isSyncingPredicate;
- auto combinationPredicate = config.add_predicate();
- combinationPredicate->set_id(StringToId("CombinationPredicate"));
- combinationPredicate->mutable_combination()->set_operation(LogicalOperation::AND);
- addPredicateToPredicateCombination(screenIsOffPredicate, combinationPredicate);
- addPredicateToPredicateCombination(isSyncingPredicate, combinationPredicate);
-
- auto metric = config.add_duration_metric();
- metric->set_bucket(FIVE_MINUTES);
- metric->set_id(StringToId("scheduledJob"));
- metric->set_what(scheduledJobPredicate.id());
- metric->set_condition(combinationPredicate->id());
- metric->set_aggregation_type(aggregationType);
- *metric->mutable_dimensions_in_what() = CreateAttributionUidDimensions(
- android::util::SCHEDULED_JOB_STATE_CHANGED, {Position::FIRST});
-
- auto links = metric->add_links();
- links->set_condition(isSyncingPredicate.id());
- *links->mutable_fields_in_what() =
- CreateAttributionUidDimensions(
- android::util::SCHEDULED_JOB_STATE_CHANGED, {Position::FIRST});
- *links->mutable_fields_in_condition() =
- CreateAttributionUidDimensions(android::util::SYNC_STATE_CHANGED, {Position::FIRST});
- return config;
-}
-
-static void BM_DurationMetricNoLink(benchmark::State& state) {
- ConfigKey cfgKey;
- auto config = CreateDurationMetricConfig_NoLink_AND_CombinationCondition(
- DurationMetric::SUM, false);
- int64_t bucketStartTimeNs = 10000000000;
- int64_t bucketSizeNs =
- TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-
- std::vector<std::unique_ptr<LogEvent>> events;
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 11,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(
- CreateScreenStateChangedEvent(bucketStartTimeNs + 40, android::view::DISPLAY_STATE_ON));
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 102,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 450,
- android::view::DISPLAY_STATE_ON));
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 650,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + bucketSizeNs + 100,
- android::view::DISPLAY_STATE_ON));
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + bucketSizeNs + 640,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + bucketSizeNs + 650,
- android::view::DISPLAY_STATE_ON));
-
- vector<int> attributionUids1 = {9999};
- vector<string> attributionTags1 = {""};
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 2, attributionUids1,
- attributionTags1, "job0"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + 101, attributionUids1,
- attributionTags1, "job0"));
-
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 201, attributionUids1,
- attributionTags1, "job2"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + 500, attributionUids1,
- attributionTags1, "job2"));
-
- vector<int> attributionUids2 = {8888};
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 600, attributionUids2,
- attributionTags1, "job2"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + bucketSizeNs + 850,
- attributionUids2, attributionTags1, "job2"));
-
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + bucketSizeNs + 600,
- attributionUids2, attributionTags1, "job1"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + bucketSizeNs + 900,
- attributionUids2, attributionTags1, "job1"));
-
- vector<int> attributionUids3 = {111, 222, 222};
- vector<string> attributionTags3 = {"App1", "GMSCoreModule1", "GMSCoreModule2"};
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 10, attributionUids3,
- attributionTags3, "ReadEmail"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + 50, attributionUids3, attributionTags3,
- "ReadEmail"));
-
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 200, attributionUids3,
- attributionTags3, "ReadEmail"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs + 300, attributionUids3,
- attributionTags3, "ReadEmail"));
-
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 400, attributionUids3,
- attributionTags3, "ReadDoc"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs - 1, attributionUids3,
- attributionTags3, "ReadDoc"));
-
- vector<int> attributionUids4 = {333, 222, 555};
- vector<string> attributionTags4 = {"App2", "GMSCoreModule1", "GMSCoreModule2"};
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 401, attributionUids4,
- attributionTags4, "ReadEmail"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs + 700, attributionUids4,
- attributionTags4, "ReadEmail"));
- sortLogEventsByTimestamp(&events);
-
- while (state.KeepRunning()) {
- auto processor = CreateStatsLogProcessor(
- bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
- for (const auto& event : events) {
- processor->OnLogEvent(event.get());
- }
- }
-}
-
-BENCHMARK(BM_DurationMetricNoLink);
-
-
-static void BM_DurationMetricLink(benchmark::State& state) {
- ConfigKey cfgKey;
- auto config = CreateDurationMetricConfig_Link_AND_CombinationCondition(
- DurationMetric::SUM, false);
- int64_t bucketStartTimeNs = 10000000000;
- int64_t bucketSizeNs =
- TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000LL;
-
- std::vector<std::unique_ptr<LogEvent>> events;
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 55,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 120,
- android::view::DISPLAY_STATE_ON));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 121,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 450,
- android::view::DISPLAY_STATE_ON));
-
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + 501,
- android::view::DISPLAY_STATE_OFF));
- events.push_back(CreateScreenStateChangedEvent(bucketStartTimeNs + bucketSizeNs + 100,
- android::view::DISPLAY_STATE_ON));
-
- vector<int> attributionUids1 = {111};
- vector<string> attributionTags1 = {"App1"};
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 1, attributionUids1,
- attributionTags1, "job1"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + 101, attributionUids1,
- attributionTags1, "job1"));
-
- vector<int> attributionUids2 = {333};
- vector<string> attributionTags2 = {"App2"};
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 201, attributionUids2,
- attributionTags2, "job2"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + 500, attributionUids2,
- attributionTags2, "job2"));
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + 600, attributionUids2,
- attributionTags2, "job2"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + bucketSizeNs + 850,
- attributionUids2, attributionTags2, "job2"));
-
- vector<int> attributionUids3 = {444};
- vector<string> attributionTags3 = {"App3"};
- events.push_back(CreateStartScheduledJobEvent(bucketStartTimeNs + bucketSizeNs - 2,
- attributionUids3, attributionTags3, "job3"));
- events.push_back(CreateFinishScheduledJobEvent(bucketStartTimeNs + bucketSizeNs + 900,
- attributionUids3, attributionTags3, "job3"));
-
- vector<int> attributionUids4 = {111, 222, 222};
- vector<string> attributionTags4 = {"App1", "GMSCoreModule1", "GMSCoreModule2"};
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 50, attributionUids4,
- attributionTags4, "ReadEmail"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + 110, attributionUids4, attributionTags4,
- "ReadEmail"));
-
- vector<int> attributionUids5 = {333, 222, 555};
- vector<string> attributionTags5 = {"App2", "GMSCoreModule1", "GMSCoreModule2"};
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 300, attributionUids5,
- attributionTags5, "ReadEmail"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs + 700, attributionUids5,
- attributionTags5, "ReadEmail"));
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 400, attributionUids5,
- attributionTags5, "ReadDoc"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs - 1, attributionUids5,
- attributionTags5, "ReadDoc"));
-
- vector<int> attributionUids6 = {444, 222, 555};
- vector<string> attributionTags6 = {"App3", "GMSCoreModule1", "GMSCoreModule2"};
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + 550, attributionUids6,
- attributionTags6, "ReadDoc"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + 800, attributionUids6, attributionTags6,
- "ReadDoc"));
- events.push_back(CreateSyncStartEvent(bucketStartTimeNs + bucketSizeNs - 1, attributionUids6,
- attributionTags6, "ReadDoc"));
- events.push_back(CreateSyncEndEvent(bucketStartTimeNs + bucketSizeNs + 700, attributionUids6,
- attributionTags6, "ReadDoc"));
- sortLogEventsByTimestamp(&events);
-
- while (state.KeepRunning()) {
- auto processor = CreateStatsLogProcessor(
- bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
- for (const auto& event : events) {
- processor->OnLogEvent(event.get());
- }
- }
-}
-
-BENCHMARK(BM_DurationMetricLink);
-
-} // namespace statsd
-} // namespace os
-} // namespace android