#include "net/base/task/task_runner.h"
#include "base/metrics/histogram_functions.h"
#include "base/no_destructor.h"
#include "base/rand_util.h"
namespace net {
namespace {
base::MetricsSubSampler& GetMetricsSubSampler() {
static base::MetricsSubSampler sampler;
return sampler;
}
}
const scoped_refptr<base::SingleThreadTaskRunner>& GetTaskRunner(
RequestPriority priority) {
if (GetMetricsSubSampler().ShouldSample(0.001)) {
base::UmaHistogramEnumeration("Net.TaskRunner.RequestPriority", priority);
}
if (internal::GetTaskRunnerGlobals().task_runners[priority]) {
return internal::GetTaskRunnerGlobals().task_runners[priority];
}
return base::SingleThreadTaskRunner::GetCurrentDefault();
}
namespace internal {
TaskRunnerGlobals::TaskRunnerGlobals() = default;
TaskRunnerGlobals::~TaskRunnerGlobals() = default;
TaskRunnerGlobals& GetTaskRunnerGlobals() {
static base::NoDestructor<TaskRunnerGlobals> globals;
return *globals;
}
}
}