0

Migrate WebrtcFrameSchedulerTest to TaskEnvironment

Bug: 984323
Change-Id: Ic4de8adbc45dd06be924a1f75ed673a0bacfbd86
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2956374
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Reviewed-by: Joe Downing <joedow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#892226}
This commit is contained in:
Patrick Monette
2021-06-14 19:56:45 +00:00
committed by Chromium LUCI CQ
parent afe6fcac77
commit a5cc8cdf47

@@ -7,8 +7,7 @@
#include "remoting/protocol/webrtc_frame_scheduler.h" #include "remoting/protocol/webrtc_frame_scheduler.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/test/test_mock_time_task_runner.h" #include "base/test/task_environment.h"
#include "base/threading/thread_task_runner_handle.h"
#include "remoting/base/session_options.h" #include "remoting/base/session_options.h"
#include "remoting/protocol/frame_stats.h" #include "remoting/protocol/frame_stats.h"
#include "remoting/protocol/webrtc_dummy_video_encoder.h" #include "remoting/protocol/webrtc_dummy_video_encoder.h"
@@ -26,15 +25,15 @@ namespace protocol {
class WebrtcFrameSchedulerTest : public ::testing::Test { class WebrtcFrameSchedulerTest : public ::testing::Test {
public: public:
WebrtcFrameSchedulerTest() WebrtcFrameSchedulerTest()
: task_runner_( : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
// Default ctor starts clock with null TimeTicks, which confuses
// the scheduler, so use the current time as a baseline.
new base::TestMockTimeTaskRunner(base::Time::Now(),
base::TimeTicks::Now())),
task_runner_handle_(task_runner_.get()),
frame_(DesktopSize(1, 1)) { frame_(DesktopSize(1, 1)) {
// Default ctor starts clock with null TimeTicks, which confuses
// the scheduler, so use the current time as a baseline.
task_environment_.FastForwardBy(base::Time::NowFromSystemTime() -
base::Time());
scheduler_ = std::make_unique<WebrtcFrameSchedulerSimple>(SessionOptions()); scheduler_ = std::make_unique<WebrtcFrameSchedulerSimple>(SessionOptions());
scheduler_->SetTickClockForTest(task_runner_->GetMockTickClock()); scheduler_->SetTickClockForTest(task_environment_.GetMockTickClock());
scheduler_->Start( scheduler_->Start(
base::BindRepeating(&WebrtcFrameSchedulerTest::CaptureCallback, base::BindRepeating(&WebrtcFrameSchedulerTest::CaptureCallback,
base::Unretained(this))); base::Unretained(this)));
@@ -59,8 +58,7 @@ class WebrtcFrameSchedulerTest : public ::testing::Test {
} }
protected: protected:
scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; base::test::TaskEnvironment task_environment_;
base::ThreadTaskRunnerHandle task_runner_handle_;
std::unique_ptr<WebrtcFrameSchedulerSimple> scheduler_; std::unique_ptr<WebrtcFrameSchedulerSimple> scheduler_;
@@ -74,16 +72,16 @@ TEST_F(WebrtcFrameSchedulerTest, UpdateBitrateWhenPending) {
scheduler_->OnKeyFrameRequested(); scheduler_->OnKeyFrameRequested();
scheduler_->OnTargetBitrateChanged(100); scheduler_->OnTargetBitrateChanged(100);
EXPECT_TRUE(task_runner_->HasPendingTask()); EXPECT_FALSE(task_environment_.MainThreadIsIdle());
task_runner_->FastForwardUntilNoTasksRemain(); task_environment_.FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, capture_callback_count_); EXPECT_EQ(1, capture_callback_count_);
scheduler_->OnTargetBitrateChanged(1001); scheduler_->OnTargetBitrateChanged(1001);
// |task_runner_| shouldn't have pending tasks as the scheduler should be // There shouldn't be any pending tasks as the scheduler should be waiting for
// waiting for the previous capture request to complete. // the previous capture request to complete.
EXPECT_FALSE(task_runner_->HasPendingTask()); EXPECT_TRUE(task_environment_.MainThreadIsIdle());
} }
TEST_F(WebrtcFrameSchedulerTest, EmptyFrameUpdate_ShouldNotBeSentImmediately) { TEST_F(WebrtcFrameSchedulerTest, EmptyFrameUpdate_ShouldNotBeSentImmediately) {
@@ -114,7 +112,7 @@ TEST_F(WebrtcFrameSchedulerTest, EmptyFrameUpdate_ShouldBeSentAfter2000ms) {
frame_.mutable_updated_region()->SetRect(DesktopRect::MakeWH(1, 1)); frame_.mutable_updated_region()->SetRect(DesktopRect::MakeWH(1, 1));
scheduler_->OnFrameCaptured(&frame_, &out_params); scheduler_->OnFrameCaptured(&frame_, &out_params);
// Wait more than 2000ms. // Wait more than 2000ms.
task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(3000)); task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(3000));
// Empty frame. // Empty frame.
frame_.mutable_updated_region()->Clear(); frame_.mutable_updated_region()->Clear();
bool result = scheduler_->OnFrameCaptured(&frame_, &out_params); bool result = scheduler_->OnFrameCaptured(&frame_, &out_params);
@@ -135,7 +133,7 @@ TEST_F(WebrtcFrameSchedulerTest, Capturer_RunsAt30Fps) {
// repeated captures. // repeated captures.
scheduler_->OnKeyFrameRequested(); scheduler_->OnKeyFrameRequested();
task_runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
// There should be approximately 30 captures in 1 second. // There should be approximately 30 captures in 1 second.
EXPECT_LE(29, capture_callback_count_); EXPECT_LE(29, capture_callback_count_);
@@ -150,7 +148,7 @@ TEST_F(WebrtcFrameSchedulerTest, RttReportedInFrameStats) {
auto rtt = base::TimeDelta::FromMilliseconds(123); auto rtt = base::TimeDelta::FromMilliseconds(123);
scheduler_->OnRttUpdate(rtt); scheduler_->OnRttUpdate(rtt);
task_runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1));
EXPECT_EQ(rtt, frame_stats_.rtt_estimate); EXPECT_EQ(rtt, frame_stats_.rtt_estimate);
} }