1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Copyright 2014 The Chromium Authors. All rights reserved. 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Use of this source code is governed by a BSD-style license that can be 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// found in the LICENSE file. 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "content/browser/android/ui_resource_provider_impl.h" 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "cc/resources/ui_resource_client.h" 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "cc/trees/layer_tree_host.h" 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "content/public/browser/android/ui_resource_client_android.h" 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovnamespace content { 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::UIResourceProviderImpl() 14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : system_ui_resource_manager_(this), host_(NULL), 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown supports_etc1_npot_(false) { 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::~UIResourceProviderImpl() { 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SetLayerTreeHost(NULL); 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::SetLayerTreeHost(cc::LayerTreeHost* host) { 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (host_ == host) 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return; 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown host_ = host; 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UIResourcesAreInvalid(); 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::UIResourcesAreInvalid() { 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UIResourceClientMap client_map = ui_resource_client_map_; 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ui_resource_client_map_.clear(); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (UIResourceClientMap::iterator iter = client_map.begin(); 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iter != client_map.end(); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iter++) { 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iter->second->UIResourceIsInvalid(); 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncc::UIResourceId UIResourceProviderImpl::CreateUIResource( 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UIResourceClientAndroid* client) { 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (!host_) 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cc::UIResourceId id = host_->CreateUIResource(client); 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown DCHECK(ui_resource_client_map_.find(id) == ui_resource_client_map_.end()); 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ui_resource_client_map_[id] = client; 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return id; 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::DeleteUIResource(cc::UIResourceId ui_resource_id) { 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UIResourceClientMap::iterator iter = 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ui_resource_client_map_.find(ui_resource_id); 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown DCHECK(iter != ui_resource_client_map_.end()); 55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ui_resource_client_map_.erase(iter); 57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng if (!host_) 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return; 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown host_->DeleteUIResource(ui_resource_id); 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownui::SystemUIResourceManager& 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::GetSystemUIResourceManager() { 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return system_ui_resource_manager_; 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownbool UIResourceProviderImpl::SupportsETC1NonPowerOfTwo() const { 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return supports_etc1_npot_; 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} // namespace content 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown