1 // 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
7 #include <limits>
8
9 #include "cc/base/math_util.h"
10
11 namespace cc {
12
ManagedTileBinAsValue(ManagedTileBin bin)13 scoped_ptr<base::Value> ManagedTileBinAsValue(ManagedTileBin bin) {
14 switch (bin) {
15 case NOW_AND_READY_TO_DRAW_BIN:
16 return scoped_ptr<base::Value>(
17 base::Value::CreateStringValue("NOW_AND_READY_TO_DRAW_BIN"));
18 case NOW_BIN:
19 return scoped_ptr<base::Value>(
20 base::Value::CreateStringValue("NOW_BIN"));
21 case SOON_BIN:
22 return scoped_ptr<base::Value>(
23 base::Value::CreateStringValue("SOON_BIN"));
24 case EVENTUALLY_AND_ACTIVE_BIN:
25 return scoped_ptr<base::Value>(
26 base::Value::CreateStringValue("EVENTUALLY_AND_ACTIVE_BIN"));
27 case EVENTUALLY_BIN:
28 return scoped_ptr<base::Value>(
29 base::Value::CreateStringValue("EVENTUALLY_BIN"));
30 case AT_LAST_AND_ACTIVE_BIN:
31 return scoped_ptr<base::Value>(
32 base::Value::CreateStringValue("AT_LAST_AND_ACTIVE_BIN"));
33 case AT_LAST_BIN:
34 return scoped_ptr<base::Value>(
35 base::Value::CreateStringValue("AT_LAST_BIN"));
36 case NEVER_BIN:
37 return scoped_ptr<base::Value>(
38 base::Value::CreateStringValue("NEVER_BIN"));
39 case NUM_BINS:
40 NOTREACHED();
41 return scoped_ptr<base::Value>(
42 base::Value::CreateStringValue("Invalid Bin (NUM_BINS)"));
43 }
44 return scoped_ptr<base::Value>(
45 base::Value::CreateStringValue("Invalid Bin (UNKNOWN)"));
46 }
47
ManagedTileState()48 ManagedTileState::ManagedTileState()
49 : raster_mode(LOW_QUALITY_RASTER_MODE),
50 bin(NEVER_BIN),
51 resolution(NON_IDEAL_RESOLUTION),
52 required_for_activation(false),
53 time_to_needed_in_seconds(std::numeric_limits<float>::infinity()),
54 distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()),
55 visible_and_ready_to_draw(false),
56 scheduled_priority(0) {
57 }
58
TileVersion()59 ManagedTileState::TileVersion::TileVersion()
60 : mode_(RESOURCE_MODE),
61 has_text_(false) {
62 }
63
~TileVersion()64 ManagedTileState::TileVersion::~TileVersion() {
65 DCHECK(!resource_);
66 }
67
IsReadyToDraw() const68 bool ManagedTileState::TileVersion::IsReadyToDraw() const {
69 switch (mode_) {
70 case RESOURCE_MODE:
71 return !!resource_;
72 case SOLID_COLOR_MODE:
73 case PICTURE_PILE_MODE:
74 return true;
75 }
76 NOTREACHED();
77 return false;
78 }
79
GPUMemoryUsageInBytes() const80 size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const {
81 if (!resource_)
82 return 0;
83 return resource_->bytes();
84 }
85
~ManagedTileState()86 ManagedTileState::~ManagedTileState() {
87 }
88
AsValue() const89 scoped_ptr<base::Value> ManagedTileState::AsValue() const {
90 bool has_resource = false;
91 bool has_active_task = false;
92 for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) {
93 has_resource |= (tile_versions[mode].resource_.get() != 0);
94 has_active_task |= !tile_versions[mode].raster_task_.is_null();
95 }
96
97 bool is_using_gpu_memory = has_resource || has_active_task;
98
99 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
100 state->SetBoolean("has_resource", has_resource);
101 state->SetBoolean("is_using_gpu_memory", is_using_gpu_memory);
102 state->Set("bin", ManagedTileBinAsValue(bin).release());
103 state->Set("resolution", TileResolutionAsValue(resolution).release());
104 state->Set("time_to_needed_in_seconds",
105 MathUtil::AsValueSafely(time_to_needed_in_seconds).release());
106 state->Set("distance_to_visible_in_pixels",
107 MathUtil::AsValueSafely(distance_to_visible_in_pixels).release());
108 state->SetBoolean("required_for_activation", required_for_activation);
109 state->SetBoolean(
110 "is_solid_color",
111 tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE);
112 state->SetBoolean(
113 "is_transparent",
114 tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE &&
115 !SkColorGetA(tile_versions[raster_mode].solid_color_));
116 state->SetInteger("scheduled_priority", scheduled_priority);
117 return state.PassAs<base::Value>();
118 }
119
120 } // namespace cc
121