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

Side by Side Diff: remoting/client/gl_renderer_unittest.cc

Issue 2591363002: Adding drawable to CRD andorid and iOS gl rendering pipeline. (Closed)
Patch Set: Minor cleanup of an unused const. Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/client/gl_renderer.h" 5 #include "remoting/client/gl_renderer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 int on_size_changed_call_count_ = 0; 74 int on_size_changed_call_count_ = 0;
75 75
76 int canvas_width_ = 0; 76 int canvas_width_ = 0;
77 int canvas_height_ = 0; 77 int canvas_height_ = 0;
78 78
79 base::Closure on_frame_rendered_callback_; 79 base::Closure on_frame_rendered_callback_;
80 80
81 base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_; 81 base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_;
82 }; 82 };
83 83
84 class FakeGlDrawable : public GlDrawable {
85 public:
86 FakeGlDrawable() : drawn_(0), id_(-1), weak_factory_(this) {}
joedow 2016/12/22 00:29:03 nit: init the primitives inline and clean up the i
nicholss 2017/01/09 18:50:24 Done.
87
88 void SetId(int id) { id_ = id; }
89 int GetId() { return id_; }
90
91 base::WeakPtr<GlDrawable> GetWeakPtr() override {
92 return weak_factory_.GetWeakPtr();
93 }
94
95 void SetCanvas(GlCanvas* canvas) override { canvas_ = canvas; }
96
97 bool Draw() override {
98 drawn_++;
99 return false;
100 }
101
102 int DrawnCount() { return drawn_; }
103
104 private:
105 int drawn_;
106 int id_;
107 GlCanvas* canvas_;
108
109 base::WeakPtrFactory<FakeGlDrawable> weak_factory_;
joedow 2016/12/22 00:29:03 DISALLOW_COPY_AND_ASSIGN macro?
nicholss 2017/01/09 18:50:24 Done.
110 };
111
84 class GlRendererTest : public testing::Test { 112 class GlRendererTest : public testing::Test {
85 public: 113 public:
86 void SetUp() override; 114 void SetUp() override;
87 void SetDesktopFrameWithSize(const webrtc::DesktopSize& size); 115 void SetDesktopFrameWithSize(const webrtc::DesktopSize& size);
88 void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count); 116 void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count);
117 int GetDrawablesCount();
118 std::vector<base::WeakPtr<GlDrawable>> GetDrawables();
joedow 2016/12/22 00:29:03 Can this return a const ref so it doesn't need to
nicholss 2017/01/09 18:50:24 I don't think it matters for the test. It is 5 ele
89 119
90 protected: 120 protected:
91 void RequestRender(); 121 void RequestRender();
92 void OnDesktopFrameProcessed(); 122 void OnDesktopFrameProcessed();
93 void RunTasksInCurrentQueue(); 123 void RunTasksInCurrentQueue();
94 void RunUntilRendered(); 124 void RunUntilRendered();
95 int on_desktop_frame_processed_call_count() { 125 int on_desktop_frame_processed_call_count() {
96 return on_desktop_frame_processed_call_count_; 126 return on_desktop_frame_processed_call_count_;
97 } 127 }
98 128
99 base::MessageLoop message_loop_; 129 base::MessageLoop message_loop_;
100 std::unique_ptr<GlRenderer> renderer_; 130 std::unique_ptr<GlRenderer> renderer_;
101 FakeGlRendererDelegate delegate_; 131 FakeGlRendererDelegate delegate_;
102 132
103 private: 133 private:
104 int on_desktop_frame_processed_call_count_ = 0; 134 int on_desktop_frame_processed_call_count_ = 0;
105 }; 135 };
106 136
107 void GlRendererTest::SetUp() { 137 void GlRendererTest::SetUp() {
108 renderer_.reset(new GlRenderer()); 138 renderer_.reset(new GlRenderer());
109 renderer_->SetDelegate(delegate_.GetWeakPtr()); 139 renderer_->SetDelegate(delegate_.GetWeakPtr());
110 } 140 }
111 141
112 void GlRendererTest::RequestRender() { 142 void GlRendererTest::RequestRender() {
113 renderer_->RequestRender(); 143 renderer_->RequestRender();
114 } 144 }
115 145
146 int GlRendererTest::GetDrawablesCount() {
147 return (int)renderer_->drawables_.size();
148 }
149
150 std::vector<base::WeakPtr<GlDrawable>> GlRendererTest::GetDrawables() {
151 return renderer_->drawables_;
152 }
153
116 void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) { 154 void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) {
117 renderer_->OnFrameReceived( 155 renderer_->OnFrameReceived(
118 base::MakeUnique<webrtc::BasicDesktopFrame>(size), 156 base::MakeUnique<webrtc::BasicDesktopFrame>(size),
119 base::Bind(&GlRendererTest::OnDesktopFrameProcessed, 157 base::Bind(&GlRendererTest::OnDesktopFrameProcessed,
120 base::Unretained(this))); 158 base::Unretained(this)));
121 } 159 }
122 160
123 void GlRendererTest::PostSetDesktopFrameTasks( 161 void GlRendererTest::PostSetDesktopFrameTasks(
124 const webrtc::DesktopSize& size, int count) { 162 const webrtc::DesktopSize& size, int count) {
125 for (int i = 0; i < count; i++) { 163 for (int i = 0; i < count; i++) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 EXPECT_EQ(1, on_desktop_frame_processed_call_count()); 247 EXPECT_EQ(1, on_desktop_frame_processed_call_count());
210 248
211 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 20); 249 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 20);
212 RunUntilRendered(); 250 RunUntilRendered();
213 EXPECT_EQ(2, delegate_.on_frame_rendered_call_count()); 251 EXPECT_EQ(2, delegate_.on_frame_rendered_call_count());
214 EXPECT_EQ(21, on_desktop_frame_processed_call_count()); 252 EXPECT_EQ(21, on_desktop_frame_processed_call_count());
215 } 253 }
216 254
217 // TODO(yuweih): Add tests to validate the rendered output. 255 // TODO(yuweih): Add tests to validate the rendered output.
218 256
257 TEST_F(GlRendererTest, TestAddDrawable) {
258 FakeGlDrawable* drawable0 = new FakeGlDrawable();
259 drawable0->SetId(0);
260 renderer_->AddDrawable(drawable0->GetWeakPtr());
261 EXPECT_EQ(1, GetDrawablesCount());
262 }
263
264 TEST_F(GlRendererTest, TestAddDrawableDefaultOrder) {
265 FakeGlDrawable* drawable0 = new FakeGlDrawable();
266 drawable0->SetId(0);
267 renderer_->AddDrawable(drawable0->GetWeakPtr());
268 EXPECT_EQ(1, GetDrawablesCount());
joedow 2016/12/22 00:29:03 Why use EXPECT instead of ASSERT? Do you want the
nicholss 2017/01/09 18:50:24 I do not know how to unit test in chromium... Don'
Yuwei 2017/01/09 20:28:52 I think ASSERT will fail the test case and make th
269
270 FakeGlDrawable* drawable1 = new FakeGlDrawable();
271 drawable1->SetId(1);
272 renderer_->AddDrawable(drawable1->GetWeakPtr());
273 EXPECT_EQ(2, GetDrawablesCount());
274
275 FakeGlDrawable* drawable2 = new FakeGlDrawable();
276 drawable2->SetId(2);
277 renderer_->AddDrawable(drawable2->GetWeakPtr());
278 EXPECT_EQ(3, GetDrawablesCount());
279
280 std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables();
281 int i = 0;
282 for (auto& drawable : drawables) {
joedow 2016/12/22 00:29:03 replace 'drawable' with GetDrawables() instead?
nicholss 2017/01/09 18:50:24 Done.
283 FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get();
joedow 2016/12/22 00:29:03 can you use a c++ style cast instead a c style? r
nicholss 2017/01/09 18:50:24 Done.
284 EXPECT_EQ(i, fg->GetId());
285 i++;
286 }
287 EXPECT_EQ(3, i);
288 }
289
290 TEST_F(GlRendererTest, TestAddDrawableOrder) {
291 FakeGlDrawable* drawable2 = new FakeGlDrawable();
292 drawable2->SetId(2);
293 drawable2->SetZIndex(2);
294 renderer_->AddDrawable(drawable2->GetWeakPtr());
295 EXPECT_EQ(1, GetDrawablesCount());
296
297 FakeGlDrawable* drawable0 = new FakeGlDrawable();
298 drawable0->SetId(0);
299 renderer_->AddDrawable(drawable0->GetWeakPtr());
300 EXPECT_EQ(2, GetDrawablesCount());
301
302 FakeGlDrawable* drawable1 = new FakeGlDrawable();
303 drawable1->SetId(1);
304 drawable1->SetZIndex(1);
305 renderer_->AddDrawable(drawable1->GetWeakPtr());
306 EXPECT_EQ(3, GetDrawablesCount());
307
308 std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables();
309 int i = 0;
310 for (auto& drawable : drawables) {
311 FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get();
312 EXPECT_EQ(i, fg->GetId());
313 i++;
314 }
315 EXPECT_EQ(3, i);
316 }
317
318 TEST_F(GlRendererTest, TestAddDrawableDrawn) {
319 renderer_->OnSurfaceCreated(-1);
320
321 delegate_.can_render_frame_ = true;
322 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1);
323
324 FakeGlDrawable* drawable0 = new FakeGlDrawable();
325 drawable0->SetId(3);
326 renderer_->AddDrawable(drawable0->GetWeakPtr());
327
328 RequestRender();
329 RunTasksInCurrentQueue();
330
331 FakeGlDrawable* drawable1 = new FakeGlDrawable();
332 drawable1->SetId(2);
333 drawable1->SetZIndex(1);
334 renderer_->AddDrawable(drawable1->GetWeakPtr());
335
336 RequestRender();
337 RunTasksInCurrentQueue();
338
339 FakeGlDrawable* drawable2 = new FakeGlDrawable();
340 drawable2->SetId(1);
341 drawable2->SetZIndex(2);
342 renderer_->AddDrawable(drawable2->GetWeakPtr());
343 EXPECT_EQ(3, GetDrawablesCount());
344
345 RequestRender();
346 RunTasksInCurrentQueue();
347 std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables();
348 for (auto& drawable : drawables) {
349 FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get();
350 EXPECT_EQ(fg->GetId(), fg->DrawnCount());
351 }
352 }
353
354 TEST_F(GlRendererTest, TestCreateGlRendererWithDesktop) {
355 renderer_.reset(GlRenderer::CreateGlRendererWithDesktop());
356 renderer_->SetDelegate(delegate_.GetWeakPtr());
357 EXPECT_EQ(3, GetDrawablesCount());
358 }
359
360 // TODO(nicholss): Add a test where the drawable is destructed and the renderer
361 // gets a dead weakptr.
362
219 } // namespace remoting 363 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698