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"
15 const int kSolidQuadTileSize = 256;
18 SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id)
19 : LayerImpl(tree_impl, id) {
22 SolidColorLayerImpl::~SolidColorLayerImpl() {}
24 scoped_ptr<LayerImpl> SolidColorLayerImpl::CreateLayerImpl(
25 LayerTreeImpl* tree_impl) {
26 return SolidColorLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
29 void SolidColorLayerImpl::AppendSolidQuads(
30 RenderPass* render_pass,
31 const OcclusionTracker<LayerImpl>& occlusion_tracker,
32 SharedQuadState* shared_quad_state,
33 const gfx::Rect& visible_content_rect,
34 const gfx::Transform& target_space_transform,
37 occlusion_tracker.GetCurrentOcclusionForLayer(target_space_transform);
39 // We create a series of smaller quads instead of just one large one so that
40 // the culler can reduce the total pixels drawn.
41 int right = visible_content_rect.right();
42 int bottom = visible_content_rect.bottom();
43 for (int x = visible_content_rect.x(); x < visible_content_rect.right();
44 x += kSolidQuadTileSize) {
45 for (int y = visible_content_rect.y(); y < visible_content_rect.bottom();
46 y += kSolidQuadTileSize) {
47 gfx::Rect quad_rect(x,
49 std::min(right - x, kSolidQuadTileSize),
50 std::min(bottom - y, kSolidQuadTileSize));
51 gfx::Rect visible_quad_rect =
52 occlusion.GetUnoccludedContentRect(quad_rect);
53 if (visible_quad_rect.IsEmpty())
56 SolidColorDrawQuad* quad =
57 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
59 shared_quad_state, quad_rect, visible_quad_rect, color, false);
64 void SolidColorLayerImpl::AppendQuads(
65 RenderPass* render_pass,
66 const OcclusionTracker<LayerImpl>& occlusion_tracker,
67 AppendQuadsData* append_quads_data) {
68 SharedQuadState* shared_quad_state =
69 render_pass->CreateAndAppendSharedQuadState();
70 PopulateSharedQuadState(shared_quad_state);
72 AppendDebugBorderQuad(
73 render_pass, content_bounds(), shared_quad_state, append_quads_data);
75 // TODO(hendrikw): We need to pass the visible content rect rather than
76 // |content_bounds()| here.
77 AppendSolidQuads(render_pass,
80 gfx::Rect(content_bounds()),
81 draw_properties().target_space_transform,
85 const char* SolidColorLayerImpl::LayerTypeAsString() const {
86 return "cc::SolidColorLayerImpl";