Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: remoting/client/display/gl_renderer_unittest.cc

Issue 2591363002: Adding drawable to CRD andorid and iOS gl rendering pipeline. (Closed)
Patch Set: More like GetZIndex. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698