Merge changes from topic "ActivationType" into qt-dev
am: 266b90d80e
Change-Id: I31fd23360e7d8dc2f31369f2bf6409cd78532b41
This commit is contained in:
@@ -68,12 +68,8 @@ const int FIELD_ID_CURRENT_REPORT_WALL_CLOCK_NANOS = 6;
|
||||
const int FIELD_ID_DUMP_REPORT_REASON = 8;
|
||||
const int FIELD_ID_STRINGS = 9;
|
||||
|
||||
const int FIELD_ID_ACTIVE_CONFIG_LIST = 1;
|
||||
const int FIELD_ID_CONFIG_ID = 1;
|
||||
const int FIELD_ID_CONFIG_UID = 2;
|
||||
const int FIELD_ID_ACTIVE_METRIC = 3;
|
||||
const int FIELD_ID_METRIC_ID = 1;
|
||||
const int FIELD_ID_TIME_TO_LIVE_NANOS = 2;
|
||||
// for ActiveConfigList
|
||||
const int FIELD_ID_ACTIVE_CONFIG_LIST_CONFIG = 1;
|
||||
|
||||
#define NS_PER_HOUR 3600 * NS_PER_SEC
|
||||
|
||||
@@ -523,7 +519,7 @@ void StatsLogProcessor::OnConfigRemoved(const ConfigKey& key) {
|
||||
std::lock_guard<std::mutex> lock(mMetricsMutex);
|
||||
auto it = mMetricsManagers.find(key);
|
||||
if (it != mMetricsManagers.end()) {
|
||||
WriteDataToDiskLocked(key, getElapsedRealtimeNs(), CONFIG_REMOVED,
|
||||
WriteDataToDiskLocked(key, getElapsedRealtimeNs(), CONFIG_REMOVED,
|
||||
NO_TIME_CONSTRAINTS);
|
||||
mMetricsManagers.erase(it);
|
||||
mUidMap->OnConfigRemoved(key);
|
||||
@@ -613,7 +609,7 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key,
|
||||
mOnDiskDataConfigs.insert(key);
|
||||
}
|
||||
|
||||
void StatsLogProcessor::WriteMetricsActivationToDisk(int64_t currentTimeNs) {
|
||||
void StatsLogProcessor::SaveActiveConfigsToDisk(int64_t currentTimeNs) {
|
||||
std::lock_guard<std::mutex> lock(mMetricsMutex);
|
||||
|
||||
const int64_t timeNs = getElapsedRealtimeNs();
|
||||
@@ -629,28 +625,12 @@ void StatsLogProcessor::WriteMetricsActivationToDisk(int64_t currentTimeNs) {
|
||||
mLastActiveMetricsWriteNs = timeNs;
|
||||
|
||||
ProtoOutputStream proto;
|
||||
|
||||
for (const auto& pair : mMetricsManagers) {
|
||||
uint64_t activeConfigListToken = proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
|
||||
FIELD_ID_ACTIVE_CONFIG_LIST);
|
||||
proto.write(FIELD_TYPE_INT64 | FIELD_ID_CONFIG_ID, (long long)pair.first.GetId());
|
||||
proto.write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_UID, pair.first.GetUid());
|
||||
|
||||
vector<MetricProducer*> activeMetrics;
|
||||
pair.second->prepForShutDown(currentTimeNs);
|
||||
pair.second->getActiveMetrics(activeMetrics);
|
||||
for (MetricProducer* metric : activeMetrics) {
|
||||
if (metric->isActive()) {
|
||||
uint64_t metricToken = proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
|
||||
FIELD_ID_ACTIVE_METRIC);
|
||||
proto.write(FIELD_TYPE_INT64 | FIELD_ID_METRIC_ID,
|
||||
(long long)metric->getMetricId());
|
||||
proto.write(FIELD_TYPE_INT64 | FIELD_ID_TIME_TO_LIVE_NANOS,
|
||||
(long long)metric->getRemainingTtlNs(currentTimeNs));
|
||||
proto.end(metricToken);
|
||||
}
|
||||
}
|
||||
proto.end(activeConfigListToken);
|
||||
const sp<MetricsManager>& metricsManager = pair.second;
|
||||
uint64_t configToken = proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
|
||||
FIELD_ID_ACTIVE_CONFIG_LIST_CONFIG);
|
||||
metricsManager->writeActiveConfigToProtoOutputStream(currentTimeNs, &proto);
|
||||
proto.end(configToken);
|
||||
}
|
||||
|
||||
string file_name = StringPrintf("%s/active_metrics", STATS_ACTIVE_METRIC_DIR);
|
||||
@@ -664,30 +644,45 @@ void StatsLogProcessor::WriteMetricsActivationToDisk(int64_t currentTimeNs) {
|
||||
proto.flush(fd.get());
|
||||
}
|
||||
|
||||
void StatsLogProcessor::LoadMetricsActivationFromDisk() {
|
||||
void StatsLogProcessor::LoadActiveConfigsFromDisk() {
|
||||
std::lock_guard<std::mutex> lock(mMetricsMutex);
|
||||
|
||||
string file_name = StringPrintf("%s/active_metrics", STATS_ACTIVE_METRIC_DIR);
|
||||
int fd = open(file_name.c_str(), O_RDONLY | O_CLOEXEC);
|
||||
if (fd != -1) {
|
||||
string content;
|
||||
if (android::base::ReadFdToString(fd, &content)) {
|
||||
ActiveConfigList activeConfigList;
|
||||
if (activeConfigList.ParseFromString(content)) {
|
||||
for (int i = 0; i < activeConfigList.active_config_size(); i++) {
|
||||
const auto& config = activeConfigList.active_config(i);
|
||||
ConfigKey key(config.uid(), config.config_id());
|
||||
auto it = mMetricsManagers.find(key);
|
||||
if (it == mMetricsManagers.end()) {
|
||||
ALOGE("No config found for config %s", key.ToString().c_str());
|
||||
continue;
|
||||
}
|
||||
VLOG("Setting active config %s", key.ToString().c_str());
|
||||
it->second->setActiveMetrics(config, mTimeBaseNs);
|
||||
}
|
||||
}
|
||||
VLOG("Successfully loaded %d active configs.", activeConfigList.active_config_size());
|
||||
}
|
||||
close(fd);
|
||||
if (-1 == fd) {
|
||||
VLOG("Attempt to read %s but failed", file_name.c_str());
|
||||
StorageManager::deleteFile(file_name.c_str());
|
||||
return;
|
||||
}
|
||||
string content;
|
||||
if (!android::base::ReadFdToString(fd, &content)) {
|
||||
ALOGE("Attempt to read %s but failed", file_name.c_str());
|
||||
close(fd);
|
||||
StorageManager::deleteFile(file_name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
ActiveConfigList activeConfigList;
|
||||
if (!activeConfigList.ParseFromString(content)) {
|
||||
ALOGE("Attempt to read %s but failed; failed to load active configs", file_name.c_str());
|
||||
StorageManager::deleteFile(file_name.c_str());
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < activeConfigList.config_size(); i++) {
|
||||
const auto& config = activeConfigList.config(i);
|
||||
ConfigKey key(config.uid(), config.id());
|
||||
auto it = mMetricsManagers.find(key);
|
||||
if (it == mMetricsManagers.end()) {
|
||||
ALOGE("No config found for config %s", key.ToString().c_str());
|
||||
continue;
|
||||
}
|
||||
VLOG("Setting active config %s", key.ToString().c_str());
|
||||
it->second->loadActiveConfig(config, mTimeBaseNs);
|
||||
}
|
||||
VLOG("Successfully loaded %d active configs.", activeConfigList.config_size());
|
||||
|
||||
StorageManager::deleteFile(file_name.c_str());
|
||||
}
|
||||
|
||||
@@ -709,7 +704,7 @@ void StatsLogProcessor::WriteDataToDiskLocked(const DumpReportReason dumpReportR
|
||||
}
|
||||
}
|
||||
|
||||
void StatsLogProcessor::WriteDataToDisk(const DumpReportReason dumpReportReason,
|
||||
void StatsLogProcessor::WriteDataToDisk(const DumpReportReason dumpReportReason,
|
||||
const DumpLatency dumpLatency) {
|
||||
std::lock_guard<std::mutex> lock(mMetricsMutex);
|
||||
WriteDataToDiskLocked(dumpReportReason, dumpLatency);
|
||||
|
||||
@@ -89,11 +89,11 @@ public:
|
||||
void WriteDataToDisk(const DumpReportReason dumpReportReason,
|
||||
const DumpLatency dumpLatency);
|
||||
|
||||
/* Persist metric activation status onto disk. */
|
||||
void WriteMetricsActivationToDisk(int64_t currentTimeNs);
|
||||
/* Persist configs containing metrics with active activations to disk. */
|
||||
void SaveActiveConfigsToDisk(int64_t currentTimeNs);
|
||||
|
||||
/* Load metric activation status from disk. */
|
||||
void LoadMetricsActivationFromDisk();
|
||||
/* Load configs containing metrics with active activations from disk. */
|
||||
void LoadActiveConfigsFromDisk();
|
||||
|
||||
// Reset all configs.
|
||||
void resetConfigs();
|
||||
@@ -221,6 +221,9 @@ private:
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestDropWhenByteSizeTooLarge);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBoot);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations);
|
||||
FRIEND_TEST(StatsLogProcessorTest,
|
||||
TestActivationOnBootMultipleActivationsDifferentActivationTypes);
|
||||
|
||||
FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration1);
|
||||
FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration2);
|
||||
|
||||
@@ -986,7 +986,7 @@ Status StatsService::informDeviceShutdown() {
|
||||
ENFORCE_UID(AID_SYSTEM);
|
||||
VLOG("StatsService::informDeviceShutdown");
|
||||
mProcessor->WriteDataToDisk(DEVICE_SHUTDOWN, FAST);
|
||||
mProcessor->WriteMetricsActivationToDisk(getElapsedRealtimeNs());
|
||||
mProcessor->SaveActiveConfigsToDisk(getElapsedRealtimeNs());
|
||||
return Status::ok();
|
||||
}
|
||||
|
||||
@@ -1021,14 +1021,14 @@ Status StatsService::statsCompanionReady() {
|
||||
|
||||
void StatsService::Startup() {
|
||||
mConfigManager->Startup();
|
||||
mProcessor->LoadMetricsActivationFromDisk();
|
||||
mProcessor->LoadActiveConfigsFromDisk();
|
||||
}
|
||||
|
||||
void StatsService::Terminate() {
|
||||
ALOGI("StatsService::Terminating");
|
||||
if (mProcessor != nullptr) {
|
||||
mProcessor->WriteDataToDisk(TERMINATION_SIGNAL_RECEIVED, FAST);
|
||||
mProcessor->WriteMetricsActivationToDisk(getElapsedRealtimeNs());
|
||||
mProcessor->SaveActiveConfigsToDisk(getElapsedRealtimeNs());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,23 +21,26 @@ option java_package = "com.android.os";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "ActiveConfigProto";
|
||||
|
||||
message ActiveEventActivation {
|
||||
optional int32 atom_matcher_index = 1;
|
||||
|
||||
// Time left in activation. When this proto is loaded after device boot,
|
||||
// the activation should be set to active for this duration.
|
||||
optional int64 remaining_ttl_nanos = 2;
|
||||
}
|
||||
|
||||
message ActiveMetric {
|
||||
// metric id
|
||||
optional int64 metric_id = 1;
|
||||
// Remaining time to live in nano seconds. -1 for infinity.
|
||||
optional int64 time_to_live_nanos = 2;
|
||||
optional int64 id = 1;
|
||||
repeated ActiveEventActivation activation = 2;
|
||||
}
|
||||
|
||||
message ActiveConfig {
|
||||
// config id
|
||||
optional int64 config_id = 1;
|
||||
// config uid
|
||||
optional int64 id = 1;
|
||||
optional int32 uid = 2;
|
||||
// metrics
|
||||
repeated ActiveMetric active_metric = 3;
|
||||
repeated ActiveMetric metric = 3;
|
||||
}
|
||||
|
||||
// all configs and their metrics on device.
|
||||
message ActiveConfigList {
|
||||
repeated ActiveConfig active_config = 1;
|
||||
}
|
||||
repeated ActiveConfig config = 1;
|
||||
}
|
||||
|
||||
@@ -18,12 +18,26 @@
|
||||
#include "Log.h"
|
||||
#include "MetricProducer.h"
|
||||
|
||||
using android::util::FIELD_COUNT_REPEATED;
|
||||
using android::util::FIELD_TYPE_INT32;
|
||||
using android::util::FIELD_TYPE_INT64;
|
||||
using android::util::FIELD_TYPE_MESSAGE;
|
||||
using android::util::ProtoOutputStream;
|
||||
|
||||
namespace android {
|
||||
namespace os {
|
||||
namespace statsd {
|
||||
|
||||
using std::map;
|
||||
|
||||
// for ActiveMetric
|
||||
const int FIELD_ID_ACTIVE_METRIC_ID = 1;
|
||||
const int FIELD_ID_ACTIVE_METRIC_ACTIVATION = 2;
|
||||
|
||||
// for ActiveEventActivation
|
||||
const int FIELD_ID_ACTIVE_EVENT_ACTIVATION_ATOM_MATCHER_INDEX = 1;
|
||||
const int FIELD_ID_ACTIVE_EVENT_ACTIVATION_REMAINING_TTL_NANOS = 2;
|
||||
|
||||
void MetricProducer::onMatchedLogEventLocked(const size_t matcherIndex, const LogEvent& event) {
|
||||
if (!mIsActive) {
|
||||
return;
|
||||
@@ -74,7 +88,7 @@ bool MetricProducer::evaluateActiveStateLocked(int64_t elapsedTimestampNs) {
|
||||
bool isActive = mEventActivationMap.empty();
|
||||
for (auto& it : mEventActivationMap) {
|
||||
if (it.second->state == ActivationState::kActive &&
|
||||
elapsedTimestampNs > it.second->ttl_ns + it.second->activation_ns) {
|
||||
elapsedTimestampNs > it.second->ttl_ns + it.second->start_ns) {
|
||||
it.second->state = ActivationState::kNotActive;
|
||||
}
|
||||
if (it.second->state == ActivationState::kActive) {
|
||||
@@ -95,8 +109,8 @@ void MetricProducer::flushIfExpire(int64_t elapsedTimestampNs) {
|
||||
}
|
||||
}
|
||||
|
||||
void MetricProducer::addActivation(int activationTrackerIndex, int64_t ttl_seconds,
|
||||
int deactivationTrackerIndex) {
|
||||
void MetricProducer::addActivation(int activationTrackerIndex, const ActivationType& activationType,
|
||||
int64_t ttl_seconds, int deactivationTrackerIndex) {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
// When a metric producer does not depend on any activation, its mIsActive is true.
|
||||
// Therefore, if this is the 1st activation, mIsActive will turn to false. Otherwise it does not
|
||||
@@ -104,8 +118,8 @@ void MetricProducer::addActivation(int activationTrackerIndex, int64_t ttl_secon
|
||||
if (mEventActivationMap.empty()) {
|
||||
mIsActive = false;
|
||||
}
|
||||
std::shared_ptr<Activation> activation = std::make_shared<Activation>();
|
||||
activation->ttl_ns = ttl_seconds * NS_PER_SEC;
|
||||
std::shared_ptr<Activation> activation =
|
||||
std::make_shared<Activation>(activationType, ttl_seconds * NS_PER_SEC);
|
||||
mEventActivationMap.emplace(activationTrackerIndex, activation);
|
||||
if (-1 != deactivationTrackerIndex) {
|
||||
mEventDeactivationMap.emplace(deactivationTrackerIndex, activation);
|
||||
@@ -117,13 +131,16 @@ void MetricProducer::activateLocked(int activationTrackerIndex, int64_t elapsedT
|
||||
if (it == mEventActivationMap.end()) {
|
||||
return;
|
||||
}
|
||||
if (mActivationType == MetricActivation::ACTIVATE_ON_BOOT &&
|
||||
it->second->state == ActivationState::kNotActive) {
|
||||
it->second->state = ActivationState::kActiveOnBoot;
|
||||
auto& activation = it->second;
|
||||
if (ACTIVATE_ON_BOOT == activation->activationType) {
|
||||
if (ActivationState::kNotActive == activation->state) {
|
||||
activation->state = ActivationState::kActiveOnBoot;
|
||||
}
|
||||
// If the Activation is already active or set to kActiveOnBoot, do nothing.
|
||||
return;
|
||||
}
|
||||
it->second->activation_ns = elapsedTimestampNs;
|
||||
it->second->state = ActivationState::kActive;
|
||||
activation->start_ns = elapsedTimestampNs;
|
||||
activation->state = ActivationState::kActive;
|
||||
mIsActive = true;
|
||||
}
|
||||
|
||||
@@ -135,46 +152,55 @@ void MetricProducer::cancelEventActivationLocked(int deactivationTrackerIndex) {
|
||||
it->second->state = ActivationState::kNotActive;
|
||||
}
|
||||
|
||||
void MetricProducer::setActiveLocked(int64_t currentTimeNs, int64_t remainingTtlNs) {
|
||||
void MetricProducer::loadActiveMetricLocked(const ActiveMetric& activeMetric,
|
||||
int64_t currentTimeNs) {
|
||||
if (mEventActivationMap.size() == 0) {
|
||||
return;
|
||||
}
|
||||
for (auto& pair : mEventActivationMap) {
|
||||
auto& activation = pair.second;
|
||||
if (activation->ttl_ns >= remainingTtlNs) {
|
||||
activation->activation_ns = currentTimeNs + remainingTtlNs - activation->ttl_ns;
|
||||
activation->state = kActive;
|
||||
mIsActive = true;
|
||||
VLOG("setting new activation->time to %lld, %lld, %lld",
|
||||
(long long)activation->activation_ns, (long long)currentTimeNs,
|
||||
(long long)remainingTtlNs);
|
||||
return;
|
||||
for (int i = 0; i < activeMetric.activation_size(); i++) {
|
||||
const auto& activeEventActivation = activeMetric.activation(i);
|
||||
auto it = mEventActivationMap.find(activeEventActivation.atom_matcher_index());
|
||||
if (it == mEventActivationMap.end()) {
|
||||
ALOGE("Saved event activation not found");
|
||||
continue;
|
||||
}
|
||||
auto& activation = it->second;
|
||||
// We don't want to change the ttl for future activations, so we set the start_ns
|
||||
// such that start_ns + ttl_ns == currentTimeNs + remaining_ttl_nanos
|
||||
activation->start_ns =
|
||||
currentTimeNs + activeEventActivation.remaining_ttl_nanos() - activation->ttl_ns;
|
||||
activation->state = ActivationState::kActive;
|
||||
mIsActive = true;
|
||||
}
|
||||
ALOGE("Required ttl is longer than all possible activations.");
|
||||
}
|
||||
|
||||
int64_t MetricProducer::getRemainingTtlNsLocked(int64_t currentTimeNs) const {
|
||||
int64_t maxTtl = 0;
|
||||
for (const auto& activation : mEventActivationMap) {
|
||||
if (activation.second->state == kActive) {
|
||||
maxTtl = std::max(maxTtl, activation.second->ttl_ns + activation.second->activation_ns -
|
||||
currentTimeNs);
|
||||
}
|
||||
}
|
||||
return maxTtl;
|
||||
}
|
||||
void MetricProducer::writeActiveMetricToProtoOutputStream(
|
||||
int64_t currentTimeNs, ProtoOutputStream* proto) {
|
||||
proto->write(FIELD_TYPE_INT64 | FIELD_ID_ACTIVE_METRIC_ID, (long long)mMetricId);
|
||||
for (auto& it : mEventActivationMap) {
|
||||
const int atom_matcher_index = it.first;
|
||||
const std::shared_ptr<Activation>& activation = it.second;
|
||||
|
||||
void MetricProducer::prepActiveForBootIfNecessaryLocked(int64_t currentTimeNs) {
|
||||
if (mActivationType != MetricActivation::ACTIVATE_ON_BOOT) {
|
||||
return;
|
||||
}
|
||||
for (auto& activation : mEventActivationMap) {
|
||||
if (activation.second->state == kActiveOnBoot) {
|
||||
activation.second->state = kActive;
|
||||
activation.second->activation_ns = currentTimeNs;
|
||||
mIsActive = true;
|
||||
if (ActivationState::kNotActive == activation->state ||
|
||||
(ActivationState::kActive == activation->state &&
|
||||
activation->start_ns + activation->ttl_ns < currentTimeNs)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const uint64_t activationToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
|
||||
FIELD_ID_ACTIVE_METRIC_ACTIVATION);
|
||||
proto->write(FIELD_TYPE_INT32 | FIELD_ID_ACTIVE_EVENT_ACTIVATION_ATOM_MATCHER_INDEX,
|
||||
atom_matcher_index);
|
||||
if (ActivationState::kActive == activation->state) {
|
||||
const int64_t remainingTtlNs =
|
||||
activation->start_ns + activation->ttl_ns - currentTimeNs;
|
||||
proto->write(FIELD_TYPE_INT64 | FIELD_ID_ACTIVE_EVENT_ACTIVATION_REMAINING_TTL_NANOS,
|
||||
(long long)remainingTtlNs);
|
||||
} else if (ActivationState::kActiveOnBoot == activation->state) {
|
||||
proto->write(FIELD_TYPE_INT64 | FIELD_ID_ACTIVE_EVENT_ACTIVATION_REMAINING_TTL_NANOS,
|
||||
(long long)activation->ttl_ns);
|
||||
}
|
||||
proto->end(activationToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <shared_mutex>
|
||||
|
||||
#include <frameworks/base/cmds/statsd/src/active_config_list.pb.h>
|
||||
#include "HashableDimensionKey.h"
|
||||
#include "anomaly/AnomalyTracker.h"
|
||||
#include "condition/ConditionWizard.h"
|
||||
@@ -198,15 +199,9 @@ public:
|
||||
return mMetricId;
|
||||
}
|
||||
|
||||
int64_t getRemainingTtlNs(int64_t currentTimeNs) const {
|
||||
void loadActiveMetric(const ActiveMetric& activeMetric, int64_t currentTimeNs) {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
return getRemainingTtlNsLocked(currentTimeNs);
|
||||
}
|
||||
|
||||
// Set metric to active for ttlNs.
|
||||
void setActive(int64_t currentTimeNs, int64_t remainingTtlNs) {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
setActiveLocked(currentTimeNs, remainingTtlNs);
|
||||
loadActiveMetricLocked(activeMetric, currentTimeNs);
|
||||
}
|
||||
|
||||
// Let MetricProducer drop in-memory data to save memory.
|
||||
@@ -238,17 +233,8 @@ public:
|
||||
return isActiveLocked();
|
||||
}
|
||||
|
||||
void prepActiveForBootIfNecessary(int64_t currentTimeNs) {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
prepActiveForBootIfNecessaryLocked(currentTimeNs);
|
||||
}
|
||||
|
||||
void addActivation(int activationTrackerIndex, int64_t ttl_seconds,
|
||||
int deactivationTrackerIndex = -1);
|
||||
|
||||
inline void setActivationType(const MetricActivation::ActivationType& activationType) {
|
||||
mActivationType = activationType;
|
||||
}
|
||||
void addActivation(int activationTrackerIndex, const ActivationType& activationType,
|
||||
int64_t ttl_seconds, int deactivationTrackerIndex = -1);
|
||||
|
||||
void prepareFistBucket() {
|
||||
std::lock_guard<std::mutex> lock(mMutex);
|
||||
@@ -257,6 +243,8 @@ public:
|
||||
|
||||
void flushIfExpire(int64_t elapsedTimestampNs);
|
||||
|
||||
void writeActiveMetricToProtoOutputStream(
|
||||
int64_t currentTimeNs, ProtoOutputStream* proto);
|
||||
protected:
|
||||
virtual void onConditionChangedLocked(const bool condition, const int64_t eventTime) = 0;
|
||||
virtual void onSlicedConditionMayChangeLocked(bool overallCondition,
|
||||
@@ -282,9 +270,7 @@ protected:
|
||||
|
||||
void prepActiveForBootIfNecessaryLocked(int64_t currentTimeNs);
|
||||
|
||||
int64_t getRemainingTtlNsLocked(int64_t currentTimeNs) const;
|
||||
|
||||
void setActiveLocked(int64_t currentTimeNs, int64_t remainingTtlNs);
|
||||
void loadActiveMetricLocked(const ActiveMetric& activeMetric, int64_t currentTimeNs);
|
||||
|
||||
virtual void prepareFistBucketLocked() {};
|
||||
/**
|
||||
@@ -396,11 +382,16 @@ protected:
|
||||
mutable std::mutex mMutex;
|
||||
|
||||
struct Activation {
|
||||
Activation() : ttl_ns(0), activation_ns(0), state(ActivationState::kNotActive) {}
|
||||
Activation(const ActivationType& activationType, const int64_t ttlNs)
|
||||
: ttl_ns(ttlNs),
|
||||
start_ns(0),
|
||||
state(ActivationState::kNotActive),
|
||||
activationType(activationType) {}
|
||||
|
||||
int64_t ttl_ns;
|
||||
int64_t activation_ns;
|
||||
const int64_t ttl_ns;
|
||||
int64_t start_ns;
|
||||
ActivationState state;
|
||||
const ActivationType activationType;
|
||||
};
|
||||
// When the metric producer has multiple activations, these activations are ORed to determine
|
||||
// whether the metric producer is ready to generate metrics.
|
||||
@@ -411,8 +402,6 @@ protected:
|
||||
|
||||
bool mIsActive;
|
||||
|
||||
MetricActivation::ActivationType mActivationType;
|
||||
|
||||
FRIEND_TEST(MetricActivationE2eTest, TestCountMetric);
|
||||
FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation);
|
||||
FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations);
|
||||
@@ -420,6 +409,9 @@ protected:
|
||||
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBoot);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations);
|
||||
FRIEND_TEST(StatsLogProcessorTest,
|
||||
TestActivationOnBootMultipleActivationsDifferentActivationTypes);
|
||||
};
|
||||
|
||||
} // namespace statsd
|
||||
|
||||
@@ -54,6 +54,11 @@ const int FIELD_ID_ANNOTATIONS = 7;
|
||||
const int FIELD_ID_ANNOTATIONS_INT64 = 1;
|
||||
const int FIELD_ID_ANNOTATIONS_INT32 = 2;
|
||||
|
||||
// for ActiveConfig
|
||||
const int FIELD_ID_ACTIVE_CONFIG_ID = 1;
|
||||
const int FIELD_ID_ACTIVE_CONFIG_UID = 2;
|
||||
const int FIELD_ID_ACTIVE_CONFIG_METRIC = 3;
|
||||
|
||||
MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config,
|
||||
const int64_t timeBaseNs, const int64_t currentTimeNs,
|
||||
const sp<UidMap>& uidMap,
|
||||
@@ -503,25 +508,41 @@ size_t MetricsManager::byteSize() {
|
||||
return totalSize;
|
||||
}
|
||||
|
||||
void MetricsManager::setActiveMetrics(ActiveConfig config, int64_t currentTimeNs) {
|
||||
if (config.active_metric_size() == 0) {
|
||||
void MetricsManager::loadActiveConfig(const ActiveConfig& config, int64_t currentTimeNs) {
|
||||
if (config.metric_size() == 0) {
|
||||
ALOGW("No active metric for config %s", mConfigKey.ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < config.active_metric_size(); i++) {
|
||||
for (int metric : mMetricIndexesWithActivation) {
|
||||
if (mAllMetricProducers[metric]->getMetricId() == config.active_metric(i).metric_id()) {
|
||||
VLOG("Setting active metric: %lld",
|
||||
(long long)mAllMetricProducers[metric]->getMetricId());
|
||||
mAllMetricProducers[metric]->setActive(
|
||||
currentTimeNs, config.active_metric(i).time_to_live_nanos());
|
||||
mIsActive = true;
|
||||
for (int i = 0; i < config.metric_size(); i++) {
|
||||
const auto& activeMetric = config.metric(i);
|
||||
for (int metricIndex : mMetricIndexesWithActivation) {
|
||||
const auto& metric = mAllMetricProducers[metricIndex];
|
||||
if (metric->getMetricId() == activeMetric.id()) {
|
||||
VLOG("Setting active metric: %lld", (long long)metric->getMetricId());
|
||||
metric->loadActiveMetric(activeMetric, currentTimeNs);
|
||||
mIsActive |= metric->isActive();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MetricsManager::writeActiveConfigToProtoOutputStream(
|
||||
int64_t currentTimeNs, ProtoOutputStream* proto) {
|
||||
proto->write(FIELD_TYPE_INT64 | FIELD_ID_ACTIVE_CONFIG_ID, (long long)mConfigKey.GetId());
|
||||
proto->write(FIELD_TYPE_INT32 | FIELD_ID_ACTIVE_CONFIG_UID, mConfigKey.GetUid());
|
||||
for (int metricIndex : mMetricIndexesWithActivation) {
|
||||
const auto& metric = mAllMetricProducers[metricIndex];
|
||||
const uint64_t metricToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
|
||||
FIELD_ID_ACTIVE_CONFIG_METRIC);
|
||||
metric->writeActiveMetricToProtoOutputStream(currentTimeNs, proto);
|
||||
proto->end(metricToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace statsd
|
||||
} // namespace os
|
||||
} // namespace android
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <frameworks/base/cmds/statsd/src/active_config_list.pb.h>
|
||||
#include "anomaly/AlarmMonitor.h"
|
||||
#include "anomaly/AlarmTracker.h"
|
||||
#include "anomaly/AnomalyTracker.h"
|
||||
@@ -139,21 +138,10 @@ public:
|
||||
return mIsActive;
|
||||
}
|
||||
|
||||
inline void getActiveMetrics(std::vector<MetricProducer*>& metrics) const {
|
||||
for (const auto& metric : mAllMetricProducers) {
|
||||
if (metric->isActive()) {
|
||||
metrics.push_back(metric.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
void loadActiveConfig(const ActiveConfig& config, int64_t currentTimeNs);
|
||||
|
||||
inline void prepForShutDown(int64_t currentTimeNs) {
|
||||
for (const auto& metric : mAllMetricProducers) {
|
||||
metric->prepActiveForBootIfNecessary(currentTimeNs);
|
||||
}
|
||||
}
|
||||
|
||||
void setActiveMetrics(ActiveConfig config, int64_t currentTimeNs);
|
||||
void writeActiveConfigToProtoOutputStream(
|
||||
int64_t currentTimeNs, ProtoOutputStream* proto);
|
||||
|
||||
private:
|
||||
// For test only.
|
||||
@@ -299,6 +287,9 @@ private:
|
||||
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBoot);
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations);
|
||||
FRIEND_TEST(StatsLogProcessorTest,
|
||||
TestActivationOnBootMultipleActivationsDifferentActivationTypes);
|
||||
};
|
||||
|
||||
} // namespace statsd
|
||||
|
||||
@@ -727,7 +727,6 @@ bool initMetricActivations(const ConfigKey& key, const StatsdConfig& config,
|
||||
return false;
|
||||
}
|
||||
const sp<MetricProducer>& metric = allMetricProducers[metricTrackerIndex];
|
||||
metric->setActivationType(metric_activation.activation_type());
|
||||
metricsWithActivation.push_back(metricTrackerIndex);
|
||||
for (int j = 0; j < metric_activation.event_activation_size(); ++j) {
|
||||
const EventActivation& activation = metric_activation.event_activation(j);
|
||||
@@ -740,6 +739,13 @@ bool initMetricActivations(const ConfigKey& key, const StatsdConfig& config,
|
||||
activationAtomTrackerToMetricMap[atomMatcherIndex].push_back(
|
||||
metricTrackerIndex);
|
||||
|
||||
ActivationType activationType;
|
||||
if (activation.has_activation_type()) {
|
||||
activationType = activation.activation_type();
|
||||
} else {
|
||||
activationType = metric_activation.activation_type();
|
||||
}
|
||||
|
||||
if (activation.has_deactivation_atom_matcher_id()) {
|
||||
auto deactivationAtomMatcherIt =
|
||||
logEventTrackerMap.find(activation.deactivation_atom_matcher_id());
|
||||
@@ -750,10 +756,10 @@ bool initMetricActivations(const ConfigKey& key, const StatsdConfig& config,
|
||||
const int deactivationMatcherIndex = deactivationAtomMatcherIt->second;
|
||||
deactivationAtomTrackerToMetricMap[deactivationMatcherIndex]
|
||||
.push_back(metricTrackerIndex);
|
||||
metric->addActivation(atomMatcherIndex, activation.ttl_seconds(),
|
||||
metric->addActivation(atomMatcherIndex, activationType, activation.ttl_seconds(),
|
||||
deactivationMatcherIndex);
|
||||
} else {
|
||||
metric->addActivation(atomMatcherIndex, activation.ttl_seconds());
|
||||
metric->addActivation(atomMatcherIndex, activationType, activation.ttl_seconds());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -377,21 +377,23 @@ message Subscription {
|
||||
optional float probability_of_informing = 7 [default = 1.1];
|
||||
}
|
||||
|
||||
enum ActivationType {
|
||||
ACTIVATION_TYPE_UNKNOWN = 0;
|
||||
ACTIVATE_IMMEDIATELY = 1;
|
||||
ACTIVATE_ON_BOOT = 2;
|
||||
}
|
||||
|
||||
message EventActivation {
|
||||
optional int64 atom_matcher_id = 1;
|
||||
optional int64 ttl_seconds = 2;
|
||||
optional int64 deactivation_atom_matcher_id = 3;
|
||||
optional ActivationType activation_type = 4;
|
||||
}
|
||||
|
||||
message MetricActivation {
|
||||
optional int64 metric_id = 1;
|
||||
|
||||
enum ActivationType {
|
||||
UNKNOWN = 0;
|
||||
ACTIVATE_IMMEDIATELY = 1;
|
||||
ACTIVATE_ON_BOOT = 2;
|
||||
}
|
||||
optional ActivationType activation_type = 3;
|
||||
optional ActivationType activation_type = 3 [deprecated = true];
|
||||
|
||||
repeated EventActivation event_activation = 2;
|
||||
}
|
||||
|
||||
@@ -339,6 +339,7 @@ TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
|
||||
auto metric3Activation = config2.add_metric_activation();
|
||||
metric3Activation->set_metric_id(metricId3);
|
||||
metric3Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
auto metric3ActivationTrigger = metric3Activation->add_event_activation();
|
||||
metric3ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric3ActivationTrigger->set_ttl_seconds(100);
|
||||
@@ -366,12 +367,14 @@ TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
|
||||
auto metric5Activation = config3.add_metric_activation();
|
||||
metric5Activation->set_metric_id(metricId5);
|
||||
metric5Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
auto metric5ActivationTrigger = metric5Activation->add_event_activation();
|
||||
metric5ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric5ActivationTrigger->set_ttl_seconds(100);
|
||||
|
||||
auto metric6Activation = config3.add_metric_activation();
|
||||
metric6Activation->set_metric_id(metricId6);
|
||||
metric6Activation->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
auto metric6ActivationTrigger = metric6Activation->add_event_activation();
|
||||
metric6ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric6ActivationTrigger->set_ttl_seconds(200);
|
||||
@@ -507,17 +510,13 @@ TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
|
||||
// When we shut down, metrics 3 & 5 have 100ns remaining, metric 6 has 100s + 100ns.
|
||||
int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
|
||||
EXPECT_TRUE(metricProducer3->isActive());
|
||||
int64_t ttl3 = metricProducer3->getRemainingTtlNs(shutDownTime);
|
||||
EXPECT_EQ(100, ttl3);
|
||||
EXPECT_TRUE(metricProducer5->isActive());
|
||||
int64_t ttl5 = metricProducer5->getRemainingTtlNs(shutDownTime);
|
||||
EXPECT_EQ(100, ttl5);
|
||||
EXPECT_TRUE(metricProducer6->isActive());
|
||||
int64_t ttl6 = metricProducer6->getRemainingTtlNs(shutDownTime);
|
||||
EXPECT_EQ(100 + 100 * NS_PER_SEC, ttl6);
|
||||
|
||||
processor.WriteMetricsActivationToDisk(shutDownTime);
|
||||
processor.SaveActiveConfigsToDisk(shutDownTime);
|
||||
const int64_t ttl3 = event->GetElapsedTimestampNs() +
|
||||
metric3ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
const int64_t ttl5 = event->GetElapsedTimestampNs() +
|
||||
metric5ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
const int64_t ttl6 = event->GetElapsedTimestampNs() +
|
||||
metric6ActivationTrigger->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
|
||||
// Create a second StatsLogProcessor and push the same 3 configs.
|
||||
long timeBase2 = 1000;
|
||||
@@ -611,25 +610,25 @@ TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
EXPECT_FALSE(metricProducer1003->isActive());
|
||||
const auto& activation1003 = metricProducer1003->mEventActivationMap.begin()->second;
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1003->ttl_ns);
|
||||
EXPECT_EQ(0, activation1003->activation_ns);
|
||||
EXPECT_EQ(0, activation1003->start_ns);
|
||||
EXPECT_FALSE(metricProducer1005->isActive());
|
||||
const auto& activation1005 = metricProducer1005->mEventActivationMap.begin()->second;
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1005->ttl_ns);
|
||||
EXPECT_EQ(0, activation1005->activation_ns);
|
||||
EXPECT_EQ(0, activation1005->start_ns);
|
||||
EXPECT_FALSE(metricProducer1006->isActive());
|
||||
const auto& activation1006 = metricProducer1006->mEventActivationMap.begin()->second;
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activation1006->ttl_ns);
|
||||
EXPECT_EQ(0, activation1006->activation_ns);
|
||||
EXPECT_EQ(0, activation1006->start_ns);
|
||||
|
||||
processor2->LoadMetricsActivationFromDisk();
|
||||
processor2->LoadActiveConfigsFromDisk();
|
||||
|
||||
// After loading activations from disk, assert that all 3 metrics are active.
|
||||
EXPECT_TRUE(metricProducer1003->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl3 - activation1003->ttl_ns, activation1003->activation_ns);
|
||||
EXPECT_EQ(timeBase2 + ttl3 - activation1003->ttl_ns, activation1003->start_ns);
|
||||
EXPECT_TRUE(metricProducer1005->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl5 - activation1005->ttl_ns, activation1005->activation_ns);
|
||||
EXPECT_EQ(timeBase2 + ttl5 - activation1005->ttl_ns, activation1005->start_ns);
|
||||
EXPECT_TRUE(metricProducer1006->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl6 - activation1006->ttl_ns, activation1003->activation_ns);
|
||||
EXPECT_EQ(timeBase2 + ttl6 - activation1006->ttl_ns, activation1003->start_ns);
|
||||
|
||||
// Make sure no more broadcasts have happened.
|
||||
EXPECT_EQ(broadcastCount, 1);
|
||||
@@ -638,7 +637,6 @@ TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
TEST(StatsLogProcessorTest, TestActivationOnBoot) {
|
||||
int uid = 1111;
|
||||
|
||||
// Setup a simple config, no activation
|
||||
StatsdConfig config1;
|
||||
config1.set_id(12341);
|
||||
config1.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
|
||||
@@ -659,7 +657,7 @@ TEST(StatsLogProcessorTest, TestActivationOnBoot) {
|
||||
|
||||
auto metric1Activation = config1.add_metric_activation();
|
||||
metric1Activation->set_metric_id(metricId1);
|
||||
metric1Activation->set_activation_type(MetricActivation::ACTIVATE_ON_BOOT);
|
||||
metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
|
||||
auto metric1ActivationTrigger = metric1Activation->add_event_activation();
|
||||
metric1ActivationTrigger->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric1ActivationTrigger->set_ttl_seconds(100);
|
||||
@@ -697,7 +695,7 @@ TEST(StatsLogProcessorTest, TestActivationOnBoot) {
|
||||
|
||||
const auto& activation1 = metricProducer1->mEventActivationMap.begin()->second;
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
|
||||
EXPECT_EQ(0, activation1->activation_ns);
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1->state);
|
||||
|
||||
std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
|
||||
@@ -705,15 +703,13 @@ TEST(StatsLogProcessorTest, TestActivationOnBoot) {
|
||||
processor->OnLogEvent(event.get());
|
||||
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
EXPECT_EQ(0, activation1->activation_ns);
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kActiveOnBoot, activation1->state);
|
||||
|
||||
int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
|
||||
|
||||
processor->WriteMetricsActivationToDisk(shutDownTime);
|
||||
EXPECT_TRUE(metricProducer1->isActive());
|
||||
int64_t ttl1 = metricProducer1->getRemainingTtlNs(shutDownTime);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, ttl1);
|
||||
processor->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
const int64_t ttl1 = metric1ActivationTrigger->ttl_seconds() * NS_PER_SEC;
|
||||
|
||||
long timeBase2 = 1000;
|
||||
sp<StatsLogProcessor> processor2 =
|
||||
@@ -747,13 +743,743 @@ TEST(StatsLogProcessorTest, TestActivationOnBoot) {
|
||||
|
||||
const auto& activation1001 = metricProducer1001->mEventActivationMap.begin()->second;
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1001->ttl_ns);
|
||||
EXPECT_EQ(0, activation1001->activation_ns);
|
||||
EXPECT_EQ(0, activation1001->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001->state);
|
||||
|
||||
processor2->LoadMetricsActivationFromDisk();
|
||||
processor2->LoadActiveConfigsFromDisk();
|
||||
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001->ttl_ns, activation1001->activation_ns);
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001->ttl_ns, activation1001->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001->state);
|
||||
}
|
||||
|
||||
TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivations) {
|
||||
int uid = 1111;
|
||||
|
||||
// Create config with 2 metrics:
|
||||
// Metric 1: Activate on boot with 2 activations
|
||||
// Metric 2: Always active
|
||||
StatsdConfig config1;
|
||||
config1.set_id(12341);
|
||||
config1.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
|
||||
auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
|
||||
auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
|
||||
*config1.add_atom_matcher() = wakelockAcquireMatcher;
|
||||
*config1.add_atom_matcher() = screenOnMatcher;
|
||||
|
||||
long metricId1 = 1234561;
|
||||
long metricId2 = 1234562;
|
||||
|
||||
auto countMetric1 = config1.add_count_metric();
|
||||
countMetric1->set_id(metricId1);
|
||||
countMetric1->set_what(wakelockAcquireMatcher.id());
|
||||
countMetric1->set_bucket(FIVE_MINUTES);
|
||||
|
||||
auto countMetric2 = config1.add_count_metric();
|
||||
countMetric2->set_id(metricId2);
|
||||
countMetric2->set_what(wakelockAcquireMatcher.id());
|
||||
countMetric2->set_bucket(FIVE_MINUTES);
|
||||
|
||||
auto metric1Activation = config1.add_metric_activation();
|
||||
metric1Activation->set_metric_id(metricId1);
|
||||
metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
|
||||
auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
|
||||
metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric1ActivationTrigger1->set_ttl_seconds(100);
|
||||
auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
|
||||
metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
|
||||
metric1ActivationTrigger2->set_ttl_seconds(200);
|
||||
|
||||
ConfigKey cfgKey1(uid, 12341);
|
||||
long timeBase1 = 1;
|
||||
sp<StatsLogProcessor> processor =
|
||||
CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor->mMetricsManagers.size());
|
||||
auto it = processor->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor->mMetricsManagers.end());
|
||||
auto& metricsManager1 = it->second;
|
||||
EXPECT_TRUE(metricsManager1->isActive());
|
||||
|
||||
auto metricIt = metricsManager1->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
|
||||
auto& metricProducer1 = *metricIt;
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
|
||||
metricIt = metricsManager1->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
|
||||
auto& metricProducer2 = *metricIt;
|
||||
EXPECT_TRUE(metricProducer2->isActive());
|
||||
|
||||
int i = 0;
|
||||
for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation1 = metricProducer1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1->state);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation2 = metricProducer1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
|
||||
EXPECT_EQ(0, activation2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation2->state);
|
||||
// }}}------------------------------------------------------------------------------
|
||||
|
||||
// Trigger Activation 1 for Metric 1
|
||||
std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
|
||||
auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
|
||||
processor->OnLogEvent(event.get());
|
||||
|
||||
// Metric 1 is not active; Activation 1 set to kActiveOnBoot
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kActiveOnBoot, activation1->state);
|
||||
EXPECT_EQ(0, activation2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer2->isActive());
|
||||
// }}}-----------------------------------------------------------------------------
|
||||
|
||||
// Simulate shutdown by saving state to disk
|
||||
int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
|
||||
processor->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
|
||||
|
||||
// Simulate device restarted state by creating new instance of StatsLogProcessor with the
|
||||
// same config.
|
||||
long timeBase2 = 1000;
|
||||
sp<StatsLogProcessor> processor2 =
|
||||
CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor2->mMetricsManagers.size());
|
||||
it = processor2->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor2->mMetricsManagers.end());
|
||||
auto& metricsManager1001 = it->second;
|
||||
EXPECT_TRUE(metricsManager1001->isActive());
|
||||
|
||||
metricIt = metricsManager1001->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
|
||||
auto& metricProducer1001 = *metricIt;
|
||||
EXPECT_FALSE(metricProducer1001->isActive());
|
||||
|
||||
metricIt = metricsManager1001->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
|
||||
auto& metricProducer1002 = *metricIt;
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation1001_1 = metricProducer1001->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1001_1->ttl_ns);
|
||||
EXPECT_EQ(0, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_1->state);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& activation1001_2 = metricProducer1001->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activation1001_2->ttl_ns);
|
||||
EXPECT_EQ(0, activation1001_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_2->state);
|
||||
// }}}-----------------------------------------------------------------------------------
|
||||
|
||||
// Load saved state from disk.
|
||||
processor2->LoadActiveConfigsFromDisk();
|
||||
|
||||
// Metric 1 active; Activation 1 is active, Activation 2 is not active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001_1->state);
|
||||
EXPECT_EQ(0, activation1001_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
// }}}--------------------------------------------------------------------------------
|
||||
|
||||
// Trigger Activation 2 for Metric 1.
|
||||
auto screenOnEvent = CreateScreenStateChangedEvent(
|
||||
android::view::DISPLAY_STATE_ON,
|
||||
timeBase2 + 200
|
||||
);
|
||||
processor2->OnLogEvent(screenOnEvent.get());
|
||||
|
||||
// Metric 1 active; Activation 1 is active, Activation 2 is set to kActiveOnBoot
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001_1->state);
|
||||
EXPECT_EQ(0, activation1001_2->start_ns);
|
||||
EXPECT_EQ(kActiveOnBoot, activation1001_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
// }}}---------------------------------------------------------------------------
|
||||
|
||||
// Simulate shutdown by saving state to disk
|
||||
shutDownTime = timeBase2 + 50 * NS_PER_SEC;
|
||||
processor2->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
ttl1 = timeBase2 + metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
int64_t ttl2 = metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC;
|
||||
|
||||
// Simulate device restarted state by creating new instance of StatsLogProcessor with the
|
||||
// same config.
|
||||
long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
|
||||
sp<StatsLogProcessor> processor3 =
|
||||
CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor3->mMetricsManagers.size());
|
||||
it = processor3->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor3->mMetricsManagers.end());
|
||||
auto& metricsManagerTimeBase3 = it->second;
|
||||
EXPECT_TRUE(metricsManagerTimeBase3->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase3_1 = *metricIt;
|
||||
EXPECT_FALSE(metricProducerTimeBase3_1->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase3_2 = *metricIt;
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activationTimeBase3_1 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase3_1->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase3_1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& activationTimeBase3_2 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase3_2->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
// }}}----------------------------------------------------------------------------------
|
||||
|
||||
// Load saved state from disk.
|
||||
processor3->LoadActiveConfigsFromDisk();
|
||||
|
||||
// Metric 1 active: Activation 1 is active, Activation 2 is active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
|
||||
EXPECT_EQ(timeBase3 + ttl1 - activationTimeBase3_1->ttl_ns, activationTimeBase3_1->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_1->state);
|
||||
EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
// }}}-------------------------------------------------------------------------------
|
||||
|
||||
// Trigger Activation 2 for Metric 1 again.
|
||||
screenOnEvent = CreateScreenStateChangedEvent(
|
||||
android::view::DISPLAY_STATE_ON,
|
||||
timeBase3 + 100 * NS_PER_SEC
|
||||
);
|
||||
processor3->OnLogEvent(screenOnEvent.get());
|
||||
|
||||
// Metric 1 active; Activation 1 is not active, Activation 2 is set to active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
|
||||
EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
// }}}---------------------------------------------------------------------------
|
||||
|
||||
// Simulate shutdown by saving state to disk.
|
||||
shutDownTime = timeBase3 + 500 * NS_PER_SEC;
|
||||
processor3->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
ttl1 = timeBase3 + ttl1 - shutDownTime;
|
||||
ttl2 = timeBase3 + metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
|
||||
// Simulate device restarted state by creating new instance of StatsLogProcessor with the
|
||||
// same config.
|
||||
long timeBase4 = timeBase3 + 600 * NS_PER_SEC;
|
||||
sp<StatsLogProcessor> processor4 =
|
||||
CreateStatsLogProcessor(timeBase4, timeBase4, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor4->mMetricsManagers.size());
|
||||
it = processor4->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor4->mMetricsManagers.end());
|
||||
auto& metricsManagerTimeBase4 = it->second;
|
||||
EXPECT_TRUE(metricsManagerTimeBase4->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase4_1 = *metricIt;
|
||||
EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase4->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase4->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase4->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase4_2 = *metricIt;
|
||||
EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activationTimeBase4_1 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase4_1->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase4_1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase4->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase4->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& activationTimeBase4_2 = metricProducerTimeBase4_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase4_2->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase4_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
|
||||
// }}}----------------------------------------------------------------------------------
|
||||
|
||||
// Load saved state from disk.
|
||||
processor4->LoadActiveConfigsFromDisk();
|
||||
|
||||
// Metric 1 active: Activation 1 is not active, Activation 2 is not active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_FALSE(metricProducerTimeBase4_1->isActive());
|
||||
EXPECT_EQ(kNotActive, activationTimeBase4_1->state);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase4_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase4_2->isActive());
|
||||
// }}}-------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
TEST(StatsLogProcessorTest, TestActivationOnBootMultipleActivationsDifferentActivationTypes) {
|
||||
int uid = 1111;
|
||||
|
||||
// Create config with 2 metrics:
|
||||
// Metric 1: Activate on boot with 2 activations
|
||||
// Metric 2: Always active
|
||||
StatsdConfig config1;
|
||||
config1.set_id(12341);
|
||||
config1.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
|
||||
auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
|
||||
auto screenOnMatcher = CreateScreenTurnedOnAtomMatcher();
|
||||
*config1.add_atom_matcher() = wakelockAcquireMatcher;
|
||||
*config1.add_atom_matcher() = screenOnMatcher;
|
||||
|
||||
long metricId1 = 1234561;
|
||||
long metricId2 = 1234562;
|
||||
|
||||
auto countMetric1 = config1.add_count_metric();
|
||||
countMetric1->set_id(metricId1);
|
||||
countMetric1->set_what(wakelockAcquireMatcher.id());
|
||||
countMetric1->set_bucket(FIVE_MINUTES);
|
||||
|
||||
auto countMetric2 = config1.add_count_metric();
|
||||
countMetric2->set_id(metricId2);
|
||||
countMetric2->set_what(wakelockAcquireMatcher.id());
|
||||
countMetric2->set_bucket(FIVE_MINUTES);
|
||||
|
||||
auto metric1Activation = config1.add_metric_activation();
|
||||
metric1Activation->set_metric_id(metricId1);
|
||||
metric1Activation->set_activation_type(ACTIVATE_ON_BOOT);
|
||||
auto metric1ActivationTrigger1 = metric1Activation->add_event_activation();
|
||||
metric1ActivationTrigger1->set_atom_matcher_id(wakelockAcquireMatcher.id());
|
||||
metric1ActivationTrigger1->set_ttl_seconds(100);
|
||||
auto metric1ActivationTrigger2 = metric1Activation->add_event_activation();
|
||||
metric1ActivationTrigger2->set_atom_matcher_id(screenOnMatcher.id());
|
||||
metric1ActivationTrigger2->set_ttl_seconds(200);
|
||||
metric1ActivationTrigger2->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
|
||||
ConfigKey cfgKey1(uid, 12341);
|
||||
long timeBase1 = 1;
|
||||
sp<StatsLogProcessor> processor =
|
||||
CreateStatsLogProcessor(timeBase1, timeBase1, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor->mMetricsManagers.size());
|
||||
auto it = processor->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor->mMetricsManagers.end());
|
||||
auto& metricsManager1 = it->second;
|
||||
EXPECT_TRUE(metricsManager1->isActive());
|
||||
|
||||
auto metricIt = metricsManager1->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
|
||||
auto& metricProducer1 = *metricIt;
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
|
||||
metricIt = metricsManager1->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1->mAllMetricProducers.end());
|
||||
auto& metricProducer2 = *metricIt;
|
||||
EXPECT_TRUE(metricProducer2->isActive());
|
||||
|
||||
int i = 0;
|
||||
for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation1 = metricProducer1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1->ttl_ns);
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1->state);
|
||||
EXPECT_EQ(ACTIVATE_ON_BOOT, activation1->activationType);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation2 = metricProducer1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activation2->ttl_ns);
|
||||
EXPECT_EQ(0, activation2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation2->state);
|
||||
EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation2->activationType);
|
||||
// }}}------------------------------------------------------------------------------
|
||||
|
||||
// Trigger Activation 1 for Metric 1
|
||||
std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
|
||||
auto event = CreateAcquireWakelockEvent(attributions1, "wl1", 100 + timeBase1);
|
||||
processor->OnLogEvent(event.get());
|
||||
|
||||
// Metric 1 is not active; Activation 1 set to kActiveOnBoot
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
EXPECT_EQ(0, activation1->start_ns);
|
||||
EXPECT_EQ(kActiveOnBoot, activation1->state);
|
||||
EXPECT_EQ(0, activation2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer2->isActive());
|
||||
// }}}-----------------------------------------------------------------------------
|
||||
|
||||
// Simulate shutdown by saving state to disk
|
||||
int64_t shutDownTime = timeBase1 + 100 * NS_PER_SEC;
|
||||
processor->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_FALSE(metricProducer1->isActive());
|
||||
int64_t ttl1 = metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC;
|
||||
|
||||
// Simulate device restarted state by creating new instance of StatsLogProcessor with the
|
||||
// same config.
|
||||
long timeBase2 = 1000;
|
||||
sp<StatsLogProcessor> processor2 =
|
||||
CreateStatsLogProcessor(timeBase2, timeBase2, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor2->mMetricsManagers.size());
|
||||
it = processor2->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor2->mMetricsManagers.end());
|
||||
auto& metricsManager1001 = it->second;
|
||||
EXPECT_TRUE(metricsManager1001->isActive());
|
||||
|
||||
metricIt = metricsManager1001->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
|
||||
auto& metricProducer1001 = *metricIt;
|
||||
EXPECT_FALSE(metricProducer1001->isActive());
|
||||
|
||||
metricIt = metricsManager1001->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManager1001->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManager1001->mAllMetricProducers.end());
|
||||
auto& metricProducer1002 = *metricIt;
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activation1001_1 = metricProducer1001->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activation1001_1->ttl_ns);
|
||||
EXPECT_EQ(0, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_1->state);
|
||||
EXPECT_EQ(ACTIVATE_ON_BOOT, activation1001_1->activationType);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManager1001->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManager1001->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& activation1001_2 = metricProducer1001->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activation1001_2->ttl_ns);
|
||||
EXPECT_EQ(0, activation1001_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_2->state);
|
||||
EXPECT_EQ(ACTIVATE_IMMEDIATELY, activation1001_2->activationType);
|
||||
// }}}-----------------------------------------------------------------------------------
|
||||
|
||||
// Load saved state from disk.
|
||||
processor2->LoadActiveConfigsFromDisk();
|
||||
|
||||
// Metric 1 active; Activation 1 is active, Activation 2 is not active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001_1->state);
|
||||
EXPECT_EQ(0, activation1001_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activation1001_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
// }}}--------------------------------------------------------------------------------
|
||||
|
||||
// Trigger Activation 2 for Metric 1.
|
||||
auto screenOnEvent = CreateScreenStateChangedEvent(
|
||||
android::view::DISPLAY_STATE_ON,
|
||||
timeBase2 + 200
|
||||
);
|
||||
processor2->OnLogEvent(screenOnEvent.get());
|
||||
|
||||
// Metric 1 active; Activation 1 is active, Activation 2 is active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_EQ(timeBase2 + ttl1 - activation1001_1->ttl_ns, activation1001_1->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001_1->state);
|
||||
EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activation1001_2->start_ns);
|
||||
EXPECT_EQ(kActive, activation1001_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
// }}}---------------------------------------------------------------------------
|
||||
|
||||
// Simulate shutdown by saving state to disk
|
||||
shutDownTime = timeBase2 + 50 * NS_PER_SEC;
|
||||
processor2->SaveActiveConfigsToDisk(shutDownTime);
|
||||
EXPECT_TRUE(metricProducer1001->isActive());
|
||||
EXPECT_TRUE(metricProducer1002->isActive());
|
||||
ttl1 = timeBase2 + metric1ActivationTrigger1->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
int64_t ttl2 = screenOnEvent->GetElapsedTimestampNs() +
|
||||
metric1ActivationTrigger2->ttl_seconds() * NS_PER_SEC - shutDownTime;
|
||||
|
||||
// Simulate device restarted state by creating new instance of StatsLogProcessor with the
|
||||
// same config.
|
||||
long timeBase3 = timeBase2 + 120 * NS_PER_SEC;
|
||||
sp<StatsLogProcessor> processor3 =
|
||||
CreateStatsLogProcessor(timeBase3, timeBase3, config1, cfgKey1);
|
||||
|
||||
// Metric 1 is not active.
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_EQ(1, processor3->mMetricsManagers.size());
|
||||
it = processor3->mMetricsManagers.find(cfgKey1);
|
||||
EXPECT_TRUE(it != processor3->mMetricsManagers.end());
|
||||
auto& metricsManagerTimeBase3 = it->second;
|
||||
EXPECT_TRUE(metricsManagerTimeBase3->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase3_1 = *metricIt;
|
||||
EXPECT_FALSE(metricProducerTimeBase3_1->isActive());
|
||||
|
||||
metricIt = metricsManagerTimeBase3->mAllMetricProducers.begin();
|
||||
for (; metricIt != metricsManagerTimeBase3->mAllMetricProducers.end(); metricIt++) {
|
||||
if ((*metricIt)->getMetricId() == metricId2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(metricIt != metricsManagerTimeBase3->mAllMetricProducers.end());
|
||||
auto& metricProducerTimeBase3_2 = *metricIt;
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger1->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const auto& activationTimeBase3_1 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(100 * NS_PER_SEC, activationTimeBase3_1->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase3_1->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
|
||||
EXPECT_EQ(ACTIVATE_ON_BOOT, activationTimeBase3_1->activationType);
|
||||
|
||||
i = 0;
|
||||
for (; i < metricsManagerTimeBase3->mAllAtomMatchers.size(); i++) {
|
||||
if (metricsManagerTimeBase3->mAllAtomMatchers[i]->getId() ==
|
||||
metric1ActivationTrigger2->atom_matcher_id()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& activationTimeBase3_2 = metricProducerTimeBase3_1->mEventActivationMap.at(i);
|
||||
EXPECT_EQ(200 * NS_PER_SEC, activationTimeBase3_2->ttl_ns);
|
||||
EXPECT_EQ(0, activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_2->state);
|
||||
EXPECT_EQ(ACTIVATE_IMMEDIATELY, activationTimeBase3_2->activationType);
|
||||
// }}}----------------------------------------------------------------------------------
|
||||
|
||||
// Load saved state from disk.
|
||||
processor3->LoadActiveConfigsFromDisk();
|
||||
|
||||
// Metric 1 active: Activation 1 is active, Activation 2 is active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
|
||||
EXPECT_EQ(timeBase3 + ttl1 - activationTimeBase3_1->ttl_ns, activationTimeBase3_1->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_1->state);
|
||||
EXPECT_EQ(timeBase3 + ttl2 - activationTimeBase3_2->ttl_ns, activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
// }}}-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
// Trigger Activation 2 for Metric 1 again.
|
||||
screenOnEvent = CreateScreenStateChangedEvent(
|
||||
android::view::DISPLAY_STATE_ON,
|
||||
timeBase3 + 100 * NS_PER_SEC
|
||||
);
|
||||
processor3->OnLogEvent(screenOnEvent.get());
|
||||
|
||||
// Metric 1 active; Activation 1 is not active, Activation 2 is set to active
|
||||
// Metric 2 is active.
|
||||
// {{{---------------------------------------------------------------------------
|
||||
EXPECT_TRUE(metricProducerTimeBase3_1->isActive());
|
||||
EXPECT_EQ(kNotActive, activationTimeBase3_1->state);
|
||||
EXPECT_EQ(screenOnEvent->GetElapsedTimestampNs(), activationTimeBase3_2->start_ns);
|
||||
EXPECT_EQ(kActive, activationTimeBase3_2->state);
|
||||
|
||||
EXPECT_TRUE(metricProducerTimeBase3_2->isActive());
|
||||
// }}}---------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -418,7 +418,7 @@ TEST(GaugeMetricE2eTest, TestRandomSamplePulledEventsWithActivation) {
|
||||
const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
|
||||
auto metric_activation = config.add_metric_activation();
|
||||
metric_activation->set_metric_id(metricId);
|
||||
metric_activation->set_activation_type(MetricActivation::ACTIVATE_IMMEDIATELY);
|
||||
metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
auto event_activation = metric_activation->add_event_activation();
|
||||
event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
|
||||
event_activation->set_ttl_seconds(ttlNs / 1000000000);
|
||||
|
||||
@@ -245,10 +245,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
|
||||
EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
|
||||
std::unique_ptr<LogEvent> event;
|
||||
@@ -268,10 +268,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
|
||||
// First processed event.
|
||||
@@ -285,10 +285,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
|
||||
// 2nd processed event.
|
||||
@@ -298,10 +298,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
// No new broadcast since the config should still be active.
|
||||
EXPECT_EQ(broadcastCount, 1);
|
||||
@@ -319,10 +319,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_EQ(broadcastCount, 2);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
|
||||
// Re-activate metric via screen on.
|
||||
@@ -335,10 +335,10 @@ TEST(MetricActivationE2eTest, TestCountMetric) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
|
||||
// 4th processed event.
|
||||
@@ -460,10 +460,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
|
||||
EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap.size(), 1u);
|
||||
EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
|
||||
@@ -486,10 +486,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -504,10 +504,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -518,10 +518,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
// No new broadcast since the config should still be active.
|
||||
@@ -540,10 +540,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(broadcastCount, 2);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -557,10 +557,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -577,10 +577,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -597,10 +597,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -613,10 +613,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(broadcastCount, 4);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -632,10 +632,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -647,10 +647,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithOneDeactivation) {
|
||||
EXPECT_EQ(broadcastCount, 6);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
|
||||
@@ -782,10 +782,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
|
||||
EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap.size(), 2u);
|
||||
EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
|
||||
@@ -810,10 +810,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -829,10 +829,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -844,10 +844,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -867,10 +867,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(broadcastCount, 2);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -885,10 +885,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -906,10 +906,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -927,10 +927,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(broadcastCount, 4);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -943,10 +943,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(broadcastCount, 4);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -963,10 +963,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 1);
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -979,10 +979,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoDeactivations) {
|
||||
EXPECT_EQ(broadcastCount, 6);
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
@@ -1119,10 +1119,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_TRUE(eventActivationMap.find(0) != eventActivationMap.end());
|
||||
EXPECT_TRUE(eventActivationMap.find(2) != eventActivationMap.end());
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap.size(), 2u);
|
||||
EXPECT_TRUE(eventDeactivationMap.find(3) != eventDeactivationMap.end());
|
||||
@@ -1134,10 +1134,10 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_TRUE(eventActivationMap2.find(0) != eventActivationMap2.end());
|
||||
EXPECT_TRUE(eventActivationMap2.find(2) != eventActivationMap2.end());
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2.size(), 2u);
|
||||
EXPECT_TRUE(eventDeactivationMap2.find(3) != eventDeactivationMap2.end());
|
||||
@@ -1165,19 +1165,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, 0);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1195,19 +1195,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1221,19 +1221,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_TRUE(metricsManager->isActive());
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1257,19 +1257,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_FALSE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_FALSE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + 20);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1284,19 +1284,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + 10);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1316,19 +1316,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1348,19 +1348,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_FALSE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_FALSE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1375,19 +1375,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_FALSE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_FALSE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 11 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1406,19 +1406,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast[0], cfgId);
|
||||
EXPECT_TRUE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_TRUE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
@@ -1431,19 +1431,19 @@ TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations) {
|
||||
EXPECT_EQ(activeConfigsBroadcast.size(), 0);
|
||||
EXPECT_FALSE(metricProducer->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap[3], eventActivationMap[0]);
|
||||
EXPECT_EQ(eventDeactivationMap[4], eventActivationMap[2]);
|
||||
EXPECT_FALSE(metricProducer2->mIsActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[0]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 15);
|
||||
EXPECT_EQ(eventActivationMap2[0]->ttl_ns, 60 * 6 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventActivationMap2[2]->state, ActivationState::kNotActive);
|
||||
EXPECT_EQ(eventActivationMap2[2]->activation_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->start_ns, bucketStartTimeNs + NS_PER_SEC * 60 * 10 + 10);
|
||||
EXPECT_EQ(eventActivationMap2[2]->ttl_ns, 60 * 2 * NS_PER_SEC);
|
||||
EXPECT_EQ(eventDeactivationMap2[3], eventActivationMap2[0]);
|
||||
EXPECT_EQ(eventDeactivationMap2[4], eventActivationMap2[2]);
|
||||
|
||||
@@ -279,7 +279,7 @@ TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation) {
|
||||
const int64_t ttlNs = 2 * bucketSizeNs; // Two buckets.
|
||||
auto metric_activation = config.add_metric_activation();
|
||||
metric_activation->set_metric_id(metricId);
|
||||
metric_activation->set_activation_type(MetricActivation::ACTIVATE_IMMEDIATELY);
|
||||
metric_activation->set_activation_type(ACTIVATE_IMMEDIATELY);
|
||||
auto event_activation = metric_activation->add_event_activation();
|
||||
event_activation->set_atom_matcher_id(batterySaverStartMatcher.id());
|
||||
event_activation->set_ttl_seconds(ttlNs / 1000000000);
|
||||
|
||||
Reference in New Issue
Block a user