tile.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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/resources/tile.h" 6 7#include <algorithm> 8 9#include "base/debug/trace_event_argument.h" 10#include "cc/base/math_util.h" 11#include "cc/debug/traced_value.h" 12#include "cc/resources/tile_manager.h" 13#include "third_party/khronos/GLES2/gl2.h" 14 15namespace cc { 16 17Tile::Id Tile::s_next_id_ = 0; 18 19Tile::Tile(TileManager* tile_manager, 20 PicturePileImpl* picture_pile, 21 const gfx::Size& tile_size, 22 const gfx::Rect& content_rect, 23 const gfx::Rect& opaque_rect, 24 float contents_scale, 25 int layer_id, 26 int source_frame_number, 27 int flags) 28 : RefCountedManaged<Tile>(tile_manager), 29 tile_manager_(tile_manager), 30 tile_size_(tile_size), 31 content_rect_(content_rect), 32 contents_scale_(contents_scale), 33 opaque_rect_(opaque_rect), 34 layer_id_(layer_id), 35 source_frame_number_(source_frame_number), 36 flags_(flags), 37 id_(s_next_id_++) { 38 set_picture_pile(picture_pile); 39 for (int i = 0; i < NUM_TREES; i++) 40 is_occluded_[i] = false; 41} 42 43Tile::~Tile() { 44 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 45 TRACE_DISABLED_BY_DEFAULT("cc.debug"), 46 "cc::Tile", this); 47} 48 49void Tile::SetPriority(WhichTree tree, const TilePriority& priority) { 50 if (priority == priority_[tree]) 51 return; 52 53 priority_[tree] = priority; 54 tile_manager_->DidChangeTilePriority(this); 55} 56 57void Tile::MarkRequiredForActivation() { 58 if (priority_[PENDING_TREE].required_for_activation) 59 return; 60 61 priority_[PENDING_TREE].required_for_activation = true; 62 tile_manager_->DidChangeTilePriority(this); 63} 64 65void Tile::AsValueInto(base::debug::TracedValue* res) const { 66 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( 67 TRACE_DISABLED_BY_DEFAULT("cc.debug"), res, "cc::Tile", this); 68 TracedValue::SetIDRef(picture_pile_.get(), res, "picture_pile"); 69 res->SetDouble("contents_scale", contents_scale_); 70 71 res->BeginArray("content_rect"); 72 MathUtil::AddToTracedValue(content_rect_, res); 73 res->EndArray(); 74 75 res->SetInteger("layer_id", layer_id_); 76 77 res->BeginDictionary("active_priority"); 78 priority_[ACTIVE_TREE].AsValueInto(res); 79 res->EndDictionary(); 80 81 res->BeginDictionary("pending_priority"); 82 priority_[PENDING_TREE].AsValueInto(res); 83 res->EndDictionary(); 84 85 res->BeginDictionary("managed_state"); 86 managed_state_.AsValueInto(res); 87 res->EndDictionary(); 88 89 res->SetBoolean("use_picture_analysis", use_picture_analysis()); 90 91 res->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes()); 92} 93 94size_t Tile::GPUMemoryUsageInBytes() const { 95 size_t total_size = 0; 96 for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) 97 total_size += managed_state_.tile_versions[mode].GPUMemoryUsageInBytes(); 98 return total_size; 99} 100 101RasterMode Tile::DetermineRasterModeForTree(WhichTree tree) const { 102 return DetermineRasterModeForResolution(priority(tree).resolution); 103} 104 105RasterMode Tile::DetermineOverallRasterMode() const { 106 return DetermineRasterModeForResolution(managed_state_.resolution); 107} 108 109RasterMode Tile::DetermineRasterModeForResolution( 110 TileResolution resolution) const { 111 RasterMode current_mode = managed_state_.raster_mode; 112 RasterMode raster_mode = resolution == LOW_RESOLUTION 113 ? LOW_QUALITY_RASTER_MODE 114 : HIGH_QUALITY_RASTER_MODE; 115 return std::min(raster_mode, current_mode); 116} 117 118bool Tile::HasRasterTask() const { 119 for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { 120 if (managed_state_.tile_versions[mode].raster_task_) 121 return true; 122 } 123 return false; 124} 125 126} // namespace cc 127