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