Home | History | Annotate | Download | only in android
      1 // Copyright 2014 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 "content/browser/android/ui_resource_provider_impl.h"
      6 
      7 #include "cc/resources/ui_resource_client.h"
      8 #include "cc/trees/layer_tree_host.h"
      9 #include "content/public/browser/android/ui_resource_client_android.h"
     10 
     11 namespace content {
     12 
     13 UIResourceProviderImpl::UIResourceProviderImpl()
     14     : system_ui_resource_manager_(this), host_(NULL),
     15       supports_etc1_npot_(false) {
     16 
     17 }
     18 
     19 UIResourceProviderImpl::~UIResourceProviderImpl() {
     20   SetLayerTreeHost(NULL);
     21 }
     22 
     23 void UIResourceProviderImpl::SetLayerTreeHost(cc::LayerTreeHost* host) {
     24   if (host_ == host)
     25     return;
     26   host_ = host;
     27   UIResourcesAreInvalid();
     28 }
     29 
     30 void UIResourceProviderImpl::UIResourcesAreInvalid() {
     31   UIResourceClientMap client_map = ui_resource_client_map_;
     32   ui_resource_client_map_.clear();
     33   for (UIResourceClientMap::iterator iter = client_map.begin();
     34        iter != client_map.end();
     35        iter++) {
     36     iter->second->UIResourceIsInvalid();
     37   }
     38 }
     39 
     40 cc::UIResourceId UIResourceProviderImpl::CreateUIResource(
     41     UIResourceClientAndroid* client) {
     42   if (!host_)
     43     return 0;
     44   cc::UIResourceId id = host_->CreateUIResource(client);
     45   DCHECK(ui_resource_client_map_.find(id) == ui_resource_client_map_.end());
     46 
     47   ui_resource_client_map_[id] = client;
     48   return id;
     49 }
     50 
     51 void UIResourceProviderImpl::DeleteUIResource(cc::UIResourceId ui_resource_id) {
     52   UIResourceClientMap::iterator iter =
     53       ui_resource_client_map_.find(ui_resource_id);
     54   DCHECK(iter != ui_resource_client_map_.end());
     55 
     56   ui_resource_client_map_.erase(iter);
     57 
     58   if (!host_)
     59     return;
     60   host_->DeleteUIResource(ui_resource_id);
     61 }
     62 
     63 ui::SystemUIResourceManager&
     64 UIResourceProviderImpl::GetSystemUIResourceManager() {
     65   return system_ui_resource_manager_;
     66 }
     67 
     68 bool UIResourceProviderImpl::SupportsETC1NonPowerOfTwo() const {
     69   return supports_etc1_npot_;
     70 }
     71 
     72 }  // namespace content
     73