| Index: remoting/client/display/gl_renderer_unittest.cc
|
| diff --git a/remoting/client/display/gl_renderer_unittest.cc b/remoting/client/display/gl_renderer_unittest.cc
|
| index 7edb9bd0e07b56910365bdfaf0b81ec846e9dabf..92b8dd7f1dd4256caae99274ff0f12e476cf27dd 100644
|
| --- a/remoting/client/display/gl_renderer_unittest.cc
|
| +++ b/remoting/client/display/gl_renderer_unittest.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| +#include "remoting/client/display/fake_canvas.h"
|
| #include "remoting/client/display/gl_renderer_delegate.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
|
| @@ -67,8 +68,43 @@ class FakeGlRendererDelegate : public GlRendererDelegate {
|
| int canvas_height_ = 0;
|
|
|
| base::Closure on_frame_rendered_callback_;
|
| -
|
| base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FakeGlRendererDelegate);
|
| +};
|
| +
|
| +class FakeDrawable : public Drawable {
|
| + public:
|
| + FakeDrawable() : weak_factory_(this) {}
|
| +
|
| + void SetId(int id) { id_ = id; }
|
| + int GetId() { return id_; }
|
| +
|
| + base::WeakPtr<Drawable> GetWeakPtr() override {
|
| + return weak_factory_.GetWeakPtr();
|
| + }
|
| +
|
| + void SetCanvas(base::WeakPtr<Canvas> canvas) override {}
|
| +
|
| + bool Draw() override {
|
| + drawn_++;
|
| + return false;
|
| + }
|
| +
|
| + void SetZIndex(int z_index) { z_index_ = z_index; }
|
| +
|
| + int GetZIndex() override { return z_index_; }
|
| +
|
| + int DrawnCount() { return drawn_; }
|
| +
|
| + private:
|
| + int drawn_ = 0;
|
| + int id_ = -1;
|
| + int z_index_ = -1;
|
| +
|
| + base::WeakPtrFactory<FakeDrawable> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FakeDrawable);
|
| };
|
|
|
| class GlRendererTest : public testing::Test {
|
| @@ -76,6 +112,8 @@ class GlRendererTest : public testing::Test {
|
| void SetUp() override;
|
| void SetDesktopFrameWithSize(const webrtc::DesktopSize& size);
|
| void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count);
|
| + int GetDrawablesCount();
|
| + std::vector<base::WeakPtr<Drawable>> GetDrawables();
|
|
|
| protected:
|
| void RequestRender();
|
| @@ -103,6 +141,14 @@ void GlRendererTest::RequestRender() {
|
| renderer_->RequestRender();
|
| }
|
|
|
| +int GlRendererTest::GetDrawablesCount() {
|
| + return renderer_->drawables_.size();
|
| +}
|
| +
|
| +std::vector<base::WeakPtr<Drawable>> GlRendererTest::GetDrawables() {
|
| + return renderer_->drawables_;
|
| +}
|
| +
|
| void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) {
|
| renderer_->OnFrameReceived(
|
| base::MakeUnique<webrtc::BasicDesktopFrame>(size),
|
| @@ -167,24 +213,24 @@ TEST_F(GlRendererTest, TestRequestRenderOnlyScheduleOnce) {
|
|
|
| TEST_F(GlRendererTest, TestDelegateOnSizeChanged) {
|
| SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16));
|
| - EXPECT_EQ(1, delegate_.on_size_changed_call_count());
|
| - EXPECT_EQ(16, delegate_.canvas_width());
|
| - EXPECT_EQ(16, delegate_.canvas_height());
|
| + ASSERT_EQ(1, delegate_.on_size_changed_call_count());
|
| + ASSERT_EQ(16, delegate_.canvas_width());
|
| + ASSERT_EQ(16, delegate_.canvas_height());
|
|
|
| SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16));
|
| - EXPECT_EQ(1, delegate_.on_size_changed_call_count());
|
| - EXPECT_EQ(16, delegate_.canvas_width());
|
| - EXPECT_EQ(16, delegate_.canvas_height());
|
| + ASSERT_EQ(1, delegate_.on_size_changed_call_count());
|
| + ASSERT_EQ(16, delegate_.canvas_width());
|
| + ASSERT_EQ(16, delegate_.canvas_height());
|
|
|
| SetDesktopFrameWithSize(webrtc::DesktopSize(32, 32));
|
| - EXPECT_EQ(2, delegate_.on_size_changed_call_count());
|
| - EXPECT_EQ(32, delegate_.canvas_width());
|
| - EXPECT_EQ(32, delegate_.canvas_height());
|
| + ASSERT_EQ(2, delegate_.on_size_changed_call_count());
|
| + ASSERT_EQ(32, delegate_.canvas_width());
|
| + ASSERT_EQ(32, delegate_.canvas_height());
|
|
|
| renderer_->RequestCanvasSize();
|
| - EXPECT_EQ(3, delegate_.on_size_changed_call_count());
|
| - EXPECT_EQ(32, delegate_.canvas_width());
|
| - EXPECT_EQ(32, delegate_.canvas_height());
|
| + ASSERT_EQ(3, delegate_.on_size_changed_call_count());
|
| + ASSERT_EQ(32, delegate_.canvas_width());
|
| + ASSERT_EQ(32, delegate_.canvas_height());
|
| }
|
|
|
| TEST_F(GlRendererTest, TestOnFrameReceivedDoneCallbacks) {
|
| @@ -199,10 +245,110 @@ TEST_F(GlRendererTest, TestOnFrameReceivedDoneCallbacks) {
|
|
|
| PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 20);
|
| RunUntilRendered();
|
| - EXPECT_EQ(2, delegate_.on_frame_rendered_call_count());
|
| - EXPECT_EQ(21, on_desktop_frame_processed_call_count());
|
| + ASSERT_EQ(2, delegate_.on_frame_rendered_call_count());
|
| + ASSERT_EQ(21, on_desktop_frame_processed_call_count());
|
| }
|
|
|
| // TODO(yuweih): Add tests to validate the rendered output.
|
|
|
| +TEST_F(GlRendererTest, TestAddDrawable) {
|
| + std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
|
| + drawable0->SetId(0);
|
| + renderer_->AddDrawable(drawable0->GetWeakPtr());
|
| + ASSERT_EQ(1, GetDrawablesCount());
|
| +}
|
| +
|
| +TEST_F(GlRendererTest, TestAddDrawableDefaultOrder) {
|
| + std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
|
| + drawable0->SetId(0);
|
| + renderer_->AddDrawable(drawable0->GetWeakPtr());
|
| + ASSERT_EQ(1, GetDrawablesCount());
|
| +
|
| + std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
|
| + drawable1->SetId(1);
|
| + renderer_->AddDrawable(drawable1->GetWeakPtr());
|
| + ASSERT_EQ(2, GetDrawablesCount());
|
| +
|
| + std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
|
| + drawable2->SetId(2);
|
| + renderer_->AddDrawable(drawable2->GetWeakPtr());
|
| + ASSERT_EQ(3, GetDrawablesCount());
|
| +
|
| + int i = 0;
|
| + for (auto& drawable : GetDrawables()) {
|
| + FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
|
| + ASSERT_EQ(i, fg->GetId());
|
| + i++;
|
| + }
|
| + ASSERT_EQ(3, i);
|
| +}
|
| +
|
| +TEST_F(GlRendererTest, TestAddDrawableOrder) {
|
| + std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
|
| + drawable2->SetId(2);
|
| + drawable2->SetZIndex(2);
|
| + renderer_->AddDrawable(drawable2->GetWeakPtr());
|
| + ASSERT_EQ(1, GetDrawablesCount());
|
| +
|
| + std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
|
| + drawable0->SetId(0);
|
| + renderer_->AddDrawable(drawable0->GetWeakPtr());
|
| + ASSERT_EQ(2, GetDrawablesCount());
|
| +
|
| + std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
|
| + drawable1->SetId(1);
|
| + drawable1->SetZIndex(1);
|
| + renderer_->AddDrawable(drawable1->GetWeakPtr());
|
| + ASSERT_EQ(3, GetDrawablesCount());
|
| +
|
| + int i = 0;
|
| + for (auto& drawable : GetDrawables()) {
|
| + FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
|
| + ASSERT_EQ(i, fg->GetId());
|
| + i++;
|
| + }
|
| + ASSERT_EQ(3, i);
|
| +}
|
| +
|
| +TEST_F(GlRendererTest, TestAddDrawableDrawn) {
|
| + std::unique_ptr<Canvas> fakeCanvas = base::MakeUnique<FakeCanvas>();
|
| + renderer_->OnSurfaceCreated(std::move(fakeCanvas));
|
| + delegate_.can_render_frame_ = true;
|
| + PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1);
|
| + std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
|
| + drawable0->SetId(3);
|
| + renderer_->AddDrawable(drawable0->GetWeakPtr());
|
| + RequestRender();
|
| + RunTasksInCurrentQueue();
|
| + std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
|
| + drawable1->SetId(2);
|
| + drawable1->SetZIndex(1);
|
| + renderer_->AddDrawable(drawable1->GetWeakPtr());
|
| +
|
| + RequestRender();
|
| + RunTasksInCurrentQueue();
|
| +
|
| + std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
|
| + drawable2->SetId(1);
|
| + drawable2->SetZIndex(2);
|
| + renderer_->AddDrawable(drawable2->GetWeakPtr());
|
| + ASSERT_EQ(3, GetDrawablesCount());
|
| +
|
| + RequestRender();
|
| + RunTasksInCurrentQueue();
|
| + for (auto& drawable : GetDrawables()) {
|
| + FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
|
| + EXPECT_EQ(fg->GetId(), fg->DrawnCount());
|
| + }
|
| +}
|
| +
|
| +TEST_F(GlRendererTest, TestCreateGlRendererWithDesktop) {
|
| + renderer_ = GlRenderer::CreateGlRendererWithDesktop();
|
| + renderer_->SetDelegate(delegate_.GetWeakPtr());
|
| + ASSERT_EQ(3, GetDrawablesCount());
|
| +}
|
| +
|
| +// TODO(nicholss): Add a test where the drawable is destructed and the renderer
|
| +// gets a dead weakptr.
|
| +
|
| } // namespace remoting
|
|
|