blob: f1a88a5ca64d992bb448de5066b75d7116501fd6 [file]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/device/compute_pressure/pressure_test_support.h"
#include "base/check_op.h"
#include "base/location.h"
#include "base/sequence_checker.h"
#include "base/task/sequenced_task_runner.h"
namespace device {
constexpr PressureSample FakeCpuProbe::kInitialSample;
FakeCpuProbe::FakeCpuProbe(
base::TimeDelta sampling_interval,
base::RepeatingCallback<void(mojom::PressureState)> sampling_callback)
: CpuProbe(sampling_interval, std::move(sampling_callback)),
last_sample_(kInitialSample) {}
FakeCpuProbe::~FakeCpuProbe() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void FakeCpuProbe::Update() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(&FakeCpuProbe::OnUpdate, base::Unretained(this)));
}
void FakeCpuProbe::OnUpdate() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::AutoLock auto_lock(lock_);
OnPressureSampleAvailable(last_sample_);
}
void FakeCpuProbe::SetLastSample(PressureSample sample) {
base::AutoLock auto_lock(lock_);
last_sample_ = sample;
}
StreamingCpuProbe::StreamingCpuProbe(
base::TimeDelta sampling_interval,
base::RepeatingCallback<void(mojom::PressureState)> sampling_callback,
std::vector<PressureSample> samples,
base::OnceClosure callback)
: CpuProbe(sampling_interval, std::move(sampling_callback)),
samples_(std::move(samples)),
callback_(std::move(callback)) {
CHECK_GT(samples_.size(), 0u);
}
StreamingCpuProbe::~StreamingCpuProbe() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void StreamingCpuProbe::Update() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(&StreamingCpuProbe::OnUpdate, base::Unretained(this)));
}
void StreamingCpuProbe::OnUpdate() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++sample_index_;
if (sample_index_ < samples_.size()) {
OnPressureSampleAvailable(samples_.at(sample_index_));
return;
}
if (!callback_.is_null()) {
std::move(callback_).Run();
}
}
} // namespace device