1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/layers/solid_color_layer_impl.h"
9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/trees/occlusion_tracker.h"
14 SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl
* tree_impl
, int id
)
15 : LayerImpl(tree_impl
, id
),
18 SolidColorLayerImpl::~SolidColorLayerImpl() {}
20 scoped_ptr
<LayerImpl
> SolidColorLayerImpl::CreateLayerImpl(
21 LayerTreeImpl
* tree_impl
) {
22 return SolidColorLayerImpl::Create(tree_impl
, id()).PassAs
<LayerImpl
>();
25 void SolidColorLayerImpl::AppendQuads(
26 RenderPass
* render_pass
,
27 const OcclusionTracker
<LayerImpl
>& occlusion_tracker
,
28 AppendQuadsData
* append_quads_data
) {
29 SharedQuadState
* shared_quad_state
=
30 render_pass
->CreateAndAppendSharedQuadState();
31 PopulateSharedQuadState(shared_quad_state
);
33 AppendDebugBorderQuad(
34 render_pass
, content_bounds(), shared_quad_state
, append_quads_data
);
36 // We create a series of smaller quads instead of just one large one so that
37 // the culler can reduce the total pixels drawn.
38 int width
= content_bounds().width();
39 int height
= content_bounds().height();
40 for (int x
= 0; x
< width
; x
+= tile_size_
) {
41 for (int y
= 0; y
< height
; y
+= tile_size_
) {
42 gfx::Rect
quad_rect(x
,
44 std::min(width
- x
, tile_size_
),
45 std::min(height
- y
, tile_size_
));
46 gfx::Rect visible_quad_rect
= occlusion_tracker
.UnoccludedContentRect(
47 quad_rect
, draw_properties().target_space_transform
);
48 if (visible_quad_rect
.IsEmpty())
51 SolidColorDrawQuad
* quad
=
52 render_pass
->CreateAndAppendDrawQuad
<SolidColorDrawQuad
>();
53 quad
->SetNew(shared_quad_state
,
62 const char* SolidColorLayerImpl::LayerTypeAsString() const {
63 return "cc::SolidColorLayerImpl";