#include "cc/resources/tile.h"
+#include <algorithm>
+
+#include "base/debug/trace_event_argument.h"
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
#include "cc/resources/tile_manager.h"
Tile::Tile(TileManager* tile_manager,
PicturePileImpl* picture_pile,
- gfx::Size tile_size,
+ const gfx::Size& tile_size,
const gfx::Rect& content_rect,
- const gfx::Rect& opaque_rect,
float contents_scale,
int layer_id,
int source_frame_number,
int flags)
- : RefCountedManaged<Tile>(tile_manager),
- tile_manager_(tile_manager),
- tile_size_(tile_size),
- content_rect_(content_rect),
- contents_scale_(contents_scale),
- opaque_rect_(opaque_rect),
- layer_id_(layer_id),
- source_frame_number_(source_frame_number),
- flags_(flags),
- id_(s_next_id_++) {
+ : RefCountedManaged<Tile>(tile_manager),
+ tile_manager_(tile_manager),
+ size_(tile_size),
+ content_rect_(content_rect),
+ contents_scale_(contents_scale),
+ layer_id_(layer_id),
+ source_frame_number_(source_frame_number),
+ flags_(flags),
+ is_shared_(false),
+ id_(s_next_id_++) {
set_picture_pile(picture_pile);
+ for (int i = 0; i < NUM_TREES; i++)
+ is_occluded_[i] = false;
}
Tile::~Tile() {
tile_manager_->DidChangeTilePriority(this);
}
-scoped_ptr<base::Value> Tile::AsValue() const {
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
+void Tile::AsValueInto(base::debug::TracedValue* res) const {
TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
- TRACE_DISABLED_BY_DEFAULT("cc.debug"), res.get(), "cc::Tile", this);
- res->Set("picture_pile",
- TracedValue::CreateIDRef(picture_pile_.get()).release());
+ TRACE_DISABLED_BY_DEFAULT("cc.debug"), res, "cc::Tile", this);
+ TracedValue::SetIDRef(picture_pile_.get(), res, "picture_pile");
res->SetDouble("contents_scale", contents_scale_);
- res->Set("content_rect", MathUtil::AsValue(content_rect_).release());
+
+ res->BeginArray("content_rect");
+ MathUtil::AddToTracedValue(content_rect_, res);
+ res->EndArray();
+
res->SetInteger("layer_id", layer_id_);
- res->Set("active_priority", priority_[ACTIVE_TREE].AsValue().release());
- res->Set("pending_priority", priority_[PENDING_TREE].AsValue().release());
- res->Set("managed_state", managed_state_.AsValue().release());
- res->SetBoolean("can_use_lcd_text", can_use_lcd_text());
- res->SetBoolean("use_gpu_rasterization", use_gpu_rasterization());
- return res.PassAs<base::Value>();
+
+ res->BeginDictionary("active_priority");
+ priority_[ACTIVE_TREE].AsValueInto(res);
+ res->EndDictionary();
+
+ res->BeginDictionary("pending_priority");
+ priority_[PENDING_TREE].AsValueInto(res);
+ res->EndDictionary();
+
+ res->BeginDictionary("managed_state");
+ managed_state_.AsValueInto(res);
+ res->EndDictionary();
+
+ res->SetBoolean("use_picture_analysis", use_picture_analysis());
+
+ res->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes());
}
size_t Tile::GPUMemoryUsageInBytes() const {
return total_size;
}
+RasterMode Tile::DetermineRasterModeForTree(WhichTree tree) const {
+ return DetermineRasterModeForResolution(priority(tree).resolution);
+}
+
+RasterMode Tile::DetermineOverallRasterMode() const {
+ return DetermineRasterModeForResolution(managed_state_.resolution);
+}
+
+RasterMode Tile::DetermineRasterModeForResolution(
+ TileResolution resolution) const {
+ RasterMode current_mode = managed_state_.raster_mode;
+ RasterMode raster_mode = resolution == LOW_RESOLUTION
+ ? LOW_QUALITY_RASTER_MODE
+ : HIGH_QUALITY_RASTER_MODE;
+ return std::min(raster_mode, current_mode);
+}
+
+bool Tile::HasRasterTask() const {
+ for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) {
+ if (managed_state_.tile_versions[mode].raster_task_.get())
+ return true;
+ }
+ return false;
+}
+
} // namespace cc