0d343c579e0991935a37009253943af20bd5978b
[platform/framework/web/crosswalk.git] / src / cc / layers / solid_color_layer_impl.cc
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.
4
5 #include "cc/layers/solid_color_layer_impl.h"
6
7 #include <algorithm>
8
9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/trees/occlusion_tracker.h"
11
12 namespace cc {
13
14 namespace {
15 const int kSolidQuadTileSize = 256;
16 }
17
18 SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id)
19     : LayerImpl(tree_impl, id) {
20 }
21
22 SolidColorLayerImpl::~SolidColorLayerImpl() {}
23
24 scoped_ptr<LayerImpl> SolidColorLayerImpl::CreateLayerImpl(
25     LayerTreeImpl* tree_impl) {
26   return SolidColorLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
27 }
28
29 void SolidColorLayerImpl::AppendSolidQuads(
30     RenderPass* render_pass,
31     const OcclusionTracker<LayerImpl>& occlusion_tracker,
32     SharedQuadState* shared_quad_state,
33     const gfx::Size& content_bounds,
34     const gfx::Transform& target_space_transform,
35     SkColor color) {
36   Occlusion occlusion =
37       occlusion_tracker.GetCurrentOcclusionForLayer(target_space_transform);
38
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 width = content_bounds.width();
42   int height = content_bounds.height();
43   for (int x = 0; x < width; x += kSolidQuadTileSize) {
44     for (int y = 0; y < height; y += kSolidQuadTileSize) {
45       gfx::Rect quad_rect(x,
46                           y,
47                           std::min(width - x, kSolidQuadTileSize),
48                           std::min(height - y, kSolidQuadTileSize));
49       gfx::Rect visible_quad_rect =
50           occlusion.GetUnoccludedContentRect(quad_rect);
51       if (visible_quad_rect.IsEmpty())
52         continue;
53
54       SolidColorDrawQuad* quad =
55           render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
56       quad->SetNew(
57           shared_quad_state, quad_rect, visible_quad_rect, color, false);
58     }
59   }
60 }
61
62 void SolidColorLayerImpl::AppendQuads(
63     RenderPass* render_pass,
64     const OcclusionTracker<LayerImpl>& occlusion_tracker,
65     AppendQuadsData* append_quads_data) {
66   SharedQuadState* shared_quad_state =
67       render_pass->CreateAndAppendSharedQuadState();
68   PopulateSharedQuadState(shared_quad_state);
69
70   AppendDebugBorderQuad(
71       render_pass, content_bounds(), shared_quad_state, append_quads_data);
72
73   AppendSolidQuads(render_pass,
74                    occlusion_tracker,
75                    shared_quad_state,
76                    content_bounds(),
77                    draw_properties().target_space_transform,
78                    background_color());
79 }
80
81 const char* SolidColorLayerImpl::LayerTypeAsString() const {
82   return "cc::SolidColorLayerImpl";
83 }
84
85 }  // namespace cc