Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: cc/layers/ui_resource_layer.cc

Issue 664173002: Prevent recreation of UI resource holder when created with resource ID (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: adding SetPersistentUIResourceID Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« cc/layers/ui_resource_layer.h ('K') | « cc/layers/ui_resource_layer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/layers/ui_resource_layer.h" 5 #include "cc/layers/ui_resource_layer.h"
6 6
7 #include "cc/layers/ui_resource_layer_impl.h" 7 #include "cc/layers/ui_resource_layer_impl.h"
8 #include "cc/resources/prioritized_resource.h" 8 #include "cc/resources/prioritized_resource.h"
9 #include "cc/resources/resource_update.h" 9 #include "cc/resources/resource_update.h"
10 #include "cc/resources/resource_update_queue.h" 10 #include "cc/resources/resource_update_queue.h"
11 #include "cc/resources/scoped_ui_resource.h" 11 #include "cc/resources/scoped_ui_resource.h"
12 #include "cc/resources/ui_resource_bitmap.h" 12 #include "cc/resources/ui_resource_bitmap.h"
13 #include "cc/trees/layer_tree_host.h" 13 #include "cc/trees/layer_tree_host.h"
14 14
15 namespace cc { 15 namespace cc {
16 16
17 17
18 namespace { 18 namespace {
19 19
20 class ScopedUIResourceHolder : public UIResourceLayer::UIResourceHolder { 20 class ScopedUIResourceHolder : public UIResourceLayer::UIResourceHolder {
21 public: 21 public:
22 static scoped_ptr<ScopedUIResourceHolder> Create(LayerTreeHost* host, 22 static scoped_ptr<ScopedUIResourceHolder> Create(LayerTreeHost* host,
23 const SkBitmap& skbitmap) { 23 const SkBitmap& skbitmap) {
24 return make_scoped_ptr(new ScopedUIResourceHolder(host, skbitmap)); 24 return make_scoped_ptr(new ScopedUIResourceHolder(host, skbitmap));
25 } 25 }
26 UIResourceId id() override { return resource_->id(); } 26 UIResourceId id() override { return resource_->id(); }
27 27
28 bool NeedsRecreation() override { return false; }
29
28 private: 30 private:
29 ScopedUIResourceHolder(LayerTreeHost* host, const SkBitmap& skbitmap) { 31 ScopedUIResourceHolder(LayerTreeHost* host, const SkBitmap& skbitmap) {
30 resource_ = ScopedUIResource::Create(host, UIResourceBitmap(skbitmap)); 32 resource_ = ScopedUIResource::Create(host, UIResourceBitmap(skbitmap));
31 } 33 }
32 34
33 scoped_ptr<ScopedUIResource> resource_; 35 scoped_ptr<ScopedUIResource> resource_;
34 }; 36 };
35 37
36 class SharedUIResourceHolder : public UIResourceLayer::UIResourceHolder { 38 class SharedUIResourceHolder : public UIResourceLayer::UIResourceHolder {
37 public: 39 public:
38 static scoped_ptr<SharedUIResourceHolder> Create(UIResourceId id) { 40 static scoped_ptr<SharedUIResourceHolder> Create(UIResourceId id,
39 return make_scoped_ptr(new SharedUIResourceHolder(id)); 41 bool is_persistent) {
42 return make_scoped_ptr(new SharedUIResourceHolder(id, is_persistent));
40 } 43 }
41 44
42 UIResourceId id() override { return id_; } 45 UIResourceId id() override { return id_; }
43 46
47 bool NeedsRecreation() override { return !is_persistent_; }
48
44 private: 49 private:
45 explicit SharedUIResourceHolder(UIResourceId id) : id_(id) {} 50 SharedUIResourceHolder(UIResourceId id, bool is_persistent)
51 : id_(id), is_persistent_(is_persistent) {}
46 52
47 UIResourceId id_; 53 UIResourceId id_;
54 bool is_persistent_;
48 }; 55 };
49 56
50 } // anonymous namespace 57 } // anonymous namespace
51 58
52 UIResourceLayer::UIResourceHolder::~UIResourceHolder() {} 59 UIResourceLayer::UIResourceHolder::~UIResourceHolder() {}
53 60
54 scoped_refptr<UIResourceLayer> UIResourceLayer::Create() { 61 scoped_refptr<UIResourceLayer> UIResourceLayer::Create() {
55 return make_scoped_refptr(new UIResourceLayer()); 62 return make_scoped_refptr(new UIResourceLayer());
56 } 63 }
57 64
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 if (host == layer_tree_host()) 112 if (host == layer_tree_host())
106 return; 113 return;
107 114
108 Layer::SetLayerTreeHost(host); 115 Layer::SetLayerTreeHost(host);
109 116
110 // Recreate the resource hold against the new LTH. 117 // Recreate the resource hold against the new LTH.
111 RecreateUIResourceHolder(); 118 RecreateUIResourceHolder();
112 } 119 }
113 120
114 void UIResourceLayer::RecreateUIResourceHolder() { 121 void UIResourceLayer::RecreateUIResourceHolder() {
115 ui_resource_holder_ = nullptr;
116 if (layer_tree_host() && !bitmap_.empty()) { 122 if (layer_tree_host() && !bitmap_.empty()) {
117 ui_resource_holder_ = 123 ui_resource_holder_ =
118 ScopedUIResourceHolder::Create(layer_tree_host(), bitmap_); 124 ScopedUIResourceHolder::Create(layer_tree_host(), bitmap_);
125 } else if (ui_resource_holder_ && !ui_resource_holder_->NeedsRecreation()) {
126 ui_resource_holder_ = nullptr;
119 } 127 }
120 UpdateDrawsContent(HasDrawableContent()); 128 UpdateDrawsContent(HasDrawableContent());
121 } 129 }
122 130
123 void UIResourceLayer::SetBitmap(const SkBitmap& skbitmap) { 131 void UIResourceLayer::SetBitmap(const SkBitmap& skbitmap) {
124 bitmap_ = skbitmap; 132 bitmap_ = skbitmap;
125 133
126 RecreateUIResourceHolder(); 134 RecreateUIResourceHolder();
127 SetNeedsCommit(); 135 SetNeedsCommit();
128 } 136 }
129 137
130 void UIResourceLayer::SetUIResourceId(UIResourceId resource_id) { 138 void UIResourceLayer::SetUIResourceId(UIResourceId resource_id) {
139 SetUIResourceIdInternal(resource_id, false);
140 }
141
142 void UIResourceLayer::SetPersistentUIResourceId(UIResourceId resource_id) {
143 SetUIResourceIdInternal(resource_id, true);
144 }
145
146 void UIResourceLayer::SetUIResourceIdInternal(UIResourceId resource_id,
147 bool is_persistent) {
131 if (ui_resource_holder_ && ui_resource_holder_->id() == resource_id) 148 if (ui_resource_holder_ && ui_resource_holder_->id() == resource_id)
132 return; 149 return;
133 150
134 if (resource_id) 151 if (resource_id)
135 ui_resource_holder_ = SharedUIResourceHolder::Create(resource_id); 152 ui_resource_holder_ =
153 SharedUIResourceHolder::Create(resource_id, is_persistent);
136 else 154 else
137 ui_resource_holder_ = nullptr; 155 ui_resource_holder_ = nullptr;
138 156
139 UpdateDrawsContent(HasDrawableContent()); 157 UpdateDrawsContent(HasDrawableContent());
140 SetNeedsCommit(); 158 SetNeedsCommit();
141 } 159 }
142 160
143 bool UIResourceLayer::HasDrawableContent() const { 161 bool UIResourceLayer::HasDrawableContent() const {
144 return ui_resource_holder_ && ui_resource_holder_->id() && 162 return ui_resource_holder_ && ui_resource_holder_->id() &&
145 Layer::HasDrawableContent(); 163 Layer::HasDrawableContent();
(...skipping 11 matching lines...) Expand all
157 gfx::Size image_size = 175 gfx::Size image_size =
158 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id()); 176 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id());
159 layer_impl->SetUIResourceId(ui_resource_holder_->id()); 177 layer_impl->SetUIResourceId(ui_resource_holder_->id());
160 layer_impl->SetImageBounds(image_size); 178 layer_impl->SetImageBounds(image_size);
161 layer_impl->SetUV(uv_top_left_, uv_bottom_right_); 179 layer_impl->SetUV(uv_top_left_, uv_bottom_right_);
162 layer_impl->SetVertexOpacity(vertex_opacity_); 180 layer_impl->SetVertexOpacity(vertex_opacity_);
163 } 181 }
164 } 182 }
165 183
166 } // namespace cc 184 } // namespace cc
OLDNEW
« cc/layers/ui_resource_layer.h ('K') | « cc/layers/ui_resource_layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698