OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 4263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4274 Proxy* proxy) | 4274 Proxy* proxy) |
4275 : GLRenderer(this, output_surface, resource_provider) {} | 4275 : GLRenderer(this, output_surface, resource_provider) {} |
4276 | 4276 |
4277 private: | 4277 private: |
4278 LayerTreeSettings settings_; | 4278 LayerTreeSettings settings_; |
4279 gfx::Size viewport_size_; | 4279 gfx::Size viewport_size_; |
4280 base::hash_set<RenderPass::Id> textures_; | 4280 base::hash_set<RenderPass::Id> textures_; |
4281 }; | 4281 }; |
4282 | 4282 |
4283 static void ConfigureRenderPassTestData(const char* test_script, | 4283 static void ConfigureRenderPassTestData(const char* test_script, |
4284 RenderPassRemovalTestData& test_data, | 4284 RenderPassRemovalTestData* test_data, |
4285 TestRenderer* renderer) { | 4285 TestRenderer* renderer) { |
4286 renderer->ClearCachedTextures(); | 4286 renderer->ClearCachedTextures(); |
4287 | 4287 |
4288 // One shared state for all quads - we don't need the correct details | 4288 // One shared state for all quads - we don't need the correct details |
4289 test_data.shared_quad_state = SharedQuadState::Create(); | 4289 test_data->shared_quad_state = SharedQuadState::Create(); |
4290 test_data.shared_quad_state->SetAll(gfx::Transform(), | 4290 test_data->shared_quad_state->SetAll(gfx::Transform(), |
4291 gfx::Size(), | 4291 gfx::Size(), |
4292 gfx::Rect(), | 4292 gfx::Rect(), |
4293 gfx::Rect(), | 4293 gfx::Rect(), |
4294 false, | 4294 false, |
4295 1.f); | 4295 1.f); |
4296 | 4296 |
4297 const char* current_char = test_script; | 4297 const char* current_char = test_script; |
4298 | 4298 |
4299 // Pre-create root pass | 4299 // Pre-create root pass |
4300 RenderPass::Id root_render_pass_id = | 4300 RenderPass::Id root_render_pass_id = |
4301 RenderPass::Id(test_script[0], test_script[1]); | 4301 RenderPass::Id(test_script[0], test_script[1]); |
4302 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); | 4302 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
4303 pass->SetNew(root_render_pass_id, gfx::Rect(), gfx::Rect(), gfx::Transform()); | 4303 pass->SetNew(root_render_pass_id, gfx::Rect(), gfx::Rect(), gfx::Transform()); |
4304 test_data.render_pass_cache.add(root_render_pass_id, pass.Pass()); | 4304 test_data->render_pass_cache.add(root_render_pass_id, pass.Pass()); |
4305 while (*current_char) { | 4305 while (*current_char) { |
4306 int layer_id = *current_char; | 4306 int layer_id = *current_char; |
4307 current_char++; | 4307 current_char++; |
4308 ASSERT_TRUE(current_char); | 4308 ASSERT_TRUE(current_char); |
4309 int index = *current_char; | 4309 int index = *current_char; |
4310 current_char++; | 4310 current_char++; |
4311 | 4311 |
4312 RenderPass::Id render_pass_id = RenderPass::Id(layer_id, index); | 4312 RenderPass::Id render_pass_id = RenderPass::Id(layer_id, index); |
4313 | 4313 |
4314 bool is_replica = false; | 4314 bool is_replica = false; |
4315 if (!test_data.render_pass_cache.contains(render_pass_id)) | 4315 if (!test_data->render_pass_cache.contains(render_pass_id)) |
4316 is_replica = true; | 4316 is_replica = true; |
4317 | 4317 |
4318 scoped_ptr<TestRenderPass> render_pass = | 4318 scoped_ptr<TestRenderPass> render_pass = |
4319 test_data.render_pass_cache.take(render_pass_id); | 4319 test_data->render_pass_cache.take(render_pass_id); |
4320 | 4320 |
4321 // Cycle through quad data and create all quads. | 4321 // Cycle through quad data and create all quads. |
4322 while (*current_char && *current_char != '\n') { | 4322 while (*current_char && *current_char != '\n') { |
4323 if (*current_char == 's') { | 4323 if (*current_char == 's') { |
4324 // Solid color draw quad. | 4324 // Solid color draw quad. |
4325 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); | 4325 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
4326 quad->SetNew(test_data.shared_quad_state.get(), | 4326 quad->SetNew(test_data->shared_quad_state.get(), |
4327 gfx::Rect(0, 0, 10, 10), | 4327 gfx::Rect(0, 0, 10, 10), |
4328 SK_ColorWHITE); | 4328 SK_ColorWHITE); |
4329 | 4329 |
4330 render_pass->AppendQuad(quad.PassAs<DrawQuad>()); | 4330 render_pass->AppendQuad(quad.PassAs<DrawQuad>()); |
4331 current_char++; | 4331 current_char++; |
4332 } else if ((*current_char >= 'A') && (*current_char <= 'Z')) { | 4332 } else if ((*current_char >= 'A') && (*current_char <= 'Z')) { |
4333 // RenderPass draw quad. | 4333 // RenderPass draw quad. |
4334 int layer_id = *current_char; | 4334 int layer_id = *current_char; |
4335 current_char++; | 4335 current_char++; |
4336 ASSERT_TRUE(current_char); | 4336 ASSERT_TRUE(current_char); |
(...skipping 14 matching lines...) Expand all Loading... |
4351 case 't': | 4351 case 't': |
4352 has_texture = true; | 4352 has_texture = true; |
4353 break; | 4353 break; |
4354 } | 4354 } |
4355 current_char++; | 4355 current_char++; |
4356 } | 4356 } |
4357 if (*current_char == ']') | 4357 if (*current_char == ']') |
4358 current_char++; | 4358 current_char++; |
4359 } | 4359 } |
4360 | 4360 |
4361 if (test_data.render_pass_cache.find(new_render_pass_id) == | 4361 if (test_data->render_pass_cache.find(new_render_pass_id) == |
4362 test_data.render_pass_cache.end()) { | 4362 test_data->render_pass_cache.end()) { |
4363 if (has_texture) | 4363 if (has_texture) |
4364 renderer->SetHaveCachedResourcesForRenderPassId(new_render_pass_id); | 4364 renderer->SetHaveCachedResourcesForRenderPassId(new_render_pass_id); |
4365 | 4365 |
4366 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); | 4366 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
4367 pass->SetNew(new_render_pass_id, | 4367 pass->SetNew(new_render_pass_id, |
4368 gfx::Rect(), | 4368 gfx::Rect(), |
4369 gfx::Rect(), | 4369 gfx::Rect(), |
4370 gfx::Transform()); | 4370 gfx::Transform()); |
4371 test_data.render_pass_cache.add(new_render_pass_id, pass.Pass()); | 4371 test_data->render_pass_cache.add(new_render_pass_id, pass.Pass()); |
4372 } | 4372 } |
4373 | 4373 |
4374 gfx::Rect quad_rect = gfx::Rect(0, 0, 1, 1); | 4374 gfx::Rect quad_rect = gfx::Rect(0, 0, 1, 1); |
4375 gfx::Rect contents_changed_rect = | 4375 gfx::Rect contents_changed_rect = |
4376 contents_changed ? quad_rect : gfx::Rect(); | 4376 contents_changed ? quad_rect : gfx::Rect(); |
4377 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create(); | 4377 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create(); |
4378 quad->SetNew(test_data.shared_quad_state.get(), | 4378 quad->SetNew(test_data->shared_quad_state.get(), |
4379 quad_rect, | 4379 quad_rect, |
4380 new_render_pass_id, | 4380 new_render_pass_id, |
4381 is_replica, | 4381 is_replica, |
4382 1, | 4382 1, |
4383 contents_changed_rect, | 4383 contents_changed_rect, |
4384 gfx::RectF(0.f, 0.f, 1.f, 1.f), | 4384 gfx::RectF(0.f, 0.f, 1.f, 1.f), |
4385 WebKit::WebFilterOperations(), | 4385 WebKit::WebFilterOperations(), |
4386 skia::RefPtr<SkImageFilter>(), | 4386 skia::RefPtr<SkImageFilter>(), |
4387 WebKit::WebFilterOperations()); | 4387 WebKit::WebFilterOperations()); |
4388 render_pass->AppendQuad(quad.PassAs<DrawQuad>()); | 4388 render_pass->AppendQuad(quad.PassAs<DrawQuad>()); |
4389 } | 4389 } |
4390 } | 4390 } |
4391 test_data.render_passes_by_id[render_pass_id] = render_pass.get(); | 4391 test_data->render_passes_by_id[render_pass_id] = render_pass.get(); |
4392 test_data.render_passes.insert(test_data.render_passes.begin(), | 4392 test_data->render_passes.insert(test_data->render_passes.begin(), |
4393 render_pass.PassAs<RenderPass>()); | 4393 render_pass.PassAs<RenderPass>()); |
4394 if (*current_char) | 4394 if (*current_char) |
4395 current_char++; | 4395 current_char++; |
4396 } | 4396 } |
4397 } | 4397 } |
4398 | 4398 |
4399 void DumpRenderPassTestData(const RenderPassRemovalTestData& test_data, | 4399 void DumpRenderPassTestData(const RenderPassRemovalTestData& test_data, |
4400 char* buffer) { | 4400 char* buffer) { |
4401 char* pos = buffer; | 4401 char* pos = buffer; |
4402 for (RenderPassList::const_reverse_iterator it = | 4402 for (RenderPassList::const_reverse_iterator it = |
4403 test_data.render_passes.rbegin(); | 4403 test_data.render_passes.rbegin(); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4599 scoped_ptr<TestRenderer> renderer = | 4599 scoped_ptr<TestRenderer> renderer = |
4600 TestRenderer::Create(resource_provider.get(), | 4600 TestRenderer::Create(resource_provider.get(), |
4601 output_surface.get(), | 4601 output_surface.get(), |
4602 &proxy_); | 4602 &proxy_); |
4603 | 4603 |
4604 int test_case_index = 0; | 4604 int test_case_index = 0; |
4605 while (remove_render_passes_cases[test_case_index].name) { | 4605 while (remove_render_passes_cases[test_case_index].name) { |
4606 RenderPassRemovalTestData test_data; | 4606 RenderPassRemovalTestData test_data; |
4607 ConfigureRenderPassTestData( | 4607 ConfigureRenderPassTestData( |
4608 remove_render_passes_cases[test_case_index].init_script, | 4608 remove_render_passes_cases[test_case_index].init_script, |
4609 test_data, | 4609 &test_data, |
4610 renderer.get()); | 4610 renderer.get()); |
4611 LayerTreeHostImpl::RemoveRenderPasses( | 4611 LayerTreeHostImpl::RemoveRenderPasses( |
4612 LayerTreeHostImpl::CullRenderPassesWithCachedTextures(renderer.get()), | 4612 LayerTreeHostImpl::CullRenderPassesWithCachedTextures(renderer.get()), |
4613 &test_data); | 4613 &test_data); |
4614 VerifyRenderPassTestData(remove_render_passes_cases[test_case_index], | 4614 VerifyRenderPassTestData(remove_render_passes_cases[test_case_index], |
4615 test_data); | 4615 test_data); |
4616 test_case_index++; | 4616 test_case_index++; |
4617 } | 4617 } |
4618 } | 4618 } |
4619 | 4619 |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4954 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4954 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4955 render_pass_quad->mask_uv_rect.ToString()); | 4955 render_pass_quad->mask_uv_rect.ToString()); |
4956 | 4956 |
4957 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 4957 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
4958 host_impl_->DidDrawAllLayers(frame); | 4958 host_impl_->DidDrawAllLayers(frame); |
4959 } | 4959 } |
4960 } | 4960 } |
4961 | 4961 |
4962 } // namespace | 4962 } // namespace |
4963 } // namespace cc | 4963 } // namespace cc |
OLD | NEW |