| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resources/managed_tile_state.h" | 5 #include "cc/resources/managed_tile_state.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
| 10 | 10 |
| 11 namespace cc { | 11 namespace cc { |
| 12 namespace { | |
| 13 | |
| 14 scoped_ptr<base::Value> MemoryStateAsValue(TileVersionMemoryState state) { | |
| 15 switch (state) { | |
| 16 case NOT_ALLOWED_TO_USE_MEMORY: | |
| 17 return scoped_ptr<base::Value>( | |
| 18 base::Value::CreateStringValue("NOT_ALLOWED_TO_USE_MEMORY")); | |
| 19 case CAN_USE_MEMORY: | |
| 20 return scoped_ptr<base::Value>( | |
| 21 base::Value::CreateStringValue("CAN_USE_MEMORY")); | |
| 22 case USING_UNRELEASABLE_MEMORY: | |
| 23 return scoped_ptr<base::Value>( | |
| 24 base::Value::CreateStringValue("USING_UNRELEASABLE_MEMORY")); | |
| 25 case USING_RELEASABLE_MEMORY: | |
| 26 return scoped_ptr<base::Value>( | |
| 27 base::Value::CreateStringValue("USING_RELEASABLE_MEMORY")); | |
| 28 default: | |
| 29 NOTREACHED() << "Unrecognized TileVersionMemoryState value " << state; | |
| 30 return scoped_ptr<base::Value>(base::Value::CreateStringValue( | |
| 31 "<unknown TileVersionMemoryState value>")); | |
| 32 } | |
| 33 } | |
| 34 | |
| 35 } // namespace | |
| 36 | 12 |
| 37 ManagedTileState::ManagedTileState() | 13 ManagedTileState::ManagedTileState() |
| 38 : picture_pile_analyzed(false), | 14 : picture_pile_analyzed(false), |
| 39 gpu_memmgr_stats_bin(NEVER_BIN), | 15 gpu_memmgr_stats_bin(NEVER_BIN), |
| 40 resolution(NON_IDEAL_RESOLUTION), | 16 resolution(NON_IDEAL_RESOLUTION), |
| 41 required_for_activation(false), | 17 required_for_activation(false), |
| 42 time_to_needed_in_seconds(std::numeric_limits<float>::infinity()), | 18 time_to_needed_in_seconds(std::numeric_limits<float>::infinity()), |
| 43 distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()) { | 19 distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()) { |
| 44 for (int i = 0; i < NUM_TREES; ++i) { | 20 for (int i = 0; i < NUM_TREES; ++i) { |
| 45 tree_bin[i] = NEVER_BIN; | 21 tree_bin[i] = NEVER_BIN; |
| 46 bin[i] = NEVER_BIN; | 22 bin[i] = NEVER_BIN; |
| 47 } | 23 } |
| 48 } | 24 } |
| 49 | 25 |
| 50 ManagedTileState::TileVersion::TileVersion() | 26 ManagedTileState::TileVersion::TileVersion() |
| 51 : mode_(RESOURCE_MODE), | 27 : mode_(RESOURCE_MODE), |
| 52 resource_id_(0), | 28 resource_id_(0), |
| 53 resource_format_(GL_RGBA), | 29 resource_format_(GL_RGBA), |
| 54 memory_state_(NOT_ALLOWED_TO_USE_MEMORY), | |
| 55 forced_upload_(false) { | 30 forced_upload_(false) { |
| 56 } | 31 } |
| 57 | 32 |
| 58 ManagedTileState::TileVersion::~TileVersion() { | 33 ManagedTileState::TileVersion::~TileVersion() { |
| 59 DCHECK(!resource_); | 34 DCHECK(!resource_); |
| 60 DCHECK(memory_state_ == NOT_ALLOWED_TO_USE_MEMORY); | |
| 61 } | 35 } |
| 62 | 36 |
| 63 bool ManagedTileState::TileVersion::IsReadyToDraw() const { | 37 bool ManagedTileState::TileVersion::IsReadyToDraw() const { |
| 64 switch (mode_) { | 38 switch (mode_) { |
| 65 case RESOURCE_MODE: | 39 case RESOURCE_MODE: |
| 66 return resource_id_ && | 40 return resource_id_ && (resource_ || forced_upload_); |
| 67 (memory_state_ == USING_RELEASABLE_MEMORY || | |
| 68 (memory_state_ == USING_UNRELEASABLE_MEMORY && forced_upload_)); | |
| 69 case SOLID_COLOR_MODE: | 41 case SOLID_COLOR_MODE: |
| 70 case PICTURE_PILE_MODE: | 42 case PICTURE_PILE_MODE: |
| 71 return true; | 43 return true; |
| 72 default: | 44 default: |
| 73 NOTREACHED(); | 45 NOTREACHED(); |
| 74 return false; | 46 return false; |
| 75 } | 47 } |
| 76 } | 48 } |
| 77 | 49 |
| 78 size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const { | 50 size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const { |
| 79 if (!resource_) | 51 if (!resource_) |
| 80 return 0; | 52 return 0; |
| 81 return resource_->bytes(); | 53 return resource_->bytes(); |
| 82 } | 54 } |
| 83 | 55 |
| 84 ManagedTileState::~ManagedTileState() { | 56 ManagedTileState::~ManagedTileState() { |
| 85 } | 57 } |
| 86 | 58 |
| 87 scoped_ptr<base::Value> ManagedTileState::AsValue() const { | 59 scoped_ptr<base::Value> ManagedTileState::AsValue() const { |
| 88 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 60 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
| 89 state->SetBoolean("has_resource", tile_version.resource_.get() != 0); | 61 state->SetBoolean("has_resource", tile_version.resource_.get() != 0); |
| 90 state->Set("memory_state", | |
| 91 MemoryStateAsValue(tile_version.memory_state_).release()); | |
| 92 state->Set("bin.0", TileManagerBinAsValue(bin[ACTIVE_TREE]).release()); | 62 state->Set("bin.0", TileManagerBinAsValue(bin[ACTIVE_TREE]).release()); |
| 93 state->Set("bin.1", TileManagerBinAsValue(bin[PENDING_TREE]).release()); | 63 state->Set("bin.1", TileManagerBinAsValue(bin[PENDING_TREE]).release()); |
| 94 state->Set("gpu_memmgr_stats_bin", | 64 state->Set("gpu_memmgr_stats_bin", |
| 95 TileManagerBinAsValue(bin[ACTIVE_TREE]).release()); | 65 TileManagerBinAsValue(bin[ACTIVE_TREE]).release()); |
| 96 state->Set("resolution", TileResolutionAsValue(resolution).release()); | 66 state->Set("resolution", TileResolutionAsValue(resolution).release()); |
| 97 state->Set("time_to_needed_in_seconds", | 67 state->Set("time_to_needed_in_seconds", |
| 98 MathUtil::AsValueSafely(time_to_needed_in_seconds).release()); | 68 MathUtil::AsValueSafely(time_to_needed_in_seconds).release()); |
| 99 state->Set("distance_to_visible_in_pixels", | 69 state->Set("distance_to_visible_in_pixels", |
| 100 MathUtil::AsValueSafely(distance_to_visible_in_pixels).release()); | 70 MathUtil::AsValueSafely(distance_to_visible_in_pixels).release()); |
| 101 state->SetBoolean("required_for_activation", required_for_activation); | 71 state->SetBoolean("required_for_activation", required_for_activation); |
| 102 state->SetBoolean("is_picture_pile_analyzed", picture_pile_analyzed); | 72 state->SetBoolean("is_picture_pile_analyzed", picture_pile_analyzed); |
| 103 state->SetBoolean("is_solid_color", picture_pile_analysis.is_solid_color); | 73 state->SetBoolean("is_solid_color", picture_pile_analysis.is_solid_color); |
| 104 state->SetBoolean("is_transparent", | 74 state->SetBoolean("is_transparent", |
| 105 picture_pile_analysis.is_solid_color && | 75 picture_pile_analysis.is_solid_color && |
| 106 !SkColorGetA(picture_pile_analysis.solid_color)); | 76 !SkColorGetA(picture_pile_analysis.solid_color)); |
| 107 return state.PassAs<base::Value>(); | 77 return state.PassAs<base::Value>(); |
| 108 } | 78 } |
| 109 | 79 |
| 110 } // namespace cc | 80 } // namespace cc |
| 111 | 81 |
| OLD | NEW |