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

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: updated dchecks in ui_resource_bitmap 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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 page_scale_factor_ = page_scale_factor; 653 page_scale_factor_ = page_scale_factor;
631 min_page_scale_factor_ = min_page_scale_factor; 654 min_page_scale_factor_ = min_page_scale_factor;
632 max_page_scale_factor_ = max_page_scale_factor; 655 max_page_scale_factor_ = max_page_scale_factor;
633 SetNeedsCommit(); 656 SetNeedsCommit();
634 } 657 }
635 658
636 void LayerTreeHost::SetOverhangBitmap(const SkBitmap& bitmap) { 659 void LayerTreeHost::SetOverhangBitmap(const SkBitmap& bitmap) {
637 DCHECK(bitmap.width() && bitmap.height()); 660 DCHECK(bitmap.width() && bitmap.height());
638 DCHECK_EQ(bitmap.bytesPerPixel(), 4); 661 DCHECK_EQ(bitmap.bytesPerPixel(), 4);
639 662
640 scoped_refptr<UIResourceBitmap> overhang_ui_bitmap(UIResourceBitmap::Create( 663 SkBitmap bitmap_copy;
641 new uint8_t[bitmap.width() * bitmap.height() * bitmap.bytesPerPixel()], 664 if (bitmap.isImmutable()) {
642 UIResourceBitmap::RGBA8, 665 bitmap_copy = bitmap;
643 UIResourceBitmap::REPEAT, 666 } else {
644 gfx::Size(bitmap.width(), bitmap.height()))); 667 bitmap.copyTo(&bitmap_copy, bitmap.config());
645 bitmap.copyPixelsTo( 668 bitmap_copy.setImmutable();
646 overhang_ui_bitmap->GetPixels(), 669 }
647 bitmap.width() * bitmap.height() * bitmap.bytesPerPixel(), 670
648 bitmap.width() * bitmap.bytesPerPixel()); 671 overhang_ui_resource_ = ScopedUIResource::Create(
649 overhang_ui_resource_ = ScopedUIResource::Create(this, overhang_ui_bitmap); 672 this, UIResourceBitmap(bitmap_copy, UIResourceBitmap::REPEAT));
650 } 673 }
651 674
652 void LayerTreeHost::SetVisible(bool visible) { 675 void LayerTreeHost::SetVisible(bool visible) {
653 if (visible_ == visible) 676 if (visible_ == visible)
654 return; 677 return;
655 visible_ = visible; 678 visible_ = visible;
656 if (!visible) 679 if (!visible)
657 ReduceMemoryUsage(); 680 ReduceMemoryUsage();
658 proxy_->SetVisible(visible); 681 proxy_->SetVisible(visible);
659 } 682 }
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 ++iter) { 1165 ++iter) {
1143 (*iter).second->Animate(monotonic_time); 1166 (*iter).second->Animate(monotonic_time);
1144 bool start_ready_animations = true; 1167 bool start_ready_animations = true;
1145 (*iter).second->UpdateState(start_ready_animations, NULL); 1168 (*iter).second->UpdateState(start_ready_animations, NULL);
1146 } 1169 }
1147 } 1170 }
1148 1171
1149 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { 1172 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
1150 DCHECK(client); 1173 DCHECK(client);
1151 1174
1152 UIResourceRequest request; 1175 UIResourceId next_id = next_ui_resource_id_++;
1153 bool resource_lost = false; 1176 DCHECK(ui_resource_client_map_.find(next_id) ==
1154 request.type = UIResourceRequest::UIResourceCreate;
1155 request.id = next_ui_resource_id_++;
1156
1157 DCHECK(ui_resource_client_map_.find(request.id) ==
1158 ui_resource_client_map_.end()); 1177 ui_resource_client_map_.end());
1159 1178
1160 request.bitmap = client->GetBitmap(request.id, resource_lost); 1179 bool resource_lost = false;
1180 UIResourceRequest request(UIResourceRequest::UIResourceCreate,
1181 next_id,
1182 client->GetBitmap(next_id, resource_lost));
1161 ui_resource_request_queue_.push_back(request); 1183 ui_resource_request_queue_.push_back(request);
1162 ui_resource_client_map_[request.id] = client; 1184
1163 return request.id; 1185 UIResourceClientData data;
1186 data.client = client;
1187 data.size = request.GetBitmap().GetSize();
1188
1189 ui_resource_client_map_[request.GetId()] = data;
1190 return request.GetId();
1164 } 1191 }
1165 1192
1166 // Deletes a UI resource. May safely be called more than once. 1193 // Deletes a UI resource. May safely be called more than once.
1167 void LayerTreeHost::DeleteUIResource(UIResourceId uid) { 1194 void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
1168 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid); 1195 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
1169 if (iter == ui_resource_client_map_.end()) 1196 if (iter == ui_resource_client_map_.end())
1170 return; 1197 return;
1171 1198
1172 UIResourceRequest request; 1199 UIResourceRequest request(UIResourceRequest::UIResourceDelete, uid);
1173 request.type = UIResourceRequest::UIResourceDelete;
1174 request.id = uid;
1175 ui_resource_request_queue_.push_back(request); 1200 ui_resource_request_queue_.push_back(request);
1176 ui_resource_client_map_.erase(uid); 1201 ui_resource_client_map_.erase(iter);
1202 }
1203
1204 // Returns the size of a resource given its id.
1205 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
1206 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
1207 if (iter == ui_resource_client_map_.end())
1208 return gfx::Size();
1209
1210 const UIResourceClientData& data = iter->second;
1211 return data.size;
1177 } 1212 }
1178 1213
1179 void LayerTreeHost::RecreateUIResources(bool resource_lost) { 1214 void LayerTreeHost::RecreateUIResources(bool resource_lost) {
1180 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); 1215 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
1181 iter != ui_resource_client_map_.end(); 1216 iter != ui_resource_client_map_.end();
1182 ++iter) { 1217 ++iter) {
1183 UIResourceId uid = iter->first; 1218 UIResourceId uid = iter->first;
1184 UIResourceRequest request; 1219 const UIResourceClientData& data = iter->second;
1185 request.type = UIResourceRequest::UIResourceCreate; 1220 UIResourceRequest request(UIResourceRequest::UIResourceCreate,
1186 request.id = uid; 1221 uid,
1187 request.bitmap = iter->second->GetBitmap(uid, resource_lost); 1222 data.client->GetBitmap(uid, resource_lost));
1188 DCHECK(request.bitmap.get());
1189 ui_resource_request_queue_.push_back(request); 1223 ui_resource_request_queue_.push_back(request);
1190 } 1224 }
1191 } 1225 }
1192 1226
1193 } // namespace cc 1227 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698