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

Unified 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: rebased 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 8afb592766da19a75bec6b5b918a563773c04c7b..7c06b96cfb72cc16996d792ddf75c57127e8ef63 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -61,8 +61,31 @@ RendererCapabilities::RendererCapabilities()
RendererCapabilities::~RendererCapabilities() {}
-UIResourceRequest::UIResourceRequest()
- : type(UIResourceInvalidRequest), id(0), bitmap(NULL) {}
+UIResourceRequest::UIResourceRequest(UIResourceRequestType type,
+ UIResourceId id)
+ : type_(type), id_(id) {}
+
+UIResourceRequest::UIResourceRequest(UIResourceRequestType type,
+ UIResourceId id,
+ const UIResourceBitmap& bitmap)
+ : type_(type), id_(id), bitmap_(new UIResourceBitmap(bitmap)) {}
+
+UIResourceRequest::UIResourceRequest(const UIResourceRequest& request) {
+ (*this) = request;
+}
+
+UIResourceRequest& UIResourceRequest::operator=(
+ const UIResourceRequest& request) {
+ type_ = request.type_;
+ id_ = request.id_;
+ if (request.bitmap_) {
+ bitmap_ = make_scoped_ptr(new UIResourceBitmap(*request.bitmap_.get()));
+ } else {
+ bitmap_.reset();
+ }
+
+ return *this;
+}
UIResourceRequest::~UIResourceRequest() {}
@@ -389,7 +412,7 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) {
if (overhang_ui_resource_) {
host_impl->SetOverhangUIResource(
overhang_ui_resource_->id(),
- overhang_ui_resource_->GetSize());
+ GetUIResourceSize(overhang_ui_resource_->id()));
}
DCHECK(!sync_tree->ViewportSizeInvalid());
@@ -647,16 +670,16 @@ void LayerTreeHost::SetOverhangBitmap(const SkBitmap& bitmap) {
DCHECK(bitmap.width() && bitmap.height());
DCHECK_EQ(bitmap.bytesPerPixel(), 4);
- scoped_refptr<UIResourceBitmap> overhang_ui_bitmap(UIResourceBitmap::Create(
- new uint8_t[bitmap.width() * bitmap.height() * bitmap.bytesPerPixel()],
- UIResourceBitmap::RGBA8,
- UIResourceBitmap::REPEAT,
- gfx::Size(bitmap.width(), bitmap.height())));
- bitmap.copyPixelsTo(
- overhang_ui_bitmap->GetPixels(),
- bitmap.width() * bitmap.height() * bitmap.bytesPerPixel(),
- bitmap.width() * bitmap.bytesPerPixel());
- overhang_ui_resource_ = ScopedUIResource::Create(this, overhang_ui_bitmap);
+ SkBitmap bitmap_copy;
+ if (bitmap.isImmutable()) {
+ bitmap_copy = bitmap;
+ } else {
+ bitmap.copyTo(&bitmap_copy, bitmap.config());
+ bitmap_copy.setImmutable();
+ }
+
+ overhang_ui_resource_ = ScopedUIResource::Create(
+ this, UIResourceBitmap(bitmap_copy, UIResourceBitmap::REPEAT));
}
void LayerTreeHost::SetVisible(bool visible) {
@@ -1162,18 +1185,22 @@ void LayerTreeHost::AnimateLayers(base::TimeTicks time) {
UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
DCHECK(client);
- UIResourceRequest request;
- bool resource_lost = false;
- request.type = UIResourceRequest::UIResourceCreate;
- request.id = next_ui_resource_id_++;
-
- DCHECK(ui_resource_client_map_.find(request.id) ==
+ UIResourceId next_id = next_ui_resource_id_++;
+ DCHECK(ui_resource_client_map_.find(next_id) ==
ui_resource_client_map_.end());
- request.bitmap = client->GetBitmap(request.id, resource_lost);
+ bool resource_lost = false;
+ UIResourceRequest request(UIResourceRequest::UIResourceCreate,
+ next_id,
+ client->GetBitmap(next_id, resource_lost));
ui_resource_request_queue_.push_back(request);
- ui_resource_client_map_[request.id] = client;
- return request.id;
+
+ UIResourceClientData data;
+ data.client = client;
+ data.size = request.GetBitmap().GetSize();
+
+ ui_resource_client_map_[request.GetId()] = data;
+ return request.GetId();
}
// Deletes a UI resource. May safely be called more than once.
@@ -1182,11 +1209,9 @@ void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
if (iter == ui_resource_client_map_.end())
return;
- UIResourceRequest request;
- request.type = UIResourceRequest::UIResourceDelete;
- request.id = uid;
+ UIResourceRequest request(UIResourceRequest::UIResourceDelete, uid);
ui_resource_request_queue_.push_back(request);
- ui_resource_client_map_.erase(uid);
+ ui_resource_client_map_.erase(iter);
}
void LayerTreeHost::RecreateUIResources() {
@@ -1194,16 +1219,25 @@ void LayerTreeHost::RecreateUIResources() {
iter != ui_resource_client_map_.end();
++iter) {
UIResourceId uid = iter->first;
- UIResourceRequest request;
- request.type = UIResourceRequest::UIResourceCreate;
- request.id = uid;
+ const UIResourceClientData& data = iter->second;
bool resource_lost = true;
- request.bitmap = iter->second->GetBitmap(uid, resource_lost);
- DCHECK(request.bitmap.get());
+ UIResourceRequest request(UIResourceRequest::UIResourceCreate,
+ uid,
+ data.client->GetBitmap(uid, resource_lost));
ui_resource_request_queue_.push_back(request);
}
}
+// Returns the size of a resource given its id.
+gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
+ UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
+ if (iter == ui_resource_client_map_.end())
+ return gfx::Size();
+
+ const UIResourceClientData& data = iter->second;
+ return data.size;
+}
+
void LayerTreeHost::RegisterViewportLayers(
scoped_refptr<Layer> page_scale_layer,
scoped_refptr<Layer> inner_viewport_scroll_layer,
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698