blob: 6f85331dbb2bcce9d645b384a6f8e3cbbac8ae86 [file] [log] [blame]
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00001// Copyright 2013 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/managed_tile_state.h"
6
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01007#include <limits>
8
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00009#include "cc/base/math_util.h"
10
11namespace cc {
12
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010013scoped_ptr<base::Value> ManagedTileBinAsValue(ManagedTileBin bin) {
14 switch (bin) {
Ben Murdochbb1529c2013-08-08 10:24:53 +010015 case NOW_AND_READY_TO_DRAW_BIN:
16 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
17 "NOW_AND_READY_TO_DRAW_BIN"));
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010018 case NOW_BIN:
19 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
20 "NOW_BIN"));
21 case SOON_BIN:
22 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
23 "SOON_BIN"));
Ben Murdochbb1529c2013-08-08 10:24:53 +010024 case EVENTUALLY_AND_ACTIVE_BIN:
25 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
26 "EVENTUALLY_AND_ACTIVE_BIN"));
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010027 case EVENTUALLY_BIN:
28 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
29 "EVENTUALLY_BIN"));
Ben Murdochbb1529c2013-08-08 10:24:53 +010030 case NEVER_AND_ACTIVE_BIN:
31 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
32 "NEVER_AND_ACTIVE_BIN"));
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010033 case NEVER_BIN:
34 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
35 "NEVER_BIN"));
36 default:
37 DCHECK(false) << "Unrecognized ManagedTileBin value " << bin;
38 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
39 "<unknown ManagedTileBin value>"));
40 }
41}
42
43scoped_ptr<base::Value> ManagedTileBinPriorityAsValue(
44 ManagedTileBinPriority bin_priority) {
45 switch (bin_priority) {
46 case HIGH_PRIORITY_BIN:
47 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
48 "HIGH_PRIORITY_BIN"));
49 case LOW_PRIORITY_BIN:
50 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
51 "LOW_PRIORITY_BIN"));
52 default:
53 DCHECK(false) << "Unrecognized ManagedTileBinPriority value";
54 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
55 "<unknown ManagedTileBinPriority value>"));
56 }
57}
58
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000059ManagedTileState::ManagedTileState()
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010060 : raster_mode(LOW_QUALITY_RASTER_MODE),
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000061 gpu_memmgr_stats_bin(NEVER_BIN),
62 resolution(NON_IDEAL_RESOLUTION),
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010063 required_for_activation(false),
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000064 time_to_needed_in_seconds(std::numeric_limits<float>::infinity()),
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010065 distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()),
Ben Murdoch2385ea32013-08-06 11:01:04 +010066 visible_and_ready_to_draw(false),
67 scheduled_priority(0) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000068 for (int i = 0; i < NUM_TREES; ++i) {
69 tree_bin[i] = NEVER_BIN;
70 bin[i] = NEVER_BIN;
71 }
72}
73
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010074ManagedTileState::TileVersion::TileVersion()
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010075 : mode_(RESOURCE_MODE),
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010076 has_text_(false) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000077}
78
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010079ManagedTileState::TileVersion::~TileVersion() {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010080 DCHECK(!resource_);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000081}
82
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010083bool ManagedTileState::TileVersion::IsReadyToDraw() const {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000084 switch (mode_) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010085 case RESOURCE_MODE:
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010086 return !!resource_;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000087 case SOLID_COLOR_MODE:
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000088 case PICTURE_PILE_MODE:
89 return true;
90 default:
91 NOTREACHED();
92 return false;
93 }
94}
95
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010096size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const {
97 if (!resource_)
98 return 0;
99 return resource_->bytes();
100}
101
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000102ManagedTileState::~ManagedTileState() {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000103}
104
105scoped_ptr<base::Value> ManagedTileState::AsValue() const {
106 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100107 state->SetBoolean("has_resource",
108 tile_versions[raster_mode].resource_.get() != 0);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100109 state->Set("bin.0", ManagedTileBinAsValue(bin[ACTIVE_TREE]).release());
110 state->Set("bin.1", ManagedTileBinAsValue(bin[PENDING_TREE]).release());
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000111 state->Set("gpu_memmgr_stats_bin",
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100112 ManagedTileBinAsValue(bin[ACTIVE_TREE]).release());
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000113 state->Set("resolution", TileResolutionAsValue(resolution).release());
114 state->Set("time_to_needed_in_seconds",
115 MathUtil::AsValueSafely(time_to_needed_in_seconds).release());
116 state->Set("distance_to_visible_in_pixels",
117 MathUtil::AsValueSafely(distance_to_visible_in_pixels).release());
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100118 state->SetBoolean("required_for_activation", required_for_activation);
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +0100119 state->SetBoolean(
120 "is_solid_color",
121 tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE);
122 state->SetBoolean(
123 "is_transparent",
124 tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE &&
125 !SkColorGetA(tile_versions[raster_mode].solid_color_));
Ben Murdoch2385ea32013-08-06 11:01:04 +0100126 state->SetInteger("scheduled_priority", scheduled_priority);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000127 return state.PassAs<base::Value>();
128}
129
130} // namespace cc
131