blob: aa144e98d3f3fa5f1201bbf7020209fd2e1552e4 [file] [log] [blame]
// Copyright (c) 2020 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 <memory>
#include "base/test/metrics/histogram_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
#include "third_party/blink/renderer/modules/peerconnection/thermal_uma_listener.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h"
namespace blink {
namespace {
const base::TimeDelta kStatsReportingPeriod = base::TimeDelta::FromMinutes(1);
class ThermalUmaListenerTest : public ::testing::Test {
public:
void SetUp() override {
task_runner_ = platform_->test_task_runner();
thermal_uma_listener_ = ThermalUmaListener::Create(task_runner_);
}
protected:
ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
platform_;
// Tasks run on the test thread with fake time, use FastForwardBy() to
// advance time and execute delayed tasks.
scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
base::HistogramTester histogram_;
std::unique_ptr<ThermalUmaListener> thermal_uma_listener_;
};
} // namespace
using base::Bucket;
TEST_F(ThermalUmaListenerTest, NoMeasurementsHasNoHistograms) {
EXPECT_THAT(histogram_.GetTotalCountsForPrefix("WebRTC.PeerConnectio"),
testing::IsEmpty());
task_runner_->FastForwardBy(kStatsReportingPeriod);
EXPECT_THAT(histogram_.GetTotalCountsForPrefix("WebRTC.PeerConnection"),
testing::IsEmpty());
}
TEST_F(ThermalUmaListenerTest, HistogramAfterSignal) {
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kFair);
task_runner_->FastForwardBy(kStatsReportingPeriod);
EXPECT_THAT(histogram_.GetAllSamples("WebRTC.PeerConnection.ThermalState"),
testing::ElementsAre(Bucket(1, 1)));
}
TEST_F(ThermalUmaListenerTest, DeletionCancelsListener) {
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kFair);
task_runner_->FastForwardBy(2 * kStatsReportingPeriod);
EXPECT_THAT(histogram_.GetAllSamples("WebRTC.PeerConnection.ThermalState"),
testing::ElementsAre(Bucket(1, 2)));
thermal_uma_listener_ = nullptr;
task_runner_->FastForwardBy(kStatsReportingPeriod);
EXPECT_THAT(histogram_.GetAllSamples("WebRTC.PeerConnection.ThermalState"),
testing::ElementsAre(Bucket(1, 2)));
}
TEST_F(ThermalUmaListenerTest, RecordsMostRecentState) {
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kFair);
task_runner_->FastForwardBy(kStatsReportingPeriod / 2);
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kSerious);
task_runner_->FastForwardBy(kStatsReportingPeriod / 2);
EXPECT_THAT(histogram_.GetAllSamples("WebRTC.PeerConnection.ThermalState"),
testing::ElementsAre(Bucket(2, 1)));
}
TEST_F(ThermalUmaListenerTest, HistogramBucketsIncludesPreviousPeriod) {
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kNominal);
task_runner_->FastForwardBy(kStatsReportingPeriod);
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kFair);
task_runner_->FastForwardBy(kStatsReportingPeriod);
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kSerious);
task_runner_->FastForwardBy(kStatsReportingPeriod);
thermal_uma_listener_->OnThermalMeasurement(
mojom::blink::DeviceThermalState::kCritical);
task_runner_->FastForwardBy(kStatsReportingPeriod);
EXPECT_THAT(histogram_.GetAllSamples("WebRTC.PeerConnection.ThermalState"),
testing::ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1),
Bucket(3, 1)));
}
} // namespace blink