12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/managed_tile_state.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <limits> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/debug/trace_event_argument.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/math_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string ManagedTileBinToString(ManagedTileBin bin) { 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch switch (bin) { 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case NOW_AND_READY_TO_DRAW_BIN: 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "NOW_AND_READY_TO_DRAW_BIN"; 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case NOW_BIN: 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "NOW_BIN"; 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case SOON_BIN: 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "SOON_BIN"; 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case EVENTUALLY_AND_ACTIVE_BIN: 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "EVENTUALLY_AND_ACTIVE_BIN"; 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case EVENTUALLY_BIN: 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "EVENTUALLY_BIN"; 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case AT_LAST_AND_ACTIVE_BIN: 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "AT_LAST_AND_ACTIVE_BIN"; 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case AT_LAST_BIN: 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "AT_LAST_BIN"; 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case NEVER_BIN: 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "NEVER_BIN"; 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case NUM_BINS: 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NOTREACHED(); 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "Invalid Bin (NUM_BINS)"; 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "Invalid Bin (UNKNOWN)"; 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ManagedTileState::ManagedTileState() 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : raster_mode(LOW_QUALITY_RASTER_MODE), 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bin(NEVER_BIN), 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resolution(NON_IDEAL_RESOLUTION), 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) required_for_activation(false), 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) priority_bin(TilePriority::EVENTUALLY), 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) distance_to_visible(std::numeric_limits<float>::infinity()), 472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch visible_and_ready_to_draw(false), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scheduled_priority(0) {} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ManagedTileState::TileVersion::TileVersion() 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : mode_(RESOURCE_MODE), solid_color_(SK_ColorWHITE) { 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ManagedTileState::TileVersion::~TileVersion() { DCHECK(!resource_); } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool ManagedTileState::TileVersion::IsReadyToDraw() const { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (mode_) { 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case RESOURCE_MODE: 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return !!resource_; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case SOLID_COLOR_MODE: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case PICTURE_PILE_MODE: 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NOTREACHED(); 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return false; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const { 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!resource_) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 0; 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return resource_->bytes(); 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ManagedTileState::~ManagedTileState() {} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ManagedTileState::AsValueInto(base::debug::TracedValue* state) const { 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool has_resource = false; 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool has_active_task = false; 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) has_resource |= (tile_versions[mode].resource_.get() != 0); 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) has_active_task |= (tile_versions[mode].raster_task_.get() != 0); 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool is_using_gpu_memory = has_resource || has_active_task; 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) state->SetBoolean("has_resource", has_resource); 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) state->SetBoolean("is_using_gpu_memory", is_using_gpu_memory); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) state->SetString("bin", ManagedTileBinToString(bin)); 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) state->SetString("resolution", TileResolutionToString(resolution)); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) state->SetString("priority_bin", TilePriorityBinToString(priority_bin)); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) state->SetDouble("distance_to_visible", 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MathUtil::AsFloatSafely(distance_to_visible)); 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) state->SetBoolean("required_for_activation", required_for_activation); 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state->SetBoolean( 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "is_solid_color", 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE); 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state->SetBoolean( 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "is_transparent", 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE && 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) !SkColorGetA(tile_versions[raster_mode].solid_color_)); 1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch state->SetInteger("scheduled_priority", scheduled_priority); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 105