Index: cc/layers/tiled_layer_impl.cc |
diff --git a/cc/layers/tiled_layer_impl.cc b/cc/layers/tiled_layer_impl.cc |
deleted file mode 100644 |
index 04aad2da84b5bfada16462b9486b0445fb1f52d9..0000000000000000000000000000000000000000 |
--- a/cc/layers/tiled_layer_impl.cc |
+++ /dev/null |
@@ -1,322 +0,0 @@ |
-// Copyright 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "cc/layers/tiled_layer_impl.h" |
- |
-#include "base/basictypes.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/trace_event/trace_event_argument.h" |
-#include "cc/base/math_util.h" |
-#include "cc/base/simple_enclosed_region.h" |
-#include "cc/debug/debug_colors.h" |
-#include "cc/layers/append_quads_data.h" |
-#include "cc/quads/checkerboard_draw_quad.h" |
-#include "cc/quads/debug_border_draw_quad.h" |
-#include "cc/quads/solid_color_draw_quad.h" |
-#include "cc/quads/tile_draw_quad.h" |
-#include "cc/resources/layer_tiling_data.h" |
-#include "cc/trees/occlusion.h" |
-#include "third_party/skia/include/core/SkColor.h" |
-#include "ui/gfx/geometry/quad_f.h" |
- |
-namespace cc { |
- |
-class DrawableTile : public LayerTilingData::Tile { |
- public: |
- static scoped_ptr<DrawableTile> Create() { |
- return make_scoped_ptr(new DrawableTile()); |
- } |
- |
- ResourceProvider::ResourceId resource_id() const { return resource_id_; } |
- void set_resource_id(ResourceProvider::ResourceId resource_id) { |
- resource_id_ = resource_id; |
- } |
- bool contents_swizzled() { return contents_swizzled_; } |
- void set_contents_swizzled(bool contents_swizzled) { |
- contents_swizzled_ = contents_swizzled; |
- } |
- |
- private: |
- DrawableTile() : resource_id_(0), contents_swizzled_(false) {} |
- |
- ResourceProvider::ResourceId resource_id_; |
- bool contents_swizzled_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DrawableTile); |
-}; |
- |
-TiledLayerImpl::TiledLayerImpl(LayerTreeImpl* tree_impl, int id) |
- : TiledLayerImpl(tree_impl, id, new LayerImpl::SyncedScrollOffset) { |
-} |
- |
-TiledLayerImpl::TiledLayerImpl( |
- LayerTreeImpl* tree_impl, |
- int id, |
- scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset) |
- : LayerImpl(tree_impl, id, synced_scroll_offset), skips_draw_(true) { |
-} |
- |
-TiledLayerImpl::~TiledLayerImpl() { |
-} |
- |
-void TiledLayerImpl::GetContentsResourceId( |
- ResourceProvider::ResourceId* resource_id, |
- gfx::Size* resource_size) const { |
- // This function is only valid for single texture layers, e.g. masks. |
- DCHECK(tiler_); |
- // It's possible the mask layer is created but has no size or otherwise |
- // can't draw. |
- if (tiler_->num_tiles_x() == 0 || tiler_->num_tiles_y() == 0) { |
- *resource_id = 0; |
- return; |
- } |
- |
- // Any other number of tiles other than 0 or 1 is incorrect for masks. |
- DCHECK_EQ(tiler_->num_tiles_x(), 1); |
- DCHECK_EQ(tiler_->num_tiles_y(), 1); |
- |
- DrawableTile* tile = TileAt(0, 0); |
- *resource_id = tile ? tile->resource_id() : 0; |
- *resource_size = tiler_->tile_size(); |
-} |
- |
-bool TiledLayerImpl::HasTileAt(int i, int j) const { |
- return !!tiler_->TileAt(i, j); |
-} |
- |
-bool TiledLayerImpl::HasResourceIdForTileAt(int i, int j) const { |
- return HasTileAt(i, j) && TileAt(i, j)->resource_id(); |
-} |
- |
-DrawableTile* TiledLayerImpl::TileAt(int i, int j) const { |
- return static_cast<DrawableTile*>(tiler_->TileAt(i, j)); |
-} |
- |
-DrawableTile* TiledLayerImpl::CreateTile(int i, int j) { |
- scoped_ptr<DrawableTile> tile(DrawableTile::Create()); |
- DrawableTile* added_tile = tile.get(); |
- tiler_->AddTile(tile.Pass(), i, j); |
- |
- return added_tile; |
-} |
- |
-void TiledLayerImpl::GetDebugBorderProperties(SkColor* color, |
- float* width) const { |
- *color = DebugColors::TiledContentLayerBorderColor(); |
- *width = DebugColors::TiledContentLayerBorderWidth(layer_tree_impl()); |
-} |
- |
-scoped_ptr<LayerImpl> TiledLayerImpl::CreateLayerImpl( |
- LayerTreeImpl* tree_impl) { |
- return TiledLayerImpl::Create(tree_impl, id(), synced_scroll_offset()); |
-} |
- |
-void TiledLayerImpl::AsValueInto(base::trace_event::TracedValue* state) const { |
- LayerImpl::AsValueInto(state); |
- MathUtil::AddToTracedValue("invalidation", update_rect(), state); |
-} |
- |
-size_t TiledLayerImpl::GPUMemoryUsageInBytes() const { |
- size_t amount = 0; |
- const size_t kMemoryUsagePerTileInBytes = |
- 4 * tiler_->tile_size().width() * tiler_->tile_size().height(); |
- for (LayerTilingData::TileMap::const_iterator iter = tiler_->tiles().begin(); |
- iter != tiler_->tiles().end(); |
- ++iter) { |
- const DrawableTile* tile = static_cast<DrawableTile*>(iter->second); |
- DCHECK(tile); |
- if (!tile->resource_id()) |
- continue; |
- amount += kMemoryUsagePerTileInBytes; |
- } |
- return amount; |
-} |
- |
-void TiledLayerImpl::PushPropertiesTo(LayerImpl* layer) { |
- LayerImpl::PushPropertiesTo(layer); |
- |
- TiledLayerImpl* tiled_layer = static_cast<TiledLayerImpl*>(layer); |
- |
- tiled_layer->set_skips_draw(skips_draw_); |
- tiled_layer->SetTilingData(*tiler_); |
- |
- for (LayerTilingData::TileMap::const_iterator iter = tiler_->tiles().begin(); |
- iter != tiler_->tiles().end(); |
- ++iter) { |
- int i = iter->first.first; |
- int j = iter->first.second; |
- DrawableTile* tile = static_cast<DrawableTile*>(iter->second); |
- DCHECK(tile); |
- tiled_layer->PushTileProperties(i, |
- j, |
- tile->resource_id(), |
- tile->contents_swizzled()); |
- } |
-} |
- |
-bool TiledLayerImpl::WillDraw(DrawMode draw_mode, |
- ResourceProvider* resource_provider) { |
- if (!tiler_ || tiler_->has_empty_bounds() || |
- visible_content_rect().IsEmpty() || |
- draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) |
- return false; |
- return LayerImpl::WillDraw(draw_mode, resource_provider); |
-} |
- |
-void TiledLayerImpl::AppendQuads(RenderPass* render_pass, |
- AppendQuadsData* append_quads_data) { |
- DCHECK(tiler_); |
- DCHECK(!tiler_->has_empty_bounds()); |
- DCHECK(!visible_content_rect().IsEmpty()); |
- |
- gfx::Rect content_rect = visible_content_rect(); |
- SharedQuadState* shared_quad_state = |
- render_pass->CreateAndAppendSharedQuadState(); |
- PopulateSharedQuadState(shared_quad_state); |
- |
- AppendDebugBorderQuad( |
- render_pass, content_bounds(), shared_quad_state, append_quads_data); |
- |
- int left, top, right, bottom; |
- tiler_->ContentRectToTileIndices(content_rect, &left, &top, &right, &bottom); |
- |
- if (ShowDebugBorders()) { |
- for (int j = top; j <= bottom; ++j) { |
- for (int i = left; i <= right; ++i) { |
- DrawableTile* tile = TileAt(i, j); |
- gfx::Rect tile_rect = tiler_->tile_bounds(i, j); |
- gfx::Rect visible_tile_rect = tile_rect; |
- SkColor border_color; |
- float border_width; |
- |
- if (skips_draw_ || !tile || !tile->resource_id()) { |
- border_color = DebugColors::MissingTileBorderColor(); |
- border_width = DebugColors::MissingTileBorderWidth(layer_tree_impl()); |
- } else { |
- border_color = DebugColors::HighResTileBorderColor(); |
- border_width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); |
- } |
- DebugBorderDrawQuad* debug_border_quad = |
- render_pass->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); |
- debug_border_quad->SetNew(shared_quad_state, |
- tile_rect, |
- visible_tile_rect, |
- border_color, |
- border_width); |
- } |
- } |
- } |
- |
- if (skips_draw_) |
- return; |
- |
- for (int j = top; j <= bottom; ++j) { |
- for (int i = left; i <= right; ++i) { |
- DrawableTile* tile = TileAt(i, j); |
- gfx::Rect tile_rect = tiler_->tile_bounds(i, j); |
- gfx::Rect display_rect = tile_rect; |
- tile_rect.Intersect(content_rect); |
- |
- // Skip empty tiles. |
- if (tile_rect.IsEmpty()) |
- continue; |
- |
- gfx::Rect visible_tile_rect = |
- draw_properties().occlusion_in_content_space.GetUnoccludedContentRect( |
- tile_rect); |
- if (visible_tile_rect.IsEmpty()) |
- continue; |
- |
- if (!tile || !tile->resource_id()) { |
- SkColor checker_color; |
- if (ShowDebugBorders()) { |
- checker_color = |
- tile ? DebugColors::InvalidatedTileCheckerboardColor() |
- : DebugColors::EvictedTileCheckerboardColor(); |
- } else { |
- checker_color = DebugColors::DefaultCheckerboardColor(); |
- } |
- |
- CheckerboardDrawQuad* checkerboard_quad = |
- render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); |
- checkerboard_quad->SetNew(shared_quad_state, tile_rect, |
- visible_tile_rect, checker_color, 1.f); |
- append_quads_data->num_missing_tiles++; |
- continue; |
- } |
- |
- gfx::Rect tile_opaque_rect = contents_opaque() ? tile_rect : gfx::Rect(); |
- |
- // Keep track of how the top left has moved, so the texture can be |
- // offset the same amount. |
- gfx::Vector2d display_offset = tile_rect.origin() - display_rect.origin(); |
- gfx::Vector2d texture_offset = |
- tiler_->texture_offset(i, j) + display_offset; |
- gfx::RectF tex_coord_rect = gfx::RectF(tile_rect.size()) + texture_offset; |
- |
- float tile_width = static_cast<float>(tiler_->tile_size().width()); |
- float tile_height = static_cast<float>(tiler_->tile_size().height()); |
- gfx::Size texture_size(tile_width, tile_height); |
- |
- TileDrawQuad* quad = render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
- quad->SetNew(shared_quad_state, |
- tile_rect, |
- tile_opaque_rect, |
- visible_tile_rect, |
- tile->resource_id(), |
- tex_coord_rect, |
- texture_size, |
- tile->contents_swizzled(), |
- false); |
- } |
- } |
-} |
- |
-void TiledLayerImpl::SetTilingData(const LayerTilingData& tiler) { |
- if (tiler_) { |
- tiler_->reset(); |
- } else { |
- tiler_ = LayerTilingData::Create(tiler.tile_size(), |
- tiler.has_border_texels() |
- ? LayerTilingData::HAS_BORDER_TEXELS |
- : LayerTilingData::NO_BORDER_TEXELS); |
- } |
- *tiler_ = tiler; |
-} |
- |
-void TiledLayerImpl::PushTileProperties( |
- int i, |
- int j, |
- ResourceProvider::ResourceId resource_id, |
- bool contents_swizzled) { |
- DrawableTile* tile = TileAt(i, j); |
- if (!tile) |
- tile = CreateTile(i, j); |
- tile->set_resource_id(resource_id); |
- tile->set_contents_swizzled(contents_swizzled); |
-} |
- |
-void TiledLayerImpl::PushInvalidTile(int i, int j) { |
- DrawableTile* tile = TileAt(i, j); |
- if (!tile) |
- tile = CreateTile(i, j); |
- tile->set_resource_id(0); |
- tile->set_contents_swizzled(false); |
-} |
- |
-SimpleEnclosedRegion TiledLayerImpl::VisibleContentOpaqueRegion() const { |
- if (skips_draw_) |
- return SimpleEnclosedRegion(); |
- return LayerImpl::VisibleContentOpaqueRegion(); |
-} |
- |
-void TiledLayerImpl::ReleaseResources() { |
- tiler_->reset(); |
-} |
- |
-const char* TiledLayerImpl::LayerTypeAsString() const { |
- return "cc::TiledLayerImpl"; |
-} |
- |
-} // namespace cc |