Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 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 | |
Torne (Richard Coles) | c2e0dbd | 2013-05-09 18:35:53 +0100 | [diff] [blame] | 7 | #include <limits> |
| 8 | |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 9 | #include "cc/base/math_util.h" |
| 10 | |
| 11 | namespace cc { |
| 12 | |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 13 | scoped_ptr<base::Value> ManagedTileBinAsValue(ManagedTileBin bin) { |
| 14 | switch (bin) { |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 15 | case NOW_AND_READY_TO_DRAW_BIN: |
| 16 | return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 17 | "NOW_AND_READY_TO_DRAW_BIN")); |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 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")); |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 24 | case EVENTUALLY_AND_ACTIVE_BIN: |
| 25 | return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 26 | "EVENTUALLY_AND_ACTIVE_BIN")); |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 27 | case EVENTUALLY_BIN: |
| 28 | return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 29 | "EVENTUALLY_BIN")); |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 30 | case NEVER_AND_ACTIVE_BIN: |
| 31 | return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 32 | "NEVER_AND_ACTIVE_BIN")); |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 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 | |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 59 | ManagedTileState::ManagedTileState() |
Torne (Richard Coles) | 868fa2f | 2013-06-11 10:57:03 +0100 | [diff] [blame] | 60 | : raster_mode(LOW_QUALITY_RASTER_MODE), |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 61 | gpu_memmgr_stats_bin(NEVER_BIN), |
| 62 | resolution(NON_IDEAL_RESOLUTION), |
Torne (Richard Coles) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 63 | required_for_activation(false), |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 64 | time_to_needed_in_seconds(std::numeric_limits<float>::infinity()), |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 65 | distance_to_visible_in_pixels(std::numeric_limits<float>::infinity()), |
Ben Murdoch | 2385ea3 | 2013-08-06 11:01:04 +0100 | [diff] [blame] | 66 | visible_and_ready_to_draw(false), |
| 67 | scheduled_priority(0) { |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 68 | 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) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 74 | ManagedTileState::TileVersion::TileVersion() |
Torne (Richard Coles) | c2e0dbd | 2013-05-09 18:35:53 +0100 | [diff] [blame] | 75 | : mode_(RESOURCE_MODE), |
Torne (Richard Coles) | 7d4cd47 | 2013-06-19 11:58:07 +0100 | [diff] [blame] | 76 | has_text_(false) { |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 77 | } |
| 78 | |
Torne (Richard Coles) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 79 | ManagedTileState::TileVersion::~TileVersion() { |
Torne (Richard Coles) | c2e0dbd | 2013-05-09 18:35:53 +0100 | [diff] [blame] | 80 | DCHECK(!resource_); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 81 | } |
| 82 | |
Torne (Richard Coles) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 83 | bool ManagedTileState::TileVersion::IsReadyToDraw() const { |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 84 | switch (mode_) { |
Torne (Richard Coles) | c2e0dbd | 2013-05-09 18:35:53 +0100 | [diff] [blame] | 85 | case RESOURCE_MODE: |
Torne (Richard Coles) | 7d4cd47 | 2013-06-19 11:58:07 +0100 | [diff] [blame] | 86 | return !!resource_; |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 87 | case SOLID_COLOR_MODE: |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 88 | case PICTURE_PILE_MODE: |
| 89 | return true; |
| 90 | default: |
| 91 | NOTREACHED(); |
| 92 | return false; |
| 93 | } |
| 94 | } |
| 95 | |
Torne (Richard Coles) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 96 | size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const { |
| 97 | if (!resource_) |
| 98 | return 0; |
| 99 | return resource_->bytes(); |
| 100 | } |
| 101 | |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 102 | ManagedTileState::~ManagedTileState() { |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 103 | } |
| 104 | |
| 105 | scoped_ptr<base::Value> ManagedTileState::AsValue() const { |
| 106 | scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
Torne (Richard Coles) | 868fa2f | 2013-06-11 10:57:03 +0100 | [diff] [blame] | 107 | state->SetBoolean("has_resource", |
| 108 | tile_versions[raster_mode].resource_.get() != 0); |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 109 | state->Set("bin.0", ManagedTileBinAsValue(bin[ACTIVE_TREE]).release()); |
| 110 | state->Set("bin.1", ManagedTileBinAsValue(bin[PENDING_TREE]).release()); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 111 | state->Set("gpu_memmgr_stats_bin", |
Ben Murdoch | 7dbb3d5 | 2013-07-17 14:55:54 +0100 | [diff] [blame] | 112 | ManagedTileBinAsValue(bin[ACTIVE_TREE]).release()); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 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()); |
Torne (Richard Coles) | 90dce4d | 2013-05-29 14:40:03 +0100 | [diff] [blame] | 118 | state->SetBoolean("required_for_activation", required_for_activation); |
Torne (Richard Coles) | 7d4cd47 | 2013-06-19 11:58:07 +0100 | [diff] [blame] | 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_)); |
Ben Murdoch | 2385ea3 | 2013-08-06 11:01:04 +0100 | [diff] [blame] | 126 | state->SetInteger("scheduled_priority", scheduled_priority); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 127 | return state.PassAs<base::Value>(); |
| 128 | } |
| 129 | |
| 130 | } // namespace cc |
| 131 | |