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

Side by Side 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 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/display/gl_renderer.h" 5 #include "remoting/client/display/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"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "remoting/client/display/fake_canvas.h"
13 #include "remoting/client/display/gl_renderer_delegate.h" 14 #include "remoting/client/display/gl_renderer_delegate.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 16 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
16 17
17 namespace remoting { 18 namespace remoting {
18 19
19 class FakeGlRendererDelegate : public GlRendererDelegate { 20 class FakeGlRendererDelegate : public GlRendererDelegate {
20 public: 21 public:
21 FakeGlRendererDelegate() : weak_factory_(this) {} 22 FakeGlRendererDelegate() : weak_factory_(this) {}
22 23
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 61
61 private: 62 private:
62 int can_render_frame_call_count_ = 0; 63 int can_render_frame_call_count_ = 0;
63 int on_frame_rendered_call_count_ = 0; 64 int on_frame_rendered_call_count_ = 0;
64 int on_size_changed_call_count_ = 0; 65 int on_size_changed_call_count_ = 0;
65 66
66 int canvas_width_ = 0; 67 int canvas_width_ = 0;
67 int canvas_height_ = 0; 68 int canvas_height_ = 0;
68 69
69 base::Closure on_frame_rendered_callback_; 70 base::Closure on_frame_rendered_callback_;
71 base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_;
70 72
71 base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_; 73 DISALLOW_COPY_AND_ASSIGN(FakeGlRendererDelegate);
74 };
75
76 class FakeDrawable : public Drawable {
77 public:
78 FakeDrawable() : weak_factory_(this) {}
79
80 void SetId(int id) { id_ = id; }
81 int GetId() { return id_; }
82
83 base::WeakPtr<Drawable> GetWeakPtr() override {
84 return weak_factory_.GetWeakPtr();
85 }
86
87 void SetCanvas(base::WeakPtr<Canvas> canvas) override {}
88
89 bool Draw() override {
90 drawn_++;
91 return false;
92 }
93
94 void SetZIndex(int z_index) { z_index_ = z_index; }
95
96 int GetZIndex() override { return z_index_; }
97
98 int DrawnCount() { return drawn_; }
99
100 private:
101 int drawn_ = 0;
102 int id_ = -1;
103 int z_index_ = -1;
104
105 base::WeakPtrFactory<FakeDrawable> weak_factory_;
106
107 DISALLOW_COPY_AND_ASSIGN(FakeDrawable);
72 }; 108 };
73 109
74 class GlRendererTest : public testing::Test { 110 class GlRendererTest : public testing::Test {
75 public: 111 public:
76 void SetUp() override; 112 void SetUp() override;
77 void SetDesktopFrameWithSize(const webrtc::DesktopSize& size); 113 void SetDesktopFrameWithSize(const webrtc::DesktopSize& size);
78 void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count); 114 void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count);
115 int GetDrawablesCount();
116 std::vector<base::WeakPtr<Drawable>> GetDrawables();
79 117
80 protected: 118 protected:
81 void RequestRender(); 119 void RequestRender();
82 void OnDesktopFrameProcessed(); 120 void OnDesktopFrameProcessed();
83 void RunTasksInCurrentQueue(); 121 void RunTasksInCurrentQueue();
84 void RunUntilRendered(); 122 void RunUntilRendered();
85 int on_desktop_frame_processed_call_count() { 123 int on_desktop_frame_processed_call_count() {
86 return on_desktop_frame_processed_call_count_; 124 return on_desktop_frame_processed_call_count_;
87 } 125 }
88 126
89 base::MessageLoop message_loop_; 127 base::MessageLoop message_loop_;
90 std::unique_ptr<GlRenderer> renderer_; 128 std::unique_ptr<GlRenderer> renderer_;
91 FakeGlRendererDelegate delegate_; 129 FakeGlRendererDelegate delegate_;
92 130
93 private: 131 private:
94 int on_desktop_frame_processed_call_count_ = 0; 132 int on_desktop_frame_processed_call_count_ = 0;
95 }; 133 };
96 134
97 void GlRendererTest::SetUp() { 135 void GlRendererTest::SetUp() {
98 renderer_.reset(new GlRenderer()); 136 renderer_.reset(new GlRenderer());
99 renderer_->SetDelegate(delegate_.GetWeakPtr()); 137 renderer_->SetDelegate(delegate_.GetWeakPtr());
100 } 138 }
101 139
102 void GlRendererTest::RequestRender() { 140 void GlRendererTest::RequestRender() {
103 renderer_->RequestRender(); 141 renderer_->RequestRender();
104 } 142 }
105 143
144 int GlRendererTest::GetDrawablesCount() {
145 return renderer_->drawables_.size();
146 }
147
148 std::vector<base::WeakPtr<Drawable>> GlRendererTest::GetDrawables() {
149 return renderer_->drawables_;
150 }
151
106 void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) { 152 void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) {
107 renderer_->OnFrameReceived( 153 renderer_->OnFrameReceived(
108 base::MakeUnique<webrtc::BasicDesktopFrame>(size), 154 base::MakeUnique<webrtc::BasicDesktopFrame>(size),
109 base::Bind(&GlRendererTest::OnDesktopFrameProcessed, 155 base::Bind(&GlRendererTest::OnDesktopFrameProcessed,
110 base::Unretained(this))); 156 base::Unretained(this)));
111 } 157 }
112 158
113 void GlRendererTest::PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, 159 void GlRendererTest::PostSetDesktopFrameTasks(const webrtc::DesktopSize& size,
114 int count) { 160 int count) {
115 for (int i = 0; i < count; i++) { 161 for (int i = 0; i < count; i++) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 EXPECT_EQ(1, delegate_.on_frame_rendered_call_count()); 206 EXPECT_EQ(1, delegate_.on_frame_rendered_call_count());
161 207
162 RequestRender(); 208 RequestRender();
163 RunTasksInCurrentQueue(); 209 RunTasksInCurrentQueue();
164 EXPECT_EQ(2, delegate_.can_render_frame_call_count()); 210 EXPECT_EQ(2, delegate_.can_render_frame_call_count());
165 EXPECT_EQ(2, delegate_.on_frame_rendered_call_count()); 211 EXPECT_EQ(2, delegate_.on_frame_rendered_call_count());
166 } 212 }
167 213
168 TEST_F(GlRendererTest, TestDelegateOnSizeChanged) { 214 TEST_F(GlRendererTest, TestDelegateOnSizeChanged) {
169 SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16)); 215 SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16));
170 EXPECT_EQ(1, delegate_.on_size_changed_call_count()); 216 ASSERT_EQ(1, delegate_.on_size_changed_call_count());
171 EXPECT_EQ(16, delegate_.canvas_width()); 217 ASSERT_EQ(16, delegate_.canvas_width());
172 EXPECT_EQ(16, delegate_.canvas_height()); 218 ASSERT_EQ(16, delegate_.canvas_height());
173 219
174 SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16)); 220 SetDesktopFrameWithSize(webrtc::DesktopSize(16, 16));
175 EXPECT_EQ(1, delegate_.on_size_changed_call_count()); 221 ASSERT_EQ(1, delegate_.on_size_changed_call_count());
176 EXPECT_EQ(16, delegate_.canvas_width()); 222 ASSERT_EQ(16, delegate_.canvas_width());
177 EXPECT_EQ(16, delegate_.canvas_height()); 223 ASSERT_EQ(16, delegate_.canvas_height());
178 224
179 SetDesktopFrameWithSize(webrtc::DesktopSize(32, 32)); 225 SetDesktopFrameWithSize(webrtc::DesktopSize(32, 32));
180 EXPECT_EQ(2, delegate_.on_size_changed_call_count()); 226 ASSERT_EQ(2, delegate_.on_size_changed_call_count());
181 EXPECT_EQ(32, delegate_.canvas_width()); 227 ASSERT_EQ(32, delegate_.canvas_width());
182 EXPECT_EQ(32, delegate_.canvas_height()); 228 ASSERT_EQ(32, delegate_.canvas_height());
183 229
184 renderer_->RequestCanvasSize(); 230 renderer_->RequestCanvasSize();
185 EXPECT_EQ(3, delegate_.on_size_changed_call_count()); 231 ASSERT_EQ(3, delegate_.on_size_changed_call_count());
186 EXPECT_EQ(32, delegate_.canvas_width()); 232 ASSERT_EQ(32, delegate_.canvas_width());
187 EXPECT_EQ(32, delegate_.canvas_height()); 233 ASSERT_EQ(32, delegate_.canvas_height());
188 } 234 }
189 235
190 TEST_F(GlRendererTest, TestOnFrameReceivedDoneCallbacks) { 236 TEST_F(GlRendererTest, TestOnFrameReceivedDoneCallbacks) {
191 delegate_.can_render_frame_ = true; 237 delegate_.can_render_frame_ = true;
192 238
193 // Implicitly calls RequestRender(). 239 // Implicitly calls RequestRender().
194 240
195 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1); 241 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1);
196 RunUntilRendered(); 242 RunUntilRendered();
197 EXPECT_EQ(1, delegate_.on_frame_rendered_call_count()); 243 EXPECT_EQ(1, delegate_.on_frame_rendered_call_count());
198 EXPECT_EQ(1, on_desktop_frame_processed_call_count()); 244 EXPECT_EQ(1, on_desktop_frame_processed_call_count());
199 245
200 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 20); 246 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 20);
201 RunUntilRendered(); 247 RunUntilRendered();
202 EXPECT_EQ(2, delegate_.on_frame_rendered_call_count()); 248 ASSERT_EQ(2, delegate_.on_frame_rendered_call_count());
203 EXPECT_EQ(21, on_desktop_frame_processed_call_count()); 249 ASSERT_EQ(21, on_desktop_frame_processed_call_count());
204 } 250 }
205 251
206 // TODO(yuweih): Add tests to validate the rendered output. 252 // TODO(yuweih): Add tests to validate the rendered output.
207 253
254 TEST_F(GlRendererTest, TestAddDrawable) {
255 std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
256 drawable0->SetId(0);
257 renderer_->AddDrawable(drawable0->GetWeakPtr());
258 ASSERT_EQ(1, GetDrawablesCount());
259 }
260
261 TEST_F(GlRendererTest, TestAddDrawableDefaultOrder) {
262 std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
263 drawable0->SetId(0);
264 renderer_->AddDrawable(drawable0->GetWeakPtr());
265 ASSERT_EQ(1, GetDrawablesCount());
266
267 std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
268 drawable1->SetId(1);
269 renderer_->AddDrawable(drawable1->GetWeakPtr());
270 ASSERT_EQ(2, GetDrawablesCount());
271
272 std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
273 drawable2->SetId(2);
274 renderer_->AddDrawable(drawable2->GetWeakPtr());
275 ASSERT_EQ(3, GetDrawablesCount());
276
277 int i = 0;
278 for (auto& drawable : GetDrawables()) {
279 FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
280 ASSERT_EQ(i, fg->GetId());
281 i++;
282 }
283 ASSERT_EQ(3, i);
284 }
285
286 TEST_F(GlRendererTest, TestAddDrawableOrder) {
287 std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
288 drawable2->SetId(2);
289 drawable2->SetZIndex(2);
290 renderer_->AddDrawable(drawable2->GetWeakPtr());
291 ASSERT_EQ(1, GetDrawablesCount());
292
293 std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
294 drawable0->SetId(0);
295 renderer_->AddDrawable(drawable0->GetWeakPtr());
296 ASSERT_EQ(2, GetDrawablesCount());
297
298 std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
299 drawable1->SetId(1);
300 drawable1->SetZIndex(1);
301 renderer_->AddDrawable(drawable1->GetWeakPtr());
302 ASSERT_EQ(3, GetDrawablesCount());
303
304 int i = 0;
305 for (auto& drawable : GetDrawables()) {
306 FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
307 ASSERT_EQ(i, fg->GetId());
308 i++;
309 }
310 ASSERT_EQ(3, i);
311 }
312
313 TEST_F(GlRendererTest, TestAddDrawableDrawn) {
314 std::unique_ptr<Canvas> fakeCanvas = base::MakeUnique<FakeCanvas>();
315 renderer_->OnSurfaceCreated(std::move(fakeCanvas));
316 delegate_.can_render_frame_ = true;
317 PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1);
318 std::unique_ptr<FakeDrawable> drawable0 = base::MakeUnique<FakeDrawable>();
319 drawable0->SetId(3);
320 renderer_->AddDrawable(drawable0->GetWeakPtr());
321 RequestRender();
322 RunTasksInCurrentQueue();
323 std::unique_ptr<FakeDrawable> drawable1 = base::MakeUnique<FakeDrawable>();
324 drawable1->SetId(2);
325 drawable1->SetZIndex(1);
326 renderer_->AddDrawable(drawable1->GetWeakPtr());
327
328 RequestRender();
329 RunTasksInCurrentQueue();
330
331 std::unique_ptr<FakeDrawable> drawable2 = base::MakeUnique<FakeDrawable>();
332 drawable2->SetId(1);
333 drawable2->SetZIndex(2);
334 renderer_->AddDrawable(drawable2->GetWeakPtr());
335 ASSERT_EQ(3, GetDrawablesCount());
336
337 RequestRender();
338 RunTasksInCurrentQueue();
339 for (auto& drawable : GetDrawables()) {
340 FakeDrawable* fg = static_cast<FakeDrawable*>(drawable.get());
341 EXPECT_EQ(fg->GetId(), fg->DrawnCount());
342 }
343 }
344
345 TEST_F(GlRendererTest, TestCreateGlRendererWithDesktop) {
346 renderer_ = GlRenderer::CreateGlRendererWithDesktop();
347 renderer_->SetDelegate(delegate_.GetWeakPtr());
348 ASSERT_EQ(3, GetDrawablesCount());
349 }
350
351 // TODO(nicholss): Add a test where the drawable is destructed and the renderer
352 // gets a dead weakptr.
353
208 } // namespace remoting 354 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698