Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7219f8ba authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move forward the alarm timestamp when config is added to statsd." into pi-dev

parents 9c9177eb c04feba8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -366,7 +366,7 @@ sp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const Stat
    sp<AlarmMonitor> periodicAlarmMonitor;
    sp<StatsLogProcessor> processor = new StatsLogProcessor(
        uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){});
    processor->OnConfigUpdated(key, config);
    processor->OnConfigUpdated(0, key, config);
    return processor;
}

+3 −2
Original line number Diff line number Diff line
@@ -191,11 +191,12 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) {
    }
}

void StatsLogProcessor::OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config) {
void StatsLogProcessor::OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key,
                                        const StatsdConfig& config) {
    std::lock_guard<std::mutex> lock(mMetricsMutex);
    VLOG("Updated configuration for key %s", key.ToString().c_str());
    sp<MetricsManager> newMetricsManager =
        new MetricsManager(key, config, mTimeBaseSec, mUidMap,
        new MetricsManager(key, config, mTimeBaseSec, (timestampNs - 1) / NS_PER_SEC + 1, mUidMap,
                           mAnomalyAlarmMonitor, mPeriodicAlarmMonitor);

    if (newMetricsManager->isConfigValid()) {
+2 −1
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ public:

    void OnLogEvent(LogEvent* event);

    void OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config);
    void OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key,
                         const StatsdConfig& config);
    void OnConfigRemoved(const ConfigKey& key);

    size_t GetMetricsSize(const ConfigKey& key) const;
+15 −4
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@ namespace android {
namespace os {
namespace statsd {

AlarmTracker::AlarmTracker(uint64_t startMillis,
AlarmTracker::AlarmTracker(const uint64_t startMillis,
                           const uint64_t currentMillis,
                           const Alarm& alarm, const ConfigKey& configKey,
                           const sp<AlarmMonitor>& alarmMonitor)
    : mAlarmConfig(alarm),
@@ -38,7 +39,11 @@ AlarmTracker::AlarmTracker(uint64_t startMillis,
      mAlarmMonitor(alarmMonitor) {
    VLOG("AlarmTracker() called");
    mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC;
    // startMillis is the time statsd is created. We need to find the 1st alarm timestamp after
    // the config is added to statsd.
    mAlarmSec = findNextAlarmSec(currentMillis / MS_PER_SEC);  // round up
    mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)};
    VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec);
    if (mAlarmMonitor != nullptr) {
        mAlarmMonitor->add(mInternalAlarm);
    }
@@ -55,9 +60,13 @@ void AlarmTracker::addSubscription(const Subscription& subscription) {
    mSubscriptions.push_back(subscription);
}

uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) {
    int periodsForward = (currentTimeSec - mAlarmSec) * MS_PER_SEC / mAlarmConfig.period_millis();
    return mAlarmSec + (periodsForward + 1) * mAlarmConfig.period_millis() / MS_PER_SEC;
int64_t AlarmTracker::findNextAlarmSec(int64_t currentTimeSec) {
    if (currentTimeSec <= mAlarmSec) {
        return mAlarmSec;
    }
    int64_t periodsForward =
        ((currentTimeSec - mAlarmSec) * MS_PER_SEC - 1) / mAlarmConfig.period_millis() + 1;
    return mAlarmSec + periodsForward * mAlarmConfig.period_millis() / MS_PER_SEC;
}

void AlarmTracker::informAlarmsFired(
@@ -68,12 +77,14 @@ void AlarmTracker::informAlarmsFired(
        return;
    }
    if (!mSubscriptions.empty()) {
        VLOG("AlarmTracker triggers the subscribers.");
        triggerSubscribers(mAlarmConfig.id(), DEFAULT_METRIC_DIMENSION_KEY, mConfigKey,
                           mSubscriptions);
    }
    firedAlarms.erase(mInternalAlarm);
    mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up
    mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)};
    VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec);
    if (mAlarmMonitor != nullptr) {
        mAlarmMonitor->add(mInternalAlarm);
    }
+5 −4
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ namespace statsd {

class AlarmTracker : public virtual RefBase {
public:
    AlarmTracker(uint64_t startMillis,
    AlarmTracker(const uint64_t startMillis,
                 const uint64_t currentMillis,
                 const Alarm& alarm, const ConfigKey& configKey,
                 const sp<AlarmMonitor>& subscriberAlarmMonitor);

@@ -53,13 +54,13 @@ protected:
        return mInternalAlarm == nullptr ? 0 : mInternalAlarm->timestampSec;
    }

    uint64_t findNextAlarmSec(uint64_t currentTimeMillis);
    int64_t findNextAlarmSec(int64_t currentTimeMillis);

    // statsd_config.proto Alarm message that defines this tracker.
    const Alarm mAlarmConfig;

    // A reference to the Alarm's config key.
    const ConfigKey& mConfigKey;
    const ConfigKey mConfigKey;

    // The subscriptions that depend on this alarm.
    std::vector<Subscription> mSubscriptions;
@@ -68,7 +69,7 @@ protected:
    sp<AlarmMonitor> mAlarmMonitor;

    // The current expected alarm time in seconds.
    uint64_t mAlarmSec;
    int64_t mAlarmSec;

    // The current alarm.
    sp<const InternalAlarm> mInternalAlarm;
Loading