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

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

Issue 1142343008: cc: Rework overlays to not use the ResourceProvider and pass texture size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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/base/scoped_ptr_vector.h" 5 #include "cc/base/scoped_ptr_vector.h"
6 #include "cc/output/compositor_frame_metadata.h" 6 #include "cc/output/compositor_frame_metadata.h"
7 #include "cc/output/gl_renderer.h" 7 #include "cc/output/gl_renderer.h"
8 #include "cc/output/output_surface.h" 8 #include "cc/output/output_surface.h"
9 #include "cc/output/output_surface_client.h" 9 #include "cc/output/output_surface_client.h"
10 #include "cc/output/overlay_candidate_validator.h" 10 #include "cc/output/overlay_candidate_validator.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), 0.01f); 70 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), 0.01f);
71 } 71 }
72 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), 72 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(),
73 candidate.uv_rect.ToString()); 73 candidate.uv_rect.ToString());
74 candidate.overlay_handled = true; 74 candidate.overlay_handled = true;
75 } 75 }
76 76
77 template <typename OverlayStrategyType> 77 template <typename OverlayStrategyType>
78 class SingleOverlayProcessor : public OverlayProcessor { 78 class SingleOverlayProcessor : public OverlayProcessor {
79 public: 79 public:
80 SingleOverlayProcessor(OutputSurface* surface, 80 SingleOverlayProcessor(OutputSurface* surface) : OverlayProcessor(surface) {
81 ResourceProvider* resource_provider)
82 : OverlayProcessor(surface, resource_provider) {
83 EXPECT_EQ(surface, surface_); 81 EXPECT_EQ(surface, surface_);
84 EXPECT_EQ(resource_provider, resource_provider_);
85 } 82 }
86 83
87 // Virtual to allow testing different strategies. 84 // Virtual to allow testing different strategies.
88 void Initialize() override { 85 void Initialize() override {
89 OverlayCandidateValidator* candidates = 86 OverlayCandidateValidator* candidates =
90 surface_->GetOverlayCandidateValidator(); 87 surface_->GetOverlayCandidateValidator();
91 ASSERT_TRUE(candidates != NULL); 88 ASSERT_TRUE(candidates != NULL);
92 strategies_.push_back(scoped_ptr<Strategy>( 89 strategies_.push_back(
93 new OverlayStrategyType(candidates, resource_provider_))); 90 scoped_ptr<Strategy>(new OverlayStrategyType(candidates)));
94 } 91 }
95 }; 92 };
96 93
97 class DefaultOverlayProcessor : public OverlayProcessor { 94 class DefaultOverlayProcessor : public OverlayProcessor {
98 public: 95 public:
99 DefaultOverlayProcessor(OutputSurface* surface, 96 DefaultOverlayProcessor(OutputSurface* surface);
100 ResourceProvider* resource_provider);
101 size_t GetStrategyCount(); 97 size_t GetStrategyCount();
102 }; 98 };
103 99
104 DefaultOverlayProcessor::DefaultOverlayProcessor( 100 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface)
105 OutputSurface* surface, 101 : OverlayProcessor(surface) {
106 ResourceProvider* resource_provider) 102 }
107 : OverlayProcessor(surface, resource_provider) {}
108 103
109 size_t DefaultOverlayProcessor::GetStrategyCount() { 104 size_t DefaultOverlayProcessor::GetStrategyCount() {
110 return strategies_.size(); 105 return strategies_.size();
111 } 106 }
112 107
113 class OverlayOutputSurface : public OutputSurface { 108 class OverlayOutputSurface : public OutputSurface {
114 public: 109 public:
115 explicit OverlayOutputSurface(scoped_refptr<ContextProvider> context_provider) 110 explicit OverlayOutputSurface(scoped_refptr<ContextProvider> context_provider)
116 : OutputSurface(context_provider) {} 111 : OutputSurface(context_provider) {}
117 112
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 144
150 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 145 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
151 shared_state->opacity = 1.f; 146 shared_state->opacity = 1.f;
152 return pass.Pass(); 147 return pass.Pass();
153 } 148 }
154 149
155 ResourceId CreateResource(ResourceProvider* resource_provider) { 150 ResourceId CreateResource(ResourceProvider* resource_provider) {
156 unsigned sync_point = 0; 151 unsigned sync_point = 0;
157 TextureMailbox mailbox = 152 TextureMailbox mailbox =
158 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 153 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
159 mailbox.set_allow_overlay(true);
160 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 154 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
161 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); 155 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
162 156
163 return resource_provider->CreateResourceFromTextureMailbox( 157 return resource_provider->CreateResourceFromTextureMailbox(
164 mailbox, release_callback.Pass()); 158 mailbox, release_callback.Pass());
165 } 159 }
166 160
167 SolidColorDrawQuad* CreateSolidColorQuadAt( 161 SolidColorDrawQuad* CreateSolidColorQuadAt(
168 const SharedQuadState* shared_quad_state, 162 const SharedQuadState* shared_quad_state,
169 SkColor color, 163 SkColor color,
170 RenderPass* render_pass, 164 RenderPass* render_pass,
171 const gfx::Rect& rect) { 165 const gfx::Rect& rect) {
172 SolidColorDrawQuad* quad = 166 SolidColorDrawQuad* quad =
173 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 167 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
174 quad->SetNew(shared_quad_state, rect, rect, color, false); 168 quad->SetNew(shared_quad_state, rect, rect, color, false);
175 return quad; 169 return quad;
176 } 170 }
177 171
178 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, 172 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider,
179 const SharedQuadState* shared_quad_state, 173 const SharedQuadState* shared_quad_state,
180 RenderPass* render_pass, 174 RenderPass* render_pass,
181 const gfx::Rect& rect) { 175 const gfx::Rect& rect) {
182 ResourceId resource_id = CreateResource(resource_provider); 176 ResourceId resource_id = CreateResource(resource_provider);
183 bool premultiplied_alpha = false; 177 bool premultiplied_alpha = false;
184 bool flipped = false; 178 bool flipped = false;
185 bool nearest_neighbor = false; 179 bool nearest_neighbor = false;
186 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 180 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
181 gfx::Size resource_size_in_pixels = gfx::Size(64, 64);
182 bool allow_overlay = true;
187 183
188 TextureDrawQuad* overlay_quad = 184 TextureDrawQuad* overlay_quad =
189 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 185 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
190 overlay_quad->SetNew(shared_quad_state, 186 overlay_quad->SetNew(shared_quad_state,
191 rect, 187 rect,
192 rect, 188 rect,
193 rect, 189 rect,
194 resource_id, 190 resource_id,
195 premultiplied_alpha, 191 premultiplied_alpha,
196 kUVTopLeft, 192 kUVTopLeft,
197 kUVBottomRight, 193 kUVBottomRight,
198 SK_ColorTRANSPARENT, 194 SK_ColorTRANSPARENT,
199 vertex_opacity, 195 vertex_opacity,
200 flipped, 196 flipped,
201 nearest_neighbor); 197 nearest_neighbor);
198 overlay_quad->allow_overlay = allow_overlay;
danakj 2015/06/01 17:31:29 can you add these to SetNew for this quad type too
achaulk 2015/06/01 21:27:22 It seems a bit of a waste to add them everywhere f
danakj 2015/06/01 21:36:43 Oh, I figured all the code paths are setting these
199 overlay_quad->resource_size_in_pixels = resource_size_in_pixels;
202 200
203 return overlay_quad; 201 return overlay_quad;
204 } 202 }
205 203
206 StreamVideoDrawQuad* CreateCandidateVideoQuadAt( 204 StreamVideoDrawQuad* CreateCandidateVideoQuadAt(
207 ResourceProvider* resource_provider, 205 ResourceProvider* resource_provider,
208 const SharedQuadState* shared_quad_state, 206 const SharedQuadState* shared_quad_state,
209 RenderPass* render_pass, 207 RenderPass* render_pass,
210 const gfx::Rect& rect, 208 const gfx::Rect& rect,
211 const gfx::Transform& transform) { 209 const gfx::Transform& transform) {
212 ResourceId resource_id = CreateResource(resource_provider); 210 ResourceId resource_id = CreateResource(resource_provider);
211 gfx::Size resource_size_in_pixels = gfx::Size(64, 64);
212 bool allow_overlay = true;
213 213
214 StreamVideoDrawQuad* overlay_quad = 214 StreamVideoDrawQuad* overlay_quad =
215 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); 215 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
216 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id, 216 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id,
217 transform); 217 transform);
218 overlay_quad->allow_overlay = allow_overlay;
219 overlay_quad->resource_size_in_pixels = resource_size_in_pixels;
218 220
219 return overlay_quad; 221 return overlay_quad;
220 } 222 }
221 223
222 TextureDrawQuad* CreateFullscreenCandidateQuad( 224 TextureDrawQuad* CreateFullscreenCandidateQuad(
223 ResourceProvider* resource_provider, 225 ResourceProvider* resource_provider,
224 const SharedQuadState* shared_quad_state, 226 const SharedQuadState* shared_quad_state,
225 RenderPass* render_pass) { 227 RenderPass* render_pass) {
226 return CreateCandidateQuadAt( 228 return CreateCandidateQuadAt(
227 resource_provider, shared_quad_state, render_pass, kOverlayRect); 229 resource_provider, shared_quad_state, render_pass, kOverlayRect);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 EXPECT_TRUE(output_surface.BindToClient(&client)); 300 EXPECT_TRUE(output_surface.BindToClient(&client));
299 output_surface.InitWithSingleOverlayValidator(); 301 output_surface.InitWithSingleOverlayValidator();
300 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); 302 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL);
301 303
302 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( 304 scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
303 new TestSharedBitmapManager()); 305 new TestSharedBitmapManager());
304 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( 306 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
305 &output_surface, shared_bitmap_manager.get(), NULL, NULL, 0, false, 1)); 307 &output_surface, shared_bitmap_manager.get(), NULL, NULL, 0, false, 1));
306 308
307 scoped_ptr<DefaultOverlayProcessor> overlay_processor( 309 scoped_ptr<DefaultOverlayProcessor> overlay_processor(
308 new DefaultOverlayProcessor(&output_surface, resource_provider.get())); 310 new DefaultOverlayProcessor(&output_surface));
309 overlay_processor->Initialize(); 311 overlay_processor->Initialize();
310 EXPECT_GE(2U, overlay_processor->GetStrategyCount()); 312 EXPECT_GE(2U, overlay_processor->GetStrategyCount());
311 } 313 }
312 314
313 template <typename OverlayStrategyType> 315 template <typename OverlayStrategyType>
314 class OverlayTest : public testing::Test { 316 class OverlayTest : public testing::Test {
315 protected: 317 protected:
316 void SetUp() override { 318 void SetUp() override {
317 provider_ = TestContextProvider::Create(); 319 provider_ = TestContextProvider::Create();
318 output_surface_.reset(new OverlayOutputSurface(provider_)); 320 output_surface_.reset(new OverlayOutputSurface(provider_));
319 EXPECT_TRUE(output_surface_->BindToClient(&client_)); 321 EXPECT_TRUE(output_surface_->BindToClient(&client_));
320 output_surface_->InitWithSingleOverlayValidator(); 322 output_surface_->InitWithSingleOverlayValidator();
321 EXPECT_TRUE(output_surface_->GetOverlayCandidateValidator() != NULL); 323 EXPECT_TRUE(output_surface_->GetOverlayCandidateValidator() != NULL);
322 324
323 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); 325 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
324 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 326 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
325 shared_bitmap_manager_.get(), 327 shared_bitmap_manager_.get(),
326 NULL, 328 NULL,
327 NULL, 329 NULL,
328 0, 330 0,
329 false, 331 false,
330 1); 332 1);
331 333
332 overlay_processor_.reset(new SingleOverlayProcessor<OverlayStrategyType>( 334 overlay_processor_.reset(
333 output_surface_.get(), resource_provider_.get())); 335 new SingleOverlayProcessor<OverlayStrategyType>(output_surface_.get()));
334 overlay_processor_->Initialize(); 336 overlay_processor_->Initialize();
335 } 337 }
336 338
337 scoped_refptr<TestContextProvider> provider_; 339 scoped_refptr<TestContextProvider> provider_;
338 scoped_ptr<OverlayOutputSurface> output_surface_; 340 scoped_ptr<OverlayOutputSurface> output_surface_;
339 FakeOutputSurfaceClient client_; 341 FakeOutputSurfaceClient client_;
340 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 342 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
341 scoped_ptr<ResourceProvider> resource_provider_; 343 scoped_ptr<ResourceProvider> resource_provider_;
342 scoped_ptr<SingleOverlayProcessor<OverlayStrategyType>> overlay_processor_; 344 scoped_ptr<SingleOverlayProcessor<OverlayStrategyType>> overlay_processor_;
343 }; 345 };
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 renderer_->BeginDrawingFrame(&frame3); 1187 renderer_->BeginDrawingFrame(&frame3);
1186 renderer_->FinishDrawingFrame(&frame3); 1188 renderer_->FinishDrawingFrame(&frame3);
1187 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 1189 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
1188 SwapBuffers(); 1190 SwapBuffers();
1189 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 1191 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
1190 Mock::VerifyAndClearExpectations(&scheduler_); 1192 Mock::VerifyAndClearExpectations(&scheduler_);
1191 } 1193 }
1192 1194
1193 } // namespace 1195 } // namespace
1194 } // namespace cc 1196 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698