solid_color_layer_impl.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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/layers/quad_sink.h"
10#include "cc/quads/solid_color_draw_quad.h"
11
12namespace cc {
13
14SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id)
15    : LayerImpl(tree_impl, id),
16      tile_size_(256) {}
17
18SolidColorLayerImpl::~SolidColorLayerImpl() {}
19
20scoped_ptr<LayerImpl> SolidColorLayerImpl::CreateLayerImpl(
21    LayerTreeImpl* tree_impl) {
22  return SolidColorLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
23}
24
25void SolidColorLayerImpl::AppendQuads(QuadSink* quad_sink,
26                                      AppendQuadsData* append_quads_data) {
27  SharedQuadState* shared_quad_state =
28      quad_sink->UseSharedQuadState(CreateSharedQuadState());
29  AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
30
31  // We create a series of smaller quads instead of just one large one so that
32  // the culler can reduce the total pixels drawn.
33  int width = content_bounds().width();
34  int height = content_bounds().height();
35  for (int x = 0; x < width; x += tile_size_) {
36    for (int y = 0; y < height; y += tile_size_) {
37      gfx::Rect quad_rect(x,
38                          y,
39                          std::min(width - x, tile_size_),
40                          std::min(height - y, tile_size_));
41      gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect(
42          quad_rect, draw_properties().target_space_transform);
43      if (visible_quad_rect.IsEmpty())
44        continue;
45
46      scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
47      quad->SetNew(shared_quad_state,
48                   quad_rect,
49                   visible_quad_rect,
50                   background_color(),
51                   false);
52      quad_sink->Append(quad.PassAs<DrawQuad>());
53    }
54  }
55}
56
57const char* SolidColorLayerImpl::LayerTypeAsString() const {
58  return "cc::SolidColorLayerImpl";
59}
60
61}  // namespace cc
62