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

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: added unit test, going back to patch #5 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
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 return make_scoped_ptr(new SharedUIResourceHolder(id));
40 } 42 }
41 43
42 UIResourceId id() override { return id_; } 44 UIResourceId id() override { return id_; }
43 45
46 bool NeedsRecreation() override { return true; }
47
44 private: 48 private:
45 explicit SharedUIResourceHolder(UIResourceId id) : id_(id) {} 49 explicit SharedUIResourceHolder(UIResourceId id) : id_(id) {}
46 50
47 UIResourceId id_; 51 UIResourceId id_;
48 }; 52 };
49 53
50 } // anonymous namespace 54 } // anonymous namespace
51 55
52 UIResourceLayer::UIResourceHolder::~UIResourceHolder() {} 56 UIResourceLayer::UIResourceHolder::~UIResourceHolder() {}
53 57
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 if (host == layer_tree_host()) 109 if (host == layer_tree_host())
106 return; 110 return;
107 111
108 Layer::SetLayerTreeHost(host); 112 Layer::SetLayerTreeHost(host);
109 113
110 // Recreate the resource hold against the new LTH. 114 // Recreate the resource hold against the new LTH.
111 RecreateUIResourceHolder(); 115 RecreateUIResourceHolder();
112 } 116 }
113 117
114 void UIResourceLayer::RecreateUIResourceHolder() { 118 void UIResourceLayer::RecreateUIResourceHolder() {
115 ui_resource_holder_ = nullptr;
116 if (layer_tree_host() && !bitmap_.empty()) { 119 if (layer_tree_host() && !bitmap_.empty()) {
117 ui_resource_holder_ = 120 ui_resource_holder_ =
118 ScopedUIResourceHolder::Create(layer_tree_host(), bitmap_); 121 ScopedUIResourceHolder::Create(layer_tree_host(), bitmap_);
122 } else if (ui_resource_holder_ && !ui_resource_holder_->NeedsRecreation()) {
danakj 2014/11/20 16:38:08 I think we could possibly make this simpler to fol
Changwan Ryu 2014/11/20 20:52:26 I'm not sure I'm following you correctly, but I'm
danakj 2014/11/20 20:56:04 You only have a bitmap_ != null if you called SetB
Changwan Ryu 2014/11/20 21:29:40 How about now?
123 ui_resource_holder_ = nullptr;
119 } 124 }
120 UpdateDrawsContent(HasDrawableContent()); 125 UpdateDrawsContent(HasDrawableContent());
121 } 126 }
122 127
123 void UIResourceLayer::SetBitmap(const SkBitmap& skbitmap) { 128 void UIResourceLayer::SetBitmap(const SkBitmap& skbitmap) {
124 bitmap_ = skbitmap; 129 bitmap_ = skbitmap;
125 130
126 RecreateUIResourceHolder(); 131 RecreateUIResourceHolder();
127 SetNeedsCommit(); 132 SetNeedsCommit();
128 } 133 }
129 134
130 void UIResourceLayer::SetUIResourceId(UIResourceId resource_id) { 135 void UIResourceLayer::SetUIResourceId(UIResourceId resource_id) {
131 if (ui_resource_holder_ && ui_resource_holder_->id() == resource_id) 136 if (ui_resource_holder_ && ui_resource_holder_->id() == resource_id)
132 return; 137 return;
133 138
134 if (resource_id) 139 if (resource_id)
135 ui_resource_holder_ = SharedUIResourceHolder::Create(resource_id); 140 ui_resource_holder_ = SharedUIResourceHolder::Create(resource_id);
136 else 141 else
137 ui_resource_holder_ = nullptr; 142 ui_resource_holder_ = nullptr;
138 143
139 UpdateDrawsContent(HasDrawableContent()); 144 UpdateDrawsContent(HasDrawableContent());
140 SetNeedsCommit(); 145 SetNeedsCommit();
141 } 146 }
142 147
148 UIResourceId UIResourceLayer::GetUIResourceId() {
149 if (ui_resource_holder_)
150 return ui_resource_holder_->id();
151 return 0;
152 }
153
143 bool UIResourceLayer::HasDrawableContent() const { 154 bool UIResourceLayer::HasDrawableContent() const {
144 return ui_resource_holder_ && ui_resource_holder_->id() && 155 return ui_resource_holder_ && ui_resource_holder_->id() &&
145 Layer::HasDrawableContent(); 156 Layer::HasDrawableContent();
146 } 157 }
147 158
148 void UIResourceLayer::PushPropertiesTo(LayerImpl* layer) { 159 void UIResourceLayer::PushPropertiesTo(LayerImpl* layer) {
149 Layer::PushPropertiesTo(layer); 160 Layer::PushPropertiesTo(layer);
150 UIResourceLayerImpl* layer_impl = static_cast<UIResourceLayerImpl*>(layer); 161 UIResourceLayerImpl* layer_impl = static_cast<UIResourceLayerImpl*>(layer);
151 162
152 if (!ui_resource_holder_) { 163 if (!ui_resource_holder_) {
153 layer_impl->SetUIResourceId(0); 164 layer_impl->SetUIResourceId(0);
154 } else { 165 } else {
155 DCHECK(layer_tree_host()); 166 DCHECK(layer_tree_host());
156 167
157 gfx::Size image_size = 168 gfx::Size image_size =
158 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id()); 169 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id());
159 layer_impl->SetUIResourceId(ui_resource_holder_->id()); 170 layer_impl->SetUIResourceId(ui_resource_holder_->id());
160 layer_impl->SetImageBounds(image_size); 171 layer_impl->SetImageBounds(image_size);
161 layer_impl->SetUV(uv_top_left_, uv_bottom_right_); 172 layer_impl->SetUV(uv_top_left_, uv_bottom_right_);
162 layer_impl->SetVertexOpacity(vertex_opacity_); 173 layer_impl->SetVertexOpacity(vertex_opacity_);
163 } 174 }
164 } 175 }
165 176
166 } // namespace cc 177 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698