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 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>(base::Value::CreateStringValue( 17 "NOW_AND_READY_TO_DRAW_BIN")); 18 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")); 24 case EVENTUALLY_AND_ACTIVE_BIN: 25 return scoped_ptr<base::Value>(base::Value::CreateStringValue( 26 "EVENTUALLY_AND_ACTIVE_BIN")); 27 case EVENTUALLY_BIN: 28 return scoped_ptr<base::Value>(base::Value::CreateStringValue( 29 "EVENTUALLY_BIN")); 30 case NEVER_AND_ACTIVE_BIN: 31 return scoped_ptr<base::Value>(base::Value::CreateStringValue( 32 "NEVER_AND_ACTIVE_BIN")); 33 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 43 scoped_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 59 ManagedTileState::ManagedTileState() 60 : raster_mode(LOW_QUALITY_RASTER_MODE), 61 gpu_memmgr_stats_bin(NEVER_BIN), 62 resolution(NON_IDEAL_RESOLUTION), 63 required_for_activation(false), 64 time_to_needed_in_seconds(std::numeric_limits<float>::infinity()), 65 distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()), 66 visible_and_ready_to_draw(false), 67 scheduled_priority(0) { 68 for (int i = 0; i < NUM_TREES; ++i) { 69 tree_bin[i] = NEVER_BIN; 70 bin[i] = NEVER_BIN; 71 } 72 } 73 74 ManagedTileState::TileVersion::TileVersion() 75 : mode_(RESOURCE_MODE), 76 has_text_(false) { 77 } 78 79 ManagedTileState::TileVersion::~TileVersion() { 80 DCHECK(!resource_); 81 } 82 83 bool ManagedTileState::TileVersion::IsReadyToDraw() const { 84 switch (mode_) { 85 case RESOURCE_MODE: 86 return !!resource_; 87 case SOLID_COLOR_MODE: 88 case PICTURE_PILE_MODE: 89 return true; 90 default: 91 NOTREACHED(); 92 return false; 93 } 94 } 95 96 size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const { 97 if (!resource_) 98 return 0; 99 return resource_->bytes(); 100 } 101 102 ManagedTileState::~ManagedTileState() { 103 } 104 105 scoped_ptr<base::Value> ManagedTileState::AsValue() const { 106 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 107 state->SetBoolean("has_resource", 108 tile_versions[raster_mode].resource_.get() != 0); 109 state->Set("bin.0", ManagedTileBinAsValue(bin[ACTIVE_TREE]).release()); 110 state->Set("bin.1", ManagedTileBinAsValue(bin[PENDING_TREE]).release()); 111 state->Set("gpu_memmgr_stats_bin", 112 ManagedTileBinAsValue(bin[ACTIVE_TREE]).release()); 113 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()); 118 state->SetBoolean("required_for_activation", required_for_activation); 119 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_)); 126 state->SetInteger("scheduled_priority", scheduled_priority); 127 return state.PassAs<base::Value>(); 128 } 129 130 } // namespace cc 131 132