blob: 5864ca14de111e2a98dc80bcb8e458ae2ecfa65b [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/message_loop/timer_slack.h"
#include <atomic>
#include "base/check_op.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace base {
namespace features {
constexpr base::Feature kLudicrousTimerSlack{"LudicrousTimerSlack",
base::FEATURE_DISABLED_BY_DEFAULT};
namespace {
constexpr base::FeatureParam<base::TimeDelta> kSlackValueMs{
&kLudicrousTimerSlack, "slack_ms",
// 1.5 seconds default slack for this ludicrous experiment.
base::TimeDelta::FromMilliseconds(1500)};
} // namespace
} // namespace features
namespace {
std::atomic<size_t> g_ludicrous_timer_suspend_count{0};
} // namespace
bool IsLudicrousTimerSlackEnabled() {
return base::FeatureList::IsEnabled(base::features::kLudicrousTimerSlack);
}
base::TimeDelta GetLudicrousTimerSlack() {
return features::kSlackValueMs.Get();
}
void SuspendLudicrousTimerSlack() {
++g_ludicrous_timer_suspend_count;
}
void ResumeLudicrousTimerSlack() {
size_t old_count = g_ludicrous_timer_suspend_count.fetch_sub(1);
DCHECK_LT(0u, old_count);
}
bool IsLudicrousTimerSlackSuspended() {
return g_ludicrous_timer_suspend_count.load() > 0u;
}
} // namespace base