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

Side by Side Diff: trunk/src/cc/layers/nine_patch_layer.cc

Issue 23740010: Revert 223162 "Update the nine patch layer to use UI resources" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 3 months 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 | Annotate | Revision Log
« no previous file with comments | « trunk/src/cc/layers/nine_patch_layer.h ('k') | trunk/src/cc/layers/nine_patch_layer_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/nine_patch_layer.h" 5 #include "cc/layers/nine_patch_layer.h"
6 6
7 #include "cc/layers/nine_patch_layer_impl.h" 7 #include "cc/layers/nine_patch_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"
12 #include "cc/resources/ui_resource_bitmap.h"
13 #include "cc/trees/layer_tree_host.h" 11 #include "cc/trees/layer_tree_host.h"
14 12
15 namespace cc { 13 namespace cc {
16 14
17
18 namespace {
19
20 class ScopedUIResourceHolder : public NinePatchLayer::UIResourceHolder {
21 public:
22 static scoped_ptr<ScopedUIResourceHolder> Create(LayerTreeHost* host,
23 const SkBitmap& skbitmap) {
24 return make_scoped_ptr(new ScopedUIResourceHolder(host, skbitmap));
25 }
26 virtual UIResourceId id() OVERRIDE { return resource_->id(); }
27
28 private:
29 ScopedUIResourceHolder(LayerTreeHost* host, const SkBitmap& skbitmap) {
30 resource_ = ScopedUIResource::Create(host, UIResourceBitmap(skbitmap));
31 }
32
33 scoped_ptr<ScopedUIResource> resource_;
34 };
35
36 class SharedUIResourceHolder : public NinePatchLayer::UIResourceHolder {
37 public:
38 static scoped_ptr<SharedUIResourceHolder> Create(UIResourceId id) {
39 return make_scoped_ptr(new SharedUIResourceHolder(id));
40 }
41
42 virtual UIResourceId id() OVERRIDE { return id_; }
43
44 private:
45 explicit SharedUIResourceHolder(UIResourceId id) : id_(id) {}
46
47 UIResourceId id_;
48 };
49
50 } // anonymous namespace
51
52
53 NinePatchLayer::UIResourceHolder::~UIResourceHolder() {}
54
55 scoped_refptr<NinePatchLayer> NinePatchLayer::Create() { 15 scoped_refptr<NinePatchLayer> NinePatchLayer::Create() {
56 return make_scoped_refptr(new NinePatchLayer()); 16 return make_scoped_refptr(new NinePatchLayer());
57 } 17 }
58 18
59 NinePatchLayer::NinePatchLayer() : fill_center_(false) {} 19 NinePatchLayer::NinePatchLayer()
20 : bitmap_dirty_(false) {}
60 21
61 NinePatchLayer::~NinePatchLayer() {} 22 NinePatchLayer::~NinePatchLayer() {}
62 23
63 scoped_ptr<LayerImpl> NinePatchLayer::CreateLayerImpl( 24 scoped_ptr<LayerImpl> NinePatchLayer::CreateLayerImpl(
64 LayerTreeImpl* tree_impl) { 25 LayerTreeImpl* tree_impl) {
65 return NinePatchLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); 26 return NinePatchLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
66 } 27 }
67 28
68 void NinePatchLayer::SetLayerTreeHost(LayerTreeHost* host) { 29 void NinePatchLayer::SetTexturePriorities(
69 if (host == layer_tree_host()) 30 const PriorityCalculator& priority_calc) {
31 if (resource_ && !resource_->texture()->resource_manager()) {
32 // Release the resource here, as it is no longer tied to a resource manager.
33 resource_.reset();
34 if (!bitmap_.isNull())
35 CreateResource();
36 } else if (bitmap_dirty_ && DrawsContent()) {
37 CreateResource();
38 }
39
40 if (resource_) {
41 resource_->texture()->set_request_priority(
42 PriorityCalculator::UIPriority(true));
43 GLenum texture_format =
44 layer_tree_host()->GetRendererCapabilities().best_texture_format;
45 resource_->texture()->SetDimensions(
46 gfx::Size(bitmap_.width(), bitmap_.height()), texture_format);
47 }
48 }
49
50 void NinePatchLayer::SetBitmap(const SkBitmap& bitmap, gfx::Rect aperture) {
51 bitmap_ = bitmap;
52 image_aperture_ = aperture;
53 bitmap_dirty_ = true;
54 SetNeedsDisplay();
55 }
56
57 bool NinePatchLayer::Update(ResourceUpdateQueue* queue,
58 const OcclusionTracker* occlusion) {
59 bool updated = Layer::Update(queue, occlusion);
60
61 CreateUpdaterIfNeeded();
62
63 if (resource_ &&
64 (bitmap_dirty_ || resource_->texture()->resource_id() == 0)) {
65 gfx::Rect content_rect(0, 0, bitmap_.width(), bitmap_.height());
66 ResourceUpdate upload = ResourceUpdate::Create(resource_->texture(),
67 &bitmap_,
68 content_rect,
69 content_rect,
70 gfx::Vector2d());
71 queue->AppendFullUpload(upload);
72 bitmap_dirty_ = false;
73 updated = true;
74 }
75
76 return updated;
77 }
78
79 void NinePatchLayer::CreateUpdaterIfNeeded() {
80 if (updater_.get())
70 return; 81 return;
71 82
72 Layer::SetLayerTreeHost(host); 83 updater_ = ImageLayerUpdater::Create();
73
74 // Recreate the resource hold against the new LTH.
75 RecreateUIResourceHolder();
76 } 84 }
77 85
78 void NinePatchLayer::RecreateUIResourceHolder() { 86 void NinePatchLayer::CreateResource() {
79 ui_resource_holder_.reset(); 87 DCHECK(!bitmap_.isNull());
80 if (!layer_tree_host() || bitmap_.empty()) 88 CreateUpdaterIfNeeded();
81 return; 89 updater_->SetBitmap(bitmap_);
82 90
83 ui_resource_holder_ = 91 if (!resource_) {
84 ScopedUIResourceHolder::Create(layer_tree_host(), bitmap_); 92 resource_ = updater_->CreateResource(
85 } 93 layer_tree_host()->contents_texture_manager());
86
87 void NinePatchLayer::SetBorder(gfx::Rect border) {
88 if (border == border_)
89 return;
90 border_ = border;
91 SetNeedsCommit();
92 }
93
94 void NinePatchLayer::SetBitmap(const SkBitmap& skbitmap, gfx::Rect aperture) {
95 image_aperture_ = aperture;
96 bitmap_ = skbitmap;
97
98 // TODO(ccameron): Remove this. This provides the default border that was
99 // provided before borders were required to be explicitly provided. Once Blink
100 // fixes its callers to call SetBorder, this can be removed.
101 SetBorder(gfx::Rect(aperture.x(),
102 aperture.y(),
103 skbitmap.width() - aperture.width(),
104 skbitmap.height() - aperture.height()));
105 RecreateUIResourceHolder();
106 SetNeedsCommit();
107 }
108
109 void NinePatchLayer::SetUIResourceId(UIResourceId resource_id,
110 gfx::Rect aperture) {
111 if (ui_resource_holder_ && ui_resource_holder_->id() == resource_id &&
112 image_aperture_ == aperture)
113 return;
114
115 image_aperture_ = aperture;
116 if (resource_id) {
117 ui_resource_holder_ = SharedUIResourceHolder::Create(resource_id);
118 } else {
119 ui_resource_holder_.reset();
120 } 94 }
121
122 SetNeedsCommit();
123 }
124
125 void NinePatchLayer::SetFillCenter(bool fill_center) {
126 if (fill_center_ == fill_center)
127 return;
128
129 fill_center_ = fill_center;
130 SetNeedsCommit();
131 } 95 }
132 96
133 bool NinePatchLayer::DrawsContent() const { 97 bool NinePatchLayer::DrawsContent() const {
134 return ui_resource_holder_ && ui_resource_holder_->id() && 98 bool draws = !bitmap_.isNull() &&
135 Layer::DrawsContent(); 99 Layer::DrawsContent() &&
100 bitmap_.width() &&
101 bitmap_.height();
102 return draws;
136 } 103 }
137 104
138 void NinePatchLayer::PushPropertiesTo(LayerImpl* layer) { 105 void NinePatchLayer::PushPropertiesTo(LayerImpl* layer) {
139 Layer::PushPropertiesTo(layer); 106 Layer::PushPropertiesTo(layer);
140 NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer); 107 NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer);
141 108
142 if (!ui_resource_holder_) { 109 if (resource_) {
143 layer_impl->SetUIResourceId(0); 110 DCHECK(!bitmap_.isNull());
144 } else { 111 layer_impl->SetResourceId(resource_->texture()->resource_id());
145 DCHECK(layer_tree_host()); 112 layer_impl->SetLayout(
113 gfx::Size(bitmap_.width(), bitmap_.height()), image_aperture_);
114 }
146 115
147 gfx::Size image_size = 116 // NinePatchLayer must push properties every commit to make sure
148 layer_tree_host()->GetUIResourceSize(ui_resource_holder_->id()); 117 // NinePatchLayerImpl::resource_id_ is valid.
149 layer_impl->SetUIResourceId(ui_resource_holder_->id()); 118 // http://crbug.com/276482
150 layer_impl->SetLayout(image_size, image_aperture_, border_, fill_center_); 119 needs_push_properties_ = true;
151 }
152 } 120 }
153 121
154 } // namespace cc 122 } // namespace cc
OLDNEW
« no previous file with comments | « trunk/src/cc/layers/nine_patch_layer.h ('k') | trunk/src/cc/layers/nine_patch_layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698