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

Side by Side Diff: cc/trees/layer_tree_host.cc

Issue 22870016: Update the nine patch layer to use UI resources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ccameron's fix for exisiting nine-patch uses 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
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 allow_partial_texture_updates(false), 54 allow_partial_texture_updates(false),
55 using_offscreen_context3d(false), 55 using_offscreen_context3d(false),
56 max_texture_size(0), 56 max_texture_size(0),
57 avoid_pow2_textures(false), 57 avoid_pow2_textures(false),
58 using_map_image(false), 58 using_map_image(false),
59 using_shared_memory_resources(false), 59 using_shared_memory_resources(false),
60 using_discard_framebuffer(false) {} 60 using_discard_framebuffer(false) {}
61 61
62 RendererCapabilities::~RendererCapabilities() {} 62 RendererCapabilities::~RendererCapabilities() {}
63 63
64 UIResourceRequest::UIResourceRequest() 64 UIResourceRequest::UIResourceRequest(UIResourceRequestType type,
65 : type(UIResourceInvalidRequest), id(0), bitmap(NULL) {} 65 UIResourceId id)
66 : type_(type), id_(id) {}
67
68 UIResourceRequest::UIResourceRequest(UIResourceRequestType type,
69 UIResourceId id,
70 const UIResourceBitmap& bitmap)
71 : type_(type), id_(id), bitmap_(new UIResourceBitmap(bitmap)) {}
72
73 UIResourceRequest::UIResourceRequest(const UIResourceRequest& request) {
74 (*this) = request;
75 }
76
77 UIResourceRequest& UIResourceRequest::operator=(
78 const UIResourceRequest& request) {
79 type_ = request.type_;
80 id_ = request.id_;
81 if (request.bitmap_) {
82 bitmap_ = make_scoped_ptr(new UIResourceBitmap(*request.bitmap_.get()));
83 } else {
84 bitmap_.reset();
85 }
86
87 return *this;
88 }
66 89
67 UIResourceRequest::~UIResourceRequest() {} 90 UIResourceRequest::~UIResourceRequest() {}
68 91
69 bool LayerTreeHost::AnyLayerTreeHostInstanceExists() { 92 bool LayerTreeHost::AnyLayerTreeHostInstanceExists() {
70 return s_num_layer_tree_instances > 0; 93 return s_num_layer_tree_instances > 0;
71 } 94 }
72 95
73 scoped_ptr<LayerTreeHost> LayerTreeHost::Create( 96 scoped_ptr<LayerTreeHost> LayerTreeHost::Create(
74 LayerTreeHostClient* client, 97 LayerTreeHostClient* client,
75 const LayerTreeSettings& settings, 98 const LayerTreeSettings& settings,
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 sync_tree->set_ui_resource_request_queue(ui_resource_request_queue_); 392 sync_tree->set_ui_resource_request_queue(ui_resource_request_queue_);
370 ui_resource_request_queue_.clear(); 393 ui_resource_request_queue_.clear();
371 // Process any ui resource requests in the queue. For impl-side-painting, 394 // Process any ui resource requests in the queue. For impl-side-painting,
372 // the queue is processed in LayerTreeHostImpl::ActivatePendingTree. 395 // the queue is processed in LayerTreeHostImpl::ActivatePendingTree.
373 if (!settings_.impl_side_painting) 396 if (!settings_.impl_side_painting)
374 sync_tree->ProcessUIResourceRequestQueue(); 397 sync_tree->ProcessUIResourceRequestQueue();
375 } 398 }
376 if (overhang_ui_resource_) { 399 if (overhang_ui_resource_) {
377 host_impl->SetOverhangUIResource( 400 host_impl->SetOverhangUIResource(
378 overhang_ui_resource_->id(), 401 overhang_ui_resource_->id(),
379 overhang_ui_resource_->GetSize()); 402 GetUIResourceSize(overhang_ui_resource_->id()));
380 } 403 }
381 404
382 DCHECK(!sync_tree->ViewportSizeInvalid()); 405 DCHECK(!sync_tree->ViewportSizeInvalid());
383 406
384 if (new_impl_tree_has_no_evicted_resources) { 407 if (new_impl_tree_has_no_evicted_resources) {
385 if (sync_tree->ContentsTexturesPurged()) 408 if (sync_tree->ContentsTexturesPurged())
386 sync_tree->ResetContentsTexturesPurged(); 409 sync_tree->ResetContentsTexturesPurged();
387 } 410 }
388 411
389 if (!settings_.impl_side_painting) { 412 if (!settings_.impl_side_painting) {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 page_scale_factor_ = page_scale_factor; 650 page_scale_factor_ = page_scale_factor;
628 min_page_scale_factor_ = min_page_scale_factor; 651 min_page_scale_factor_ = min_page_scale_factor;
629 max_page_scale_factor_ = max_page_scale_factor; 652 max_page_scale_factor_ = max_page_scale_factor;
630 SetNeedsCommit(); 653 SetNeedsCommit();
631 } 654 }
632 655
633 void LayerTreeHost::SetOverhangBitmap(const SkBitmap& bitmap) { 656 void LayerTreeHost::SetOverhangBitmap(const SkBitmap& bitmap) {
634 DCHECK(bitmap.width() && bitmap.height()); 657 DCHECK(bitmap.width() && bitmap.height());
635 DCHECK_EQ(bitmap.bytesPerPixel(), 4); 658 DCHECK_EQ(bitmap.bytesPerPixel(), 4);
636 659
637 scoped_refptr<UIResourceBitmap> overhang_ui_bitmap(UIResourceBitmap::Create( 660 SkBitmap bitmap_copy;
638 new uint8_t[bitmap.width() * bitmap.height() * bitmap.bytesPerPixel()], 661 if (bitmap.isImmutable()) {
639 UIResourceBitmap::RGBA8, 662 bitmap_copy = bitmap;
640 UIResourceBitmap::REPEAT, 663 } else {
641 gfx::Size(bitmap.width(), bitmap.height()))); 664 bitmap.copyTo(&bitmap_copy, bitmap.config());
642 bitmap.copyPixelsTo( 665 bitmap_copy.setImmutable();
643 overhang_ui_bitmap->GetPixels(), 666 }
644 bitmap.width() * bitmap.height() * bitmap.bytesPerPixel(), 667
645 bitmap.width() * bitmap.bytesPerPixel()); 668 overhang_ui_resource_ = ScopedUIResource::Create(
646 overhang_ui_resource_ = ScopedUIResource::Create(this, overhang_ui_bitmap); 669 this, UIResourceBitmap(bitmap_copy, UIResourceBitmap::REPEAT));
647 } 670 }
648 671
649 void LayerTreeHost::SetVisible(bool visible) { 672 void LayerTreeHost::SetVisible(bool visible) {
650 if (visible_ == visible) 673 if (visible_ == visible)
651 return; 674 return;
652 visible_ = visible; 675 visible_ = visible;
653 if (!visible) 676 if (!visible)
654 ReduceMemoryUsage(); 677 ReduceMemoryUsage();
655 proxy_->SetVisible(visible); 678 proxy_->SetVisible(visible);
656 } 679 }
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 ++iter) { 1162 ++iter) {
1140 (*iter).second->Animate(monotonic_time); 1163 (*iter).second->Animate(monotonic_time);
1141 bool start_ready_animations = true; 1164 bool start_ready_animations = true;
1142 (*iter).second->UpdateState(start_ready_animations, NULL); 1165 (*iter).second->UpdateState(start_ready_animations, NULL);
1143 } 1166 }
1144 } 1167 }
1145 1168
1146 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { 1169 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
1147 DCHECK(client); 1170 DCHECK(client);
1148 1171
1149 UIResourceRequest request; 1172 UIResourceId next_id = next_ui_resource_id_++;
1150 bool resource_lost = false; 1173 DCHECK(ui_resource_client_map_.find(next_id) ==
1151 request.type = UIResourceRequest::UIResourceCreate;
1152 request.id = next_ui_resource_id_++;
1153
1154 DCHECK(ui_resource_client_map_.find(request.id) ==
1155 ui_resource_client_map_.end()); 1174 ui_resource_client_map_.end());
1156 1175
1157 request.bitmap = client->GetBitmap(request.id, resource_lost); 1176 bool resource_lost = false;
1177 UIResourceRequest request(UIResourceRequest::UIResourceCreate,
1178 next_id,
1179 client->GetBitmap(next_id, resource_lost));
1158 ui_resource_request_queue_.push_back(request); 1180 ui_resource_request_queue_.push_back(request);
1159 ui_resource_client_map_[request.id] = client; 1181
1160 return request.id; 1182 UIResourceClientData data;
1183 data.client = client;
1184 data.size = request.GetBitmap().GetSize();
1185
1186 ui_resource_client_map_[request.GetId()] = data;
1187 return request.GetId();
1161 } 1188 }
1162 1189
1163 // Deletes a UI resource. May safely be called more than once. 1190 // Deletes a UI resource. May safely be called more than once.
1164 void LayerTreeHost::DeleteUIResource(UIResourceId uid) { 1191 void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
1165 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid); 1192 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
1166 if (iter == ui_resource_client_map_.end()) 1193 if (iter == ui_resource_client_map_.end())
1167 return; 1194 return;
1168 1195
1169 UIResourceRequest request; 1196 UIResourceRequest request(UIResourceRequest::UIResourceDelete, uid);
1170 request.type = UIResourceRequest::UIResourceDelete;
1171 request.id = uid;
1172 ui_resource_request_queue_.push_back(request); 1197 ui_resource_request_queue_.push_back(request);
1173 ui_resource_client_map_.erase(uid); 1198 ui_resource_client_map_.erase(iter);
1174 } 1199 }
1175 1200
1176 void LayerTreeHost::RecreateUIResources() { 1201 void LayerTreeHost::RecreateUIResources() {
1177 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); 1202 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
1178 iter != ui_resource_client_map_.end(); 1203 iter != ui_resource_client_map_.end();
1179 ++iter) { 1204 ++iter) {
1180 UIResourceId uid = iter->first; 1205 UIResourceId uid = iter->first;
1181 UIResourceRequest request; 1206 const UIResourceClientData& data = iter->second;
1182 request.type = UIResourceRequest::UIResourceCreate;
1183 request.id = uid;
1184 bool resource_lost = true; 1207 bool resource_lost = true;
1185 request.bitmap = iter->second->GetBitmap(uid, resource_lost); 1208 UIResourceRequest request(UIResourceRequest::UIResourceCreate,
1186 DCHECK(request.bitmap.get()); 1209 uid,
1210 data.client->GetBitmap(uid, resource_lost));
1187 ui_resource_request_queue_.push_back(request); 1211 ui_resource_request_queue_.push_back(request);
1188 } 1212 }
1189 } 1213 }
1190 1214
1215 // Returns the size of a resource given its id.
1216 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
1217 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
1218 if (iter == ui_resource_client_map_.end())
1219 return gfx::Size();
1220
1221 const UIResourceClientData& data = iter->second;
1222 return data.size;
1223 }
1224
1191 } // namespace cc 1225 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698