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

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: addressed danakj@'s comments 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
« no previous file with comments | « 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 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/10/31 14:23:35 So when you attach a layer to a LayerTreeHost its
Changwan Ryu 2014/11/06 00:27:27 Hmm.. Let me give you more background: Because we
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 }
(...skipping 28 matching lines...) Expand all
157 gfx::Size image_size = 162 gfx::Size image_size =
158 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id()); 163 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id());
159 layer_impl->SetUIResourceId(ui_resource_holder_->id()); 164 layer_impl->SetUIResourceId(ui_resource_holder_->id());
160 layer_impl->SetImageBounds(image_size); 165 layer_impl->SetImageBounds(image_size);
161 layer_impl->SetUV(uv_top_left_, uv_bottom_right_); 166 layer_impl->SetUV(uv_top_left_, uv_bottom_right_);
162 layer_impl->SetVertexOpacity(vertex_opacity_); 167 layer_impl->SetVertexOpacity(vertex_opacity_);
163 } 168 }
164 } 169 }
165 170
166 } // namespace cc 171 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/ui_resource_layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698