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

Commit 25f94aa5 authored by Yangster-mac's avatar Yangster-mac Committed by android-build-merger
Browse files

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

am: 7219f8ba

Change-Id: I04263e131472d5b0f0f3ffd408988d4b44a6b195
parents f39da1b5 7219f8ba
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