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

Side by Side Diff: cc/trees/layer_tree_host_unittest_delegated.cc

Issue 23451023: cc: Tell the LayerTreeHost that the filter context is needed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: delegated-filters: add header Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « cc/test/render_pass_test_utils.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
11 #include "base/threading/thread.h" 11 #include "base/threading/thread.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "cc/layers/delegated_renderer_layer.h" 13 #include "cc/layers/delegated_renderer_layer.h"
14 #include "cc/layers/delegated_renderer_layer_client.h" 14 #include "cc/layers/delegated_renderer_layer_client.h"
15 #include "cc/layers/delegated_renderer_layer_impl.h" 15 #include "cc/layers/delegated_renderer_layer_impl.h"
16 #include "cc/output/compositor_frame.h" 16 #include "cc/output/compositor_frame.h"
17 #include "cc/output/compositor_frame_ack.h" 17 #include "cc/output/compositor_frame_ack.h"
18 #include "cc/output/delegated_frame_data.h" 18 #include "cc/output/delegated_frame_data.h"
19 #include "cc/quads/render_pass_draw_quad.h"
19 #include "cc/quads/shared_quad_state.h" 20 #include "cc/quads/shared_quad_state.h"
20 #include "cc/quads/texture_draw_quad.h" 21 #include "cc/quads/texture_draw_quad.h"
21 #include "cc/resources/returned_resource.h" 22 #include "cc/resources/returned_resource.h"
22 #include "cc/test/fake_delegated_renderer_layer.h" 23 #include "cc/test/fake_delegated_renderer_layer.h"
23 #include "cc/test/fake_delegated_renderer_layer_impl.h" 24 #include "cc/test/fake_delegated_renderer_layer_impl.h"
24 #include "cc/test/fake_output_surface.h" 25 #include "cc/test/fake_output_surface.h"
25 #include "cc/test/layer_tree_test.h" 26 #include "cc/test/layer_tree_test.h"
26 #include "cc/trees/layer_tree_impl.h" 27 #include "cc/trees/layer_tree_impl.h"
27 #include "gpu/GLES2/gl2extchromium.h" 28 #include "gpu/GLES2/gl2extchromium.h"
28 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 29 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 false, 148 false,
148 gfx::PointF(0.f, 0.f), 149 gfx::PointF(0.f, 0.f),
149 gfx::PointF(1.f, 1.f), 150 gfx::PointF(1.f, 1.f),
150 SK_ColorTRANSPARENT, 151 SK_ColorTRANSPARENT,
151 vertex_opacity, 152 vertex_opacity,
152 false); 153 false);
153 frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass()); 154 frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass());
154 frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>()); 155 frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>());
155 } 156 }
156 157
158 void AddRenderPass(DelegatedFrameData* frame,
159 RenderPass::Id id,
160 gfx::Rect output_rect,
161 gfx::Rect damage_rect,
162 const FilterOperations& filters,
163 const FilterOperations& background_filters) {
164 for (size_t i = 0; i < frame->render_pass_list.size(); ++i)
165 DCHECK(id != frame->render_pass_list[i]->id);
166
167 scoped_ptr<RenderPass> pass(RenderPass::Create());
168 pass->SetNew(id,
169 output_rect,
170 damage_rect,
171 gfx::Transform());
172 frame->render_pass_list.push_back(pass.Pass());
173
174 scoped_ptr<SharedQuadState> sqs = SharedQuadState::Create();
175 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
176
177 quad->SetNew(sqs.get(),
178 output_rect,
179 id,
180 false, // is_replica
181 0, // mask_resource_id
182 damage_rect,
183 gfx::Rect(0, 0, 1, 1), // mask_uv_rect
184 filters,
185 skia::RefPtr<SkImageFilter>(),
186 background_filters);
187 frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass());
188 frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>());
189 }
190
157 scoped_ptr<DelegatedFrameData> CreateEmptyFrameData() { 191 scoped_ptr<DelegatedFrameData> CreateEmptyFrameData() {
158 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); 192 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
159 return frame.Pass(); 193 return frame.Pass();
160 } 194 }
161 195
162 196
163 static ResourceProvider::ResourceId AppendResourceId( 197 static ResourceProvider::ResourceId AppendResourceId(
164 std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame, 198 std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame,
165 ResourceProvider::ResourceId resource_id) { 199 ResourceProvider::ResourceId resource_id) {
166 resources_in_last_sent_frame->push_back(resource_id); 200 resources_in_last_sent_frame->push_back(resource_id);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 365
332 virtual void AfterTest() OVERRIDE {} 366 virtual void AfterTest() OVERRIDE {}
333 367
334 protected: 368 protected:
335 int num_activates_; 369 int num_activates_;
336 bool did_reset_child_id_; 370 bool did_reset_child_id_;
337 }; 371 };
338 372
339 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId); 373 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId);
340 374
375 class LayerTreeHostDelegatedTestOffscreenContext_NoFilters
376 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
377 protected:
378 virtual void BeginTest() OVERRIDE {
379 scoped_ptr<DelegatedFrameData> frame =
380 CreateFrameData(gfx::Rect(0, 0, 1, 1),
381 gfx::Rect(0, 0, 1, 1));
382 delegated_->SetFrameData(frame.Pass());
383
384 PostSetNeedsCommitToMainThread();
385 }
386
387 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
388 EXPECT_FALSE(host_impl->offscreen_context_provider());
389 EndTest();
390 }
391
392 virtual void AfterTest() OVERRIDE {}
393 };
394
395 SINGLE_AND_MULTI_THREAD_TEST_F(
396 LayerTreeHostDelegatedTestOffscreenContext_NoFilters);
397
398 class LayerTreeHostDelegatedTestOffscreenContext_Filters
399 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
400 protected:
401 virtual void BeginTest() OVERRIDE {
402 scoped_ptr<DelegatedFrameData> frame =
403 CreateFrameData(gfx::Rect(0, 0, 1, 1),
404 gfx::Rect(0, 0, 1, 1));
405
406 FilterOperations filters;
407 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
408 AddRenderPass(frame.get(),
409 RenderPass::Id(2, 1),
410 gfx::Rect(0, 0, 1, 1),
411 gfx::Rect(0, 0, 1, 1),
412 filters,
413 FilterOperations());
414 delegated_->SetFrameData(frame.Pass());
415
416 PostSetNeedsCommitToMainThread();
417 }
418
419 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
420 bool expect_context = !delegating_renderer();
421 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
422 EndTest();
423 }
424
425 virtual void AfterTest() OVERRIDE {}
426 };
427
428 SINGLE_AND_MULTI_THREAD_TEST_F(
429 LayerTreeHostDelegatedTestOffscreenContext_Filters);
430
431 class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters
432 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
433 protected:
434 virtual void BeginTest() OVERRIDE {
435 scoped_ptr<DelegatedFrameData> frame =
436 CreateFrameData(gfx::Rect(0, 0, 1, 1),
437 gfx::Rect(0, 0, 1, 1));
438
439 FilterOperations filters;
440 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
441 AddRenderPass(frame.get(),
442 RenderPass::Id(2, 1),
443 gfx::Rect(0, 0, 1, 1),
444 gfx::Rect(0, 0, 1, 1),
445 FilterOperations(),
446 filters);
447 delegated_->SetFrameData(frame.Pass());
448
449 PostSetNeedsCommitToMainThread();
450 }
451
452 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
453 bool expect_context = !delegating_renderer();
454 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
455 EndTest();
456 }
457
458 virtual void AfterTest() OVERRIDE {}
459 };
460
461 SINGLE_AND_MULTI_THREAD_TEST_F(
462 LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters);
463
464 class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree
465 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
466 protected:
467 virtual void BeginTest() OVERRIDE {
468 scoped_ptr<DelegatedFrameData> frame =
469 CreateFrameData(gfx::Rect(0, 0, 1, 1),
470 gfx::Rect(0, 0, 1, 1));
471
472 FilterOperations filters;
473 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
474 AddRenderPass(frame.get(),
475 RenderPass::Id(2, 1),
476 gfx::Rect(0, 0, 1, 1),
477 gfx::Rect(0, 0, 1, 1),
478 filters,
479 FilterOperations());
480
481 delegated_->RemoveFromParent();
482 delegated_->SetFrameData(frame.Pass());
483 layer_tree_host()->root_layer()->AddChild(delegated_);
484
485 PostSetNeedsCommitToMainThread();
486 }
487
488 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
489 bool expect_context = !delegating_renderer();
490 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
491 EndTest();
492 }
493
494 virtual void AfterTest() OVERRIDE {}
495 };
496
497 SINGLE_AND_MULTI_THREAD_TEST_F(
498 LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree);
499
341 class LayerTreeHostDelegatedTestLayerUsesFrameDamage 500 class LayerTreeHostDelegatedTestLayerUsesFrameDamage
342 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 501 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
343 public: 502 public:
344 LayerTreeHostDelegatedTestLayerUsesFrameDamage() 503 LayerTreeHostDelegatedTestLayerUsesFrameDamage()
345 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), 504 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
346 first_draw_for_source_frame_(true) {} 505 first_draw_for_source_frame_(true) {}
347 506
348 virtual void DidCommit() OVERRIDE { 507 virtual void DidCommit() OVERRIDE {
349 int next_source_frame_number = layer_tree_host()->source_frame_number(); 508 int next_source_frame_number = layer_tree_host()->source_frame_number();
350 switch (next_source_frame_number) { 509 switch (next_source_frame_number) {
(...skipping 1331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1682 base::WaitableEvent wait_event_; 1841 base::WaitableEvent wait_event_;
1683 base::Lock activate_lock_; 1842 base::Lock activate_lock_;
1684 int activate_count_; 1843 int activate_count_;
1685 }; 1844 };
1686 1845
1687 SINGLE_AND_MULTI_THREAD_TEST_F( 1846 SINGLE_AND_MULTI_THREAD_TEST_F(
1688 DelegatedFrameIsActivatedDuringCommit); 1847 DelegatedFrameIsActivatedDuringCommit);
1689 1848
1690 } // namespace 1849 } // namespace
1691 } // namespace cc 1850 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/render_pass_test_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698