summaryrefslogtreecommitdiff
path: root/cmds/statsd/src/anomaly/AlarmMonitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/statsd/src/anomaly/AlarmMonitor.cpp')
-rw-r--r--cmds/statsd/src/anomaly/AlarmMonitor.cpp139
1 files changed, 0 insertions, 139 deletions
diff --git a/cmds/statsd/src/anomaly/AlarmMonitor.cpp b/cmds/statsd/src/anomaly/AlarmMonitor.cpp
deleted file mode 100644
index b632d040eb43..000000000000
--- a/cmds/statsd/src/anomaly/AlarmMonitor.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define DEBUG false
-#include "Log.h"
-
-#include "anomaly/AlarmMonitor.h"
-#include "guardrail/StatsdStats.h"
-
-namespace android {
-namespace os {
-namespace statsd {
-
-AlarmMonitor::AlarmMonitor(
- uint32_t minDiffToUpdateRegisteredAlarmTimeSec,
- const std::function<void(const shared_ptr<IStatsCompanionService>&, int64_t)>& updateAlarm,
- const std::function<void(const shared_ptr<IStatsCompanionService>&)>& cancelAlarm)
- : mRegisteredAlarmTimeSec(0),
- mMinUpdateTimeSec(minDiffToUpdateRegisteredAlarmTimeSec),
- mUpdateAlarm(updateAlarm),
- mCancelAlarm(cancelAlarm) {}
-
-AlarmMonitor::~AlarmMonitor() {}
-
-void AlarmMonitor::setStatsCompanionService(
- shared_ptr<IStatsCompanionService> statsCompanionService) {
- std::lock_guard<std::mutex> lock(mLock);
- shared_ptr<IStatsCompanionService> tmpForLock = mStatsCompanionService;
- mStatsCompanionService = statsCompanionService;
- if (statsCompanionService == nullptr) {
- VLOG("Erasing link to statsCompanionService");
- return;
- }
- VLOG("Creating link to statsCompanionService");
- const sp<const InternalAlarm> top = mPq.top();
- if (top != nullptr) {
- updateRegisteredAlarmTime_l(top->timestampSec);
- }
-}
-
-void AlarmMonitor::add(sp<const InternalAlarm> alarm) {
- std::lock_guard<std::mutex> lock(mLock);
- if (alarm == nullptr) {
- ALOGW("Asked to add a null alarm.");
- return;
- }
- if (alarm->timestampSec < 1) {
- // forbidden since a timestamp 0 is used to indicate no alarm registered
- ALOGW("Asked to add a 0-time alarm.");
- return;
- }
- // TODO(b/110563466): Ensure that refractory period is respected.
- VLOG("Adding alarm with time %u", alarm->timestampSec);
- mPq.push(alarm);
- if (mRegisteredAlarmTimeSec < 1 ||
- alarm->timestampSec + mMinUpdateTimeSec < mRegisteredAlarmTimeSec) {
- updateRegisteredAlarmTime_l(alarm->timestampSec);
- }
-}
-
-void AlarmMonitor::remove(sp<const InternalAlarm> alarm) {
- std::lock_guard<std::mutex> lock(mLock);
- if (alarm == nullptr) {
- ALOGW("Asked to remove a null alarm.");
- return;
- }
- VLOG("Removing alarm with time %u", alarm->timestampSec);
- bool wasPresent = mPq.remove(alarm);
- if (!wasPresent) return;
- if (mPq.empty()) {
- VLOG("Queue is empty. Cancel any alarm.");
- cancelRegisteredAlarmTime_l();
- return;
- }
- uint32_t soonestAlarmTimeSec = mPq.top()->timestampSec;
- VLOG("Soonest alarm is %u", soonestAlarmTimeSec);
- if (soonestAlarmTimeSec > mRegisteredAlarmTimeSec + mMinUpdateTimeSec) {
- updateRegisteredAlarmTime_l(soonestAlarmTimeSec);
- }
-}
-
-// More efficient than repeatedly calling remove(mPq.top()) since it batches the
-// updates to the registered alarm.
-unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> AlarmMonitor::popSoonerThan(
- uint32_t timestampSec) {
- VLOG("Removing alarms with time <= %u", timestampSec);
- unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> oldAlarms;
- std::lock_guard<std::mutex> lock(mLock);
-
- for (sp<const InternalAlarm> t = mPq.top(); t != nullptr && t->timestampSec <= timestampSec;
- t = mPq.top()) {
- oldAlarms.insert(t);
- mPq.pop(); // remove t
- }
- // Always update registered alarm time (if anything has changed).
- if (!oldAlarms.empty()) {
- if (mPq.empty()) {
- VLOG("Queue is empty. Cancel any alarm.");
- cancelRegisteredAlarmTime_l();
- } else {
- // Always update the registered alarm in this case (unlike remove()).
- updateRegisteredAlarmTime_l(mPq.top()->timestampSec);
- }
- }
- return oldAlarms;
-}
-
-void AlarmMonitor::updateRegisteredAlarmTime_l(uint32_t timestampSec) {
- VLOG("Updating reg alarm time to %u", timestampSec);
- mRegisteredAlarmTimeSec = timestampSec;
- mUpdateAlarm(mStatsCompanionService, secToMs(mRegisteredAlarmTimeSec));
-}
-
-void AlarmMonitor::cancelRegisteredAlarmTime_l() {
- VLOG("Cancelling reg alarm.");
- mRegisteredAlarmTimeSec = 0;
- mCancelAlarm(mStatsCompanionService);
-}
-
-int64_t AlarmMonitor::secToMs(uint32_t timeSec) {
- return ((int64_t)timeSec) * 1000;
-}
-
-} // namespace statsd
-} // namespace os
-} // namespace android