| 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/quads/render_pass.h" | 5 #include "cc/quads/render_pass.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event_argument.h" | 7 #include "base/debug/trace_event_argument.h" |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
| 10 #include "cc/debug/traced_value.h" | 10 #include "cc/debug/traced_value.h" |
| 11 #include "cc/output/copy_output_request.h" | 11 #include "cc/output/copy_output_request.h" |
| 12 #include "cc/quads/checkerboard_draw_quad.h" | 12 #include "cc/quads/checkerboard_draw_quad.h" |
| 13 #include "cc/quads/debug_border_draw_quad.h" | 13 #include "cc/quads/debug_border_draw_quad.h" |
| 14 #include "cc/quads/draw_quad.h" | 14 #include "cc/quads/draw_quad.h" |
| 15 #include "cc/quads/io_surface_draw_quad.h" | 15 #include "cc/quads/io_surface_draw_quad.h" |
| 16 #include "cc/quads/picture_draw_quad.h" | 16 #include "cc/quads/picture_draw_quad.h" |
| 17 #include "cc/quads/render_pass_draw_quad.h" | 17 #include "cc/quads/render_pass_id.h" |
| 18 #include "cc/quads/shared_quad_state.h" | 18 #include "cc/quads/shared_quad_state.h" |
| 19 #include "cc/quads/solid_color_draw_quad.h" | 19 #include "cc/quads/solid_color_draw_quad.h" |
| 20 #include "cc/quads/stream_video_draw_quad.h" | |
| 21 #include "cc/quads/surface_draw_quad.h" | 20 #include "cc/quads/surface_draw_quad.h" |
| 22 #include "cc/quads/texture_draw_quad.h" | 21 #include "cc/quads/texture_draw_quad.h" |
| 23 #include "cc/quads/tile_draw_quad.h" | 22 #include "cc/quads/tile_draw_quad.h" |
| 24 #include "cc/quads/yuv_video_draw_quad.h" | 23 #include "cc/quads/yuv_video_draw_quad.h" |
| 25 | 24 |
| 26 namespace { | 25 namespace { |
| 27 const size_t kDefaultNumSharedQuadStatesToReserve = 32; | 26 const size_t kDefaultNumSharedQuadStatesToReserve = 32; |
| 28 const size_t kDefaultNumQuadsToReserve = 128; | 27 const size_t kDefaultNumQuadsToReserve = 128; |
| 29 } | 28 } |
| 30 | 29 |
| 31 namespace cc { | 30 namespace cc { |
| 32 | 31 |
| 33 scoped_ptr<RenderPass> RenderPass::Create() { | 32 scoped_ptr<RenderPass> RenderPass::Create() { |
| 34 return make_scoped_ptr(new RenderPass()); | 33 return make_scoped_ptr(new RenderPass()); |
| 35 } | 34 } |
| 36 | 35 |
| 37 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { | 36 scoped_ptr<RenderPass> RenderPass::Create(size_t num_layers) { |
| 38 return make_scoped_ptr(new RenderPass(num_layers)); | 37 return make_scoped_ptr(new RenderPass(num_layers)); |
| 39 } | 38 } |
| 40 | 39 |
| 41 RenderPass::RenderPass() | 40 RenderPass::RenderPass() |
| 42 : id(RenderPassId(-1, -1)), has_transparent_background(true) { | 41 : id(RenderPassId(-1, -1)), |
| 42 has_transparent_background(true), |
| 43 quad_list(kDefaultNumQuadsToReserve) { |
| 43 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); | 44 shared_quad_state_list.reserve(kDefaultNumSharedQuadStatesToReserve); |
| 44 quad_list.reserve(kDefaultNumQuadsToReserve); | |
| 45 } | 45 } |
| 46 | 46 |
| 47 RenderPass::RenderPass(size_t num_layers) | 47 RenderPass::RenderPass(size_t num_layers) |
| 48 : id(RenderPassId(-1, -1)), has_transparent_background(true) { | 48 : id(RenderPassId(-1, -1)), |
| 49 has_transparent_background(true), |
| 50 quad_list(kDefaultNumQuadsToReserve) { |
| 49 // Each layer usually produces one shared quad state, so the number of layers | 51 // Each layer usually produces one shared quad state, so the number of layers |
| 50 // is a good hint for what to reserve here. | 52 // is a good hint for what to reserve here. |
| 51 shared_quad_state_list.reserve(num_layers); | 53 shared_quad_state_list.reserve(num_layers); |
| 52 quad_list.reserve(kDefaultNumQuadsToReserve); | |
| 53 } | 54 } |
| 54 | 55 |
| 55 RenderPass::~RenderPass() { | 56 RenderPass::~RenderPass() { |
| 56 TRACE_EVENT_OBJECT_DELETED_WITH_ID( | 57 TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
| 57 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), | 58 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), |
| 58 "cc::RenderPass", id.AsTracingId()); | 59 "cc::RenderPass", id.AsTracingId()); |
| 59 } | 60 } |
| 60 | 61 |
| 61 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { | 62 scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { |
| 62 scoped_ptr<RenderPass> copy_pass(Create()); | 63 scoped_ptr<RenderPass> copy_pass(Create()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 82 copy_pass->SetAll(source->id, | 83 copy_pass->SetAll(source->id, |
| 83 source->output_rect, | 84 source->output_rect, |
| 84 source->damage_rect, | 85 source->damage_rect, |
| 85 source->transform_to_root_target, | 86 source->transform_to_root_target, |
| 86 source->has_transparent_background); | 87 source->has_transparent_background); |
| 87 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) { | 88 for (size_t i = 0; i < source->shared_quad_state_list.size(); ++i) { |
| 88 SharedQuadState* copy_shared_quad_state = | 89 SharedQuadState* copy_shared_quad_state = |
| 89 copy_pass->CreateAndAppendSharedQuadState(); | 90 copy_pass->CreateAndAppendSharedQuadState(); |
| 90 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); | 91 copy_shared_quad_state->CopyFrom(source->shared_quad_state_list[i]); |
| 91 } | 92 } |
| 92 for (size_t i = 0, sqs_i = 0; i < source->quad_list.size(); ++i) { | 93 size_t sqs_i = 0; |
| 93 while (source->quad_list[i]->shared_quad_state != | 94 for (QuadList::Iterator iter = source->quad_list.begin(); |
| 94 source->shared_quad_state_list[sqs_i]) { | 95 iter != source->quad_list.end(); |
| 96 ++iter) { |
| 97 while (iter->shared_quad_state != source->shared_quad_state_list[sqs_i]) { |
| 95 ++sqs_i; | 98 ++sqs_i; |
| 96 DCHECK_LT(sqs_i, source->shared_quad_state_list.size()); | 99 DCHECK_LT(sqs_i, source->shared_quad_state_list.size()); |
| 97 } | 100 } |
| 98 DCHECK(source->quad_list[i]->shared_quad_state == | 101 DCHECK(iter->shared_quad_state == source->shared_quad_state_list[sqs_i]); |
| 99 source->shared_quad_state_list[sqs_i]); | |
| 100 | 102 |
| 101 DrawQuad* quad = source->quad_list[i]; | 103 DrawQuad* quad = &*iter; |
| 102 | 104 |
| 103 if (quad->material == DrawQuad::RENDER_PASS) { | 105 if (quad->material == DrawQuad::RENDER_PASS) { |
| 104 const RenderPassDrawQuad* pass_quad = | 106 const RenderPassDrawQuad* pass_quad = |
| 105 RenderPassDrawQuad::MaterialCast(quad); | 107 RenderPassDrawQuad::MaterialCast(quad); |
| 106 copy_pass->CopyFromAndAppendRenderPassDrawQuad( | 108 copy_pass->CopyFromAndAppendRenderPassDrawQuad( |
| 107 pass_quad, | 109 pass_quad, |
| 108 copy_pass->shared_quad_state_list[sqs_i], | 110 copy_pass->shared_quad_state_list[sqs_i], |
| 109 pass_quad->render_pass_id); | 111 pass_quad->render_pass_id); |
| 110 } else { | 112 } else { |
| 111 copy_pass->CopyFromAndAppendDrawQuad( | 113 copy_pass->CopyFromAndAppendDrawQuad( |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 | 169 |
| 168 value->BeginArray("shared_quad_state_list"); | 170 value->BeginArray("shared_quad_state_list"); |
| 169 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) { | 171 for (size_t i = 0; i < shared_quad_state_list.size(); ++i) { |
| 170 value->BeginDictionary(); | 172 value->BeginDictionary(); |
| 171 shared_quad_state_list[i]->AsValueInto(value); | 173 shared_quad_state_list[i]->AsValueInto(value); |
| 172 value->EndDictionary(); | 174 value->EndDictionary(); |
| 173 } | 175 } |
| 174 value->EndArray(); | 176 value->EndArray(); |
| 175 | 177 |
| 176 value->BeginArray("quad_list"); | 178 value->BeginArray("quad_list"); |
| 177 for (size_t i = 0; i < quad_list.size(); ++i) { | 179 for (QuadList::ConstIterator iter = quad_list.begin(); |
| 180 iter != quad_list.end(); |
| 181 ++iter) { |
| 178 value->BeginDictionary(); | 182 value->BeginDictionary(); |
| 179 quad_list[i]->AsValueInto(value); | 183 iter->AsValueInto(value); |
| 180 value->EndDictionary(); | 184 value->EndDictionary(); |
| 181 } | 185 } |
| 182 value->EndArray(); | 186 value->EndArray(); |
| 183 | 187 |
| 184 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( | 188 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( |
| 185 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), | 189 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), |
| 186 value, | 190 value, |
| 187 "cc::RenderPass", | 191 "cc::RenderPass", |
| 188 id.AsTracingId()); | 192 id.AsTracingId()); |
| 189 } | 193 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 case DrawQuad::RENDER_PASS: | 246 case DrawQuad::RENDER_PASS: |
| 243 case DrawQuad::INVALID: | 247 case DrawQuad::INVALID: |
| 244 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; | 248 LOG(FATAL) << "Invalid DrawQuad material " << quad->material; |
| 245 break; | 249 break; |
| 246 } | 250 } |
| 247 quad_list.back()->shared_quad_state = shared_quad_state; | 251 quad_list.back()->shared_quad_state = shared_quad_state; |
| 248 return quad_list.back(); | 252 return quad_list.back(); |
| 249 } | 253 } |
| 250 | 254 |
| 251 } // namespace cc | 255 } // namespace cc |
| OLD | NEW |