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

Side by Side Diff: cc/output/renderer_unittest.cc

Issue 1985973002: Defer compositor context creation to the thread. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 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 "cc/output/delegating_renderer.h" 5 #include "cc/output/delegating_renderer.h"
6 #include "cc/output/gl_renderer.h" 6 #include "cc/output/gl_renderer.h"
7 #include "cc/output/output_surface.h" 7 #include "cc/output/output_surface.h"
8 #include "cc/test/fake_output_surface_client.h" 8 #include "cc/test/fake_output_surface_client.h"
9 #include "cc/test/fake_renderer_client.h" 9 #include "cc/test/fake_renderer_client.h"
10 #include "cc/test/fake_resource_provider.h" 10 #include "cc/test/fake_resource_provider.h"
11 #include "cc/test/test_context_provider.h" 11 #include "cc/test/test_context_provider.h"
12 #include "cc/test/test_web_graphics_context_3d.h" 12 #include "cc/test/test_web_graphics_context_3d.h"
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace cc { 16 namespace cc {
17 namespace { 17 namespace {
18 18
19 class TestOutputSurface : public OutputSurface { 19 class TestOutputSurface : public OutputSurface {
20 public: 20 public:
21 explicit TestOutputSurface(scoped_refptr<ContextProvider> context_provider); 21 explicit TestOutputSurface(
22 std::unique_ptr<ContextProvider::DeferredCreate> context_provider_create);
22 ~TestOutputSurface() override; 23 ~TestOutputSurface() override;
23 24
24 // OutputSurface implementation 25 // OutputSurface implementation
25 void SwapBuffers(CompositorFrame* frame) override; 26 void SwapBuffers(CompositorFrame* frame) override;
26 }; 27 };
27 28
28 TestOutputSurface::TestOutputSurface( 29 TestOutputSurface::TestOutputSurface(
29 scoped_refptr<ContextProvider> context_provider) 30 std::unique_ptr<ContextProvider::DeferredCreate> context_provider_create)
30 : OutputSurface(std::move(context_provider)) {} 31 : OutputSurface(std::move(context_provider_create)) {}
31 32
32 TestOutputSurface::~TestOutputSurface() { 33 TestOutputSurface::~TestOutputSurface() {
33 } 34 }
34 35
35 void TestOutputSurface::SwapBuffers(CompositorFrame* frame) { 36 void TestOutputSurface::SwapBuffers(CompositorFrame* frame) {
36 client_->DidSwapBuffers(); 37 client_->DidSwapBuffers();
37 client_->DidSwapBuffersComplete(); 38 client_->DidSwapBuffersComplete();
38 } 39 }
39 40
40 class MockContextProvider : public TestContextProvider { 41 class MockContextProvider : public TestContextProvider {
41 public: 42 public:
42 explicit MockContextProvider( 43 MockContextProvider()
43 std::unique_ptr<TestWebGraphicsContext3D> context) 44 : TestContextProvider(TestWebGraphicsContext3D::Create()) {}
44 : TestContextProvider(std::move(context)) {} 45
46 class DeferredCreate : public ContextProvider::DeferredCreate {
47 public:
48 explicit DeferredCreate(MockContextProvider** created)
49 : created_(created) {}
50 scoped_refptr<ContextProvider> CreateContext() override {
51 scoped_refptr<MockContextProvider> context(new MockContextProvider);
52 *created_ = context.get();
53 return context;
54 }
55
56 private:
57 MockContextProvider** created_;
58 };
59
45 MOCK_METHOD0(DeleteCachedResources, void()); 60 MOCK_METHOD0(DeleteCachedResources, void());
46 61
47 protected: 62 protected:
48 ~MockContextProvider() {} 63 ~MockContextProvider() {}
49 }; 64 };
50 65
51 template <class T> 66 template <class T>
52 std::unique_ptr<Renderer> CreateRenderer(RendererClient* client, 67 std::unique_ptr<Renderer> CreateRenderer(RendererClient* client,
53 const RendererSettings* settings, 68 const RendererSettings* settings,
54 OutputSurface* output_surface, 69 OutputSurface* output_surface,
(...skipping 16 matching lines...) Expand all
71 OutputSurface* output_surface, 86 OutputSurface* output_surface,
72 ResourceProvider* resource_provider) { 87 ResourceProvider* resource_provider) {
73 return GLRenderer::Create( 88 return GLRenderer::Create(
74 client, settings, output_surface, resource_provider, NULL, 0); 89 client, settings, output_surface, resource_provider, NULL, 0);
75 } 90 }
76 91
77 template <typename T> 92 template <typename T>
78 class RendererTest : public ::testing::Test { 93 class RendererTest : public ::testing::Test {
79 protected: 94 protected:
80 virtual void SetUp() { 95 virtual void SetUp() {
81 context_provider_ = 96 output_surface_.reset(new TestOutputSurface(
82 new MockContextProvider(TestWebGraphicsContext3D::Create()); 97 base::MakeUnique<MockContextProvider::DeferredCreate>(
83 output_surface_.reset(new TestOutputSurface(context_provider_)); 98 &context_provider_)));
piman 2016/05/17 03:41:40 How about still creating the context provider here
danakj 2016/05/17 19:53:33 That is a pretty good idea. Done.
84 output_surface_->BindToClient(&output_surface_client_); 99 output_surface_->BindToClient(&output_surface_client_);
85 resource_provider_ = 100 resource_provider_ =
86 FakeResourceProvider::Create(output_surface_.get(), nullptr); 101 FakeResourceProvider::Create(output_surface_.get(), nullptr);
87 renderer_ = CreateRenderer<T>(&renderer_client_, 102 renderer_ = CreateRenderer<T>(&renderer_client_,
88 &tree_settings_, 103 &tree_settings_,
89 output_surface_.get(), 104 output_surface_.get(),
90 resource_provider_.get()); 105 resource_provider_.get());
91 } 106 }
92 107
93 FakeRendererClient renderer_client_; 108 FakeRendererClient renderer_client_;
94 RendererSettings tree_settings_; 109 RendererSettings tree_settings_;
95 FakeOutputSurfaceClient output_surface_client_; 110 FakeOutputSurfaceClient output_surface_client_;
96 scoped_refptr<MockContextProvider> context_provider_; 111 MockContextProvider* context_provider_;
97 std::unique_ptr<OutputSurface> output_surface_; 112 std::unique_ptr<OutputSurface> output_surface_;
98 std::unique_ptr<ResourceProvider> resource_provider_; 113 std::unique_ptr<ResourceProvider> resource_provider_;
99 std::unique_ptr<Renderer> renderer_; 114 std::unique_ptr<Renderer> renderer_;
100 }; 115 };
101 116
102 typedef ::testing::Types<DelegatingRenderer, GLRenderer> RendererTypes; 117 typedef ::testing::Types<DelegatingRenderer, GLRenderer> RendererTypes;
103 TYPED_TEST_CASE(RendererTest, RendererTypes); 118 TYPED_TEST_CASE(RendererTest, RendererTypes);
104 119
105 TYPED_TEST(RendererTest, ContextPurgedWhenRendererBecomesInvisible) { 120 TYPED_TEST(RendererTest, ContextPurgedWhenRendererBecomesInvisible) {
106 EXPECT_CALL(*(this->context_provider_.get()), DeleteCachedResources()) 121 EXPECT_CALL(*this->context_provider_, DeleteCachedResources()).Times(1);
107 .Times(1);
108 122
109 EXPECT_TRUE(this->renderer_->visible()); 123 EXPECT_TRUE(this->renderer_->visible());
110 this->renderer_->SetVisible(false); 124 this->renderer_->SetVisible(false);
111 EXPECT_FALSE(this->renderer_->visible()); 125 EXPECT_FALSE(this->renderer_->visible());
112 } 126 }
113 127
114 } // namespace 128 } // namespace
115 } // namespace cc 129 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698