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

Side by Side Diff: content/renderer/gpu/render_widget_compositor_unittest.cc

Issue 801973002: Introduce CompositorDependencies for RenderWidgetCompositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: compdep: . Created 6 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
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.cc ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/renderer/gpu/render_widget_compositor.h" 5 #include "content/renderer/gpu/render_widget_compositor.h"
6 6
7 #include "cc/output/begin_frame_args.h" 7 #include "cc/output/begin_frame_args.h"
8 #include "cc/test/failure_output_surface.h" 8 #include "cc/test/failure_output_surface.h"
9 #include "cc/trees/layer_tree_host.h" 9 #include "cc/trees/layer_tree_host.h"
10 #include "content/public/test/mock_render_thread.h" 10 #include "content/public/test/mock_render_thread.h"
11 #include "content/renderer/render_widget.h" 11 #include "content/renderer/render_widget.h"
12 #include "content/renderer/scheduler/renderer_scheduler.h"
13 #include "content/test/fake_compositor_dependencies.h"
14 #include "content/test/fake_renderer_scheduler.h"
12 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/platform/WebScreenInfo.h" 17 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
15 18
16 using testing::AllOf; 19 using testing::AllOf;
17 using testing::Field; 20 using testing::Field;
18 21
19 namespace content { 22 namespace content {
23 namespace {
20 24
21 class MockWebWidget : public blink::WebWidget { 25 class MockWebWidget : public blink::WebWidget {
22 public: 26 public:
23 MOCK_METHOD1(beginFrame, void(const blink::WebBeginFrameArgs& args)); 27 MOCK_METHOD1(beginFrame, void(const blink::WebBeginFrameArgs& args));
24 }; 28 };
25 29
26 class TestRenderWidget : public RenderWidget { 30 class TestRenderWidget : public RenderWidget {
27 public: 31 public:
28 TestRenderWidget() 32 TestRenderWidget()
29 : RenderWidget(blink::WebPopupTypeNone, 33 : RenderWidget(blink::WebPopupTypeNone,
30 blink::WebScreenInfo(), 34 blink::WebScreenInfo(),
31 true, 35 true,
32 false, 36 false,
33 false) { 37 false) {
34 webwidget_ = &mock_webwidget_; 38 webwidget_ = &mock_webwidget_;
35 } 39 }
36 40
37 MockWebWidget mock_webwidget_; 41 MockWebWidget mock_webwidget_;
38 42
39 protected: 43 protected:
40 ~TestRenderWidget() override { webwidget_ = NULL; } 44 ~TestRenderWidget() override { webwidget_ = NULL; }
41 45
42 DISALLOW_COPY_AND_ASSIGN(TestRenderWidget); 46 DISALLOW_COPY_AND_ASSIGN(TestRenderWidget);
43 }; 47 };
44 48
45 class RenderWidgetCompositorTest : public testing::Test { 49 class RenderWidgetCompositorTest : public testing::Test {
46 public: 50 public:
47 RenderWidgetCompositorTest() 51 RenderWidgetCompositorTest()
48 : render_widget_(make_scoped_refptr(new TestRenderWidget())), 52 : render_widget_(make_scoped_refptr(new TestRenderWidget())),
53 compositor_deps_(make_scoped_ptr(new FakeCompositorDependencies)),
49 render_widget_compositor_( 54 render_widget_compositor_(
50 RenderWidgetCompositor::Create(render_widget_.get(), false)) {} 55 RenderWidgetCompositor::Create(render_widget_.get(),
56 compositor_deps_.get())) {}
51 ~RenderWidgetCompositorTest() override {} 57 ~RenderWidgetCompositorTest() override {}
52 58
53 protected: 59 protected:
54 MockRenderThread render_thread_; 60 MockRenderThread render_thread_;
55 scoped_refptr<TestRenderWidget> render_widget_; 61 scoped_refptr<TestRenderWidget> render_widget_;
62 scoped_ptr<FakeCompositorDependencies> compositor_deps_;
56 scoped_ptr<RenderWidgetCompositor> render_widget_compositor_; 63 scoped_ptr<RenderWidgetCompositor> render_widget_compositor_;
57 64
58 private: 65 private:
59 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorTest); 66 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorTest);
60 }; 67 };
61 68
62 TEST_F(RenderWidgetCompositorTest, BeginMainFrame) { 69 TEST_F(RenderWidgetCompositorTest, BeginMainFrame) {
63 base::TimeTicks frame_time(base::TimeTicks() + 70 base::TimeTicks frame_time(base::TimeTicks() +
64 base::TimeDelta::FromSeconds(1)); 71 base::TimeDelta::FromSeconds(1));
65 base::TimeTicks deadline(base::TimeTicks() + base::TimeDelta::FromSeconds(2)); 72 base::TimeTicks deadline(base::TimeTicks() + base::TimeDelta::FromSeconds(2));
(...skipping 30 matching lines...) Expand all
96 }; 103 };
97 104
98 // Verify that failing to create an output surface will cause the compositor 105 // Verify that failing to create an output surface will cause the compositor
99 // to attempt to repeatedly create another output surface. After enough 106 // to attempt to repeatedly create another output surface. After enough
100 // failures, verify that it attempts to create a fallback output surface. 107 // failures, verify that it attempts to create a fallback output surface.
101 // The use null output surface parameter allows testing whether failures 108 // The use null output surface parameter allows testing whether failures
102 // from RenderWidget (couldn't create an output surface) vs failures from 109 // from RenderWidget (couldn't create an output surface) vs failures from
103 // the compositor (couldn't bind the output surface) are handled identically. 110 // the compositor (couldn't bind the output surface) are handled identically.
104 class RenderWidgetCompositorOutputSurface : public RenderWidgetCompositor { 111 class RenderWidgetCompositorOutputSurface : public RenderWidgetCompositor {
105 public: 112 public:
106 RenderWidgetCompositorOutputSurface(RenderWidget* widget, bool threaded) 113 RenderWidgetCompositorOutputSurface(RenderWidget* widget,
107 : RenderWidgetCompositor(widget, threaded), 114 CompositorDependencies* compositor_deps)
115 : RenderWidgetCompositor(widget, compositor_deps),
108 num_failures_before_success_(0), 116 num_failures_before_success_(0),
109 expected_successes_(0), 117 expected_successes_(0),
110 expected_fallback_successes_(0), 118 expected_fallback_successes_(0),
111 expected_requests_(0), 119 expected_requests_(0),
112 num_requests_(0), 120 num_requests_(0),
113 num_requests_since_last_success_(0), 121 num_requests_since_last_success_(0),
114 num_successes_(0), 122 num_successes_(0),
115 num_fallback_successes_(0), 123 num_fallback_successes_(0),
116 num_failures_(0), 124 num_failures_(0),
117 last_create_was_fallback_(false), 125 last_create_was_fallback_(false),
118 use_null_output_surface_(true) { 126 use_null_output_surface_(true) {}
119 cc::LayerTreeSettings settings; 127
120 Initialize(settings); 128 using RenderWidgetCompositor::Initialize;
121 }
122 129
123 scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback) { 130 scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback) {
124 EXPECT_EQ(num_requests_since_last_success_ > 131 EXPECT_EQ(num_requests_since_last_success_ >
125 OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK, 132 OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK,
126 fallback); 133 fallback);
127 last_create_was_fallback_ = fallback; 134 last_create_was_fallback_ = fallback;
128 bool success = num_failures_ >= num_failures_before_success_; 135 bool success = num_failures_ >= num_failures_before_success_;
129 if (success) 136 if (success)
130 return cc::FakeOutputSurface::Create3d(); 137 return cc::FakeOutputSurface::Create3d();
131 return use_null_output_surface_ 138 return use_null_output_surface_
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 bool last_create_was_fallback_; 206 bool last_create_was_fallback_;
200 bool use_null_output_surface_; 207 bool use_null_output_surface_;
201 208
202 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorOutputSurface); 209 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorOutputSurface);
203 }; 210 };
204 211
205 class RenderWidgetCompositorOutputSurfaceTest : public testing::Test { 212 class RenderWidgetCompositorOutputSurfaceTest : public testing::Test {
206 public: 213 public:
207 RenderWidgetCompositorOutputSurfaceTest() 214 RenderWidgetCompositorOutputSurfaceTest()
208 : render_widget_(make_scoped_refptr(new RenderWidgetOutputSurface)), 215 : render_widget_(make_scoped_refptr(new RenderWidgetOutputSurface)),
216 compositor_deps_(make_scoped_ptr(new FakeCompositorDependencies)),
209 render_widget_compositor_(make_scoped_ptr( 217 render_widget_compositor_(make_scoped_ptr(
210 new RenderWidgetCompositorOutputSurface(render_widget_.get(), 218 new RenderWidgetCompositorOutputSurface(render_widget_.get(),
211 false))) { 219 compositor_deps_.get()))) {
220 render_widget_compositor_->Initialize();
212 render_widget_->SetCompositor(render_widget_compositor_.get()); 221 render_widget_->SetCompositor(render_widget_compositor_.get());
213 } 222 }
214 223
215 void RunTest(bool use_null_output_surface, 224 void RunTest(bool use_null_output_surface,
216 int num_failures_before_success, 225 int num_failures_before_success,
217 int expected_successes, 226 int expected_successes,
218 int expected_fallback_succeses) { 227 int expected_fallback_succeses) {
219 render_widget_compositor_->SetUp( 228 render_widget_compositor_->SetUp(
220 use_null_output_surface, num_failures_before_success, 229 use_null_output_surface, num_failures_before_success,
221 expected_successes, expected_fallback_succeses); 230 expected_successes, expected_fallback_succeses);
222 base::MessageLoop::current()->PostTask( 231 base::MessageLoop::current()->PostTask(
223 FROM_HERE, 232 FROM_HERE,
224 base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface, 233 base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface,
225 base::Unretained(render_widget_compositor_.get()))); 234 base::Unretained(render_widget_compositor_.get())));
226 base::MessageLoop::current()->Run(); 235 base::MessageLoop::current()->Run();
227 render_widget_compositor_->AfterTest(); 236 render_widget_compositor_->AfterTest();
228 } 237 }
229 238
230 protected: 239 protected:
231 base::MessageLoop ye_olde_message_loope_; 240 base::MessageLoop ye_olde_message_loope_;
232 MockRenderThread render_thread_; 241 MockRenderThread render_thread_;
233 scoped_refptr<RenderWidgetOutputSurface> render_widget_; 242 scoped_refptr<RenderWidgetOutputSurface> render_widget_;
243 scoped_ptr<FakeCompositorDependencies> compositor_deps_;
234 scoped_ptr<RenderWidgetCompositorOutputSurface> render_widget_compositor_; 244 scoped_ptr<RenderWidgetCompositorOutputSurface> render_widget_compositor_;
235 245
236 private: 246 private:
237 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorOutputSurfaceTest); 247 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorOutputSurfaceTest);
238 }; 248 };
239 249
240 scoped_ptr<cc::OutputSurface> RenderWidgetOutputSurface::CreateOutputSurface( 250 scoped_ptr<cc::OutputSurface> RenderWidgetOutputSurface::CreateOutputSurface(
241 bool fallback) { 251 bool fallback) {
242 return compositor_->CreateOutputSurface(fallback); 252 return compositor_->CreateOutputSurface(fallback);
243 } 253 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 RunTest(false, RenderWidgetCompositor::OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK, 288 RunTest(false, RenderWidgetCompositor::OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK,
279 0, 1); 289 0, 1);
280 } 290 }
281 291
282 TEST_F(RenderWidgetCompositorOutputSurfaceTest, FallbackSuccessNormalSuccess) { 292 TEST_F(RenderWidgetCompositorOutputSurfaceTest, FallbackSuccessNormalSuccess) {
283 // The first success is a fallback, but the next should not be a fallback. 293 // The first success is a fallback, but the next should not be a fallback.
284 RunTest(false, RenderWidgetCompositor::OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK, 294 RunTest(false, RenderWidgetCompositor::OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK,
285 1, 1); 295 1, 1);
286 } 296 }
287 297
298 } // namespace
288 } // namespace content 299 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.cc ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698