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

Side by Side Diff: cc/layers/texture_layer.cc

Issue 19303003: cc: Remove TextureLayer::SetTextureId and TextureLayer::WillModifyTexture (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wrong base Created 7 years, 5 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 | « cc/layers/texture_layer.h ('k') | cc/layers/texture_layer_unittest.cc » ('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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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/texture_layer.h" 5 #include "cc/layers/texture_layer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "cc/layers/texture_layer_client.h" 10 #include "cc/layers/texture_layer_client.h"
(...skipping 15 matching lines...) Expand all
26 TextureLayer::TextureLayer(TextureLayerClient* client, bool uses_mailbox) 26 TextureLayer::TextureLayer(TextureLayerClient* client, bool uses_mailbox)
27 : Layer(), 27 : Layer(),
28 client_(client), 28 client_(client),
29 uses_mailbox_(uses_mailbox), 29 uses_mailbox_(uses_mailbox),
30 flipped_(true), 30 flipped_(true),
31 uv_top_left_(0.f, 0.f), 31 uv_top_left_(0.f, 0.f),
32 uv_bottom_right_(1.f, 1.f), 32 uv_bottom_right_(1.f, 1.f),
33 premultiplied_alpha_(true), 33 premultiplied_alpha_(true),
34 blend_background_color_(false), 34 blend_background_color_(false),
35 rate_limit_context_(false), 35 rate_limit_context_(false),
36 content_committed_(false), 36 impl_may_draw_client_data_(false),
37 texture_id_(0), 37 texture_id_(0),
38 needs_set_mailbox_(false) { 38 needs_set_mailbox_(false) {
39 vertex_opacity_[0] = 1.0f; 39 vertex_opacity_[0] = 1.0f;
40 vertex_opacity_[1] = 1.0f; 40 vertex_opacity_[1] = 1.0f;
41 vertex_opacity_[2] = 1.0f; 41 vertex_opacity_[2] = 1.0f;
42 vertex_opacity_[3] = 1.0f; 42 vertex_opacity_[3] = 1.0f;
43 } 43 }
44 44
45 TextureLayer::~TextureLayer() { 45 TextureLayer::~TextureLayer() {
46 } 46 }
47 47
48 void TextureLayer::ClearClient() { 48 void TextureLayer::ClearClient() {
49 if (rate_limit_context_ && client_ && layer_tree_host()) 49 if (rate_limit_context_ && client_ && layer_tree_host())
50 layer_tree_host()->StopRateLimiter(client_->Context3d()); 50 layer_tree_host()->StopRateLimiter(client_->Context3d());
51 client_ = NULL; 51 client_ = NULL;
52 if (uses_mailbox_) 52 ClearTexture();
53 }
54
55 void TextureLayer::ClearTexture() {
56 if (impl_may_draw_client_data_) {
57 DCHECK(layer_tree_host());
58 layer_tree_host()->AcquireLayerTextures();
59 impl_may_draw_client_data_ = false;
60 }
61 if (uses_mailbox_) {
53 SetTextureMailbox(TextureMailbox()); 62 SetTextureMailbox(TextureMailbox());
54 else 63 } else {
55 SetTextureId(0); 64 texture_id_ = 0;
65 SetNeedsCommit();
66 }
56 } 67 }
57 68
58 scoped_ptr<LayerImpl> TextureLayer::CreateLayerImpl(LayerTreeImpl* tree_impl) { 69 scoped_ptr<LayerImpl> TextureLayer::CreateLayerImpl(LayerTreeImpl* tree_impl) {
59 return TextureLayerImpl::Create(tree_impl, id(), uses_mailbox_). 70 return TextureLayerImpl::Create(tree_impl, id(), uses_mailbox_).
60 PassAs<LayerImpl>(); 71 PassAs<LayerImpl>();
61 } 72 }
62 73
63 void TextureLayer::SetFlipped(bool flipped) { 74 void TextureLayer::SetFlipped(bool flipped) {
64 if (flipped_ == flipped) 75 if (flipped_ == flipped)
65 return; 76 return;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 SetNeedsCommit(); 120 SetNeedsCommit();
110 } 121 }
111 122
112 void TextureLayer::SetRateLimitContext(bool rate_limit) { 123 void TextureLayer::SetRateLimitContext(bool rate_limit) {
113 if (!rate_limit && rate_limit_context_ && client_ && layer_tree_host()) 124 if (!rate_limit && rate_limit_context_ && client_ && layer_tree_host())
114 layer_tree_host()->StopRateLimiter(client_->Context3d()); 125 layer_tree_host()->StopRateLimiter(client_->Context3d());
115 126
116 rate_limit_context_ = rate_limit; 127 rate_limit_context_ = rate_limit;
117 } 128 }
118 129
119 void TextureLayer::SetTextureId(unsigned id) {
120 DCHECK(!uses_mailbox_);
121 if (texture_id_ == id)
122 return;
123 if (texture_id_ && layer_tree_host())
124 layer_tree_host()->AcquireLayerTextures();
125 texture_id_ = id;
126 SetNeedsCommit();
127 }
128
129 void TextureLayer::SetTextureMailbox(const TextureMailbox& mailbox) { 130 void TextureLayer::SetTextureMailbox(const TextureMailbox& mailbox) {
130 DCHECK(uses_mailbox_); 131 DCHECK(uses_mailbox_);
131 DCHECK(!mailbox.IsValid() || !holder_ref_ || 132 DCHECK(!mailbox.IsValid() || !holder_ref_ ||
132 !mailbox.Equals(holder_ref_->holder()->mailbox())); 133 !mailbox.Equals(holder_ref_->holder()->mailbox()));
133 // If we never commited the mailbox, we need to release it here. 134 // If we never commited the mailbox, we need to release it here.
134 if (mailbox.IsValid()) 135 if (mailbox.IsValid())
135 holder_ref_ = MailboxHolder::Create(mailbox); 136 holder_ref_ = MailboxHolder::Create(mailbox);
136 else 137 else
137 holder_ref_.reset(); 138 holder_ref_.reset();
138 needs_set_mailbox_ = true; 139 needs_set_mailbox_ = true;
139 SetNeedsCommit(); 140 SetNeedsCommit();
140 } 141 }
141 142
142 void TextureLayer::WillModifyTexture() {
143 if (layer_tree_host() && (DrawsContent() || content_committed_)) {
144 layer_tree_host()->AcquireLayerTextures();
145 content_committed_ = false;
146 }
147 }
148
149 void TextureLayer::SetNeedsDisplayRect(const gfx::RectF& dirty_rect) { 143 void TextureLayer::SetNeedsDisplayRect(const gfx::RectF& dirty_rect) {
150 Layer::SetNeedsDisplayRect(dirty_rect); 144 Layer::SetNeedsDisplayRect(dirty_rect);
151 145
152 if (rate_limit_context_ && client_ && layer_tree_host() && DrawsContent()) 146 if (rate_limit_context_ && client_ && layer_tree_host() && DrawsContent())
153 layer_tree_host()->StartRateLimiter(client_->Context3d()); 147 layer_tree_host()->StartRateLimiter(client_->Context3d());
154 } 148 }
155 149
156 void TextureLayer::SetLayerTreeHost(LayerTreeHost* host) { 150 void TextureLayer::SetLayerTreeHost(LayerTreeHost* host) {
157 if (layer_tree_host() == host) { 151 if (layer_tree_host() == host) {
158 Layer::SetLayerTreeHost(host); 152 Layer::SetLayerTreeHost(host);
159 return; 153 return;
160 } 154 }
161 155
162 if (layer_tree_host()) { 156 if (layer_tree_host()) {
163 if (texture_id_) 157 if (impl_may_draw_client_data_) {
164 layer_tree_host()->AcquireLayerTextures(); 158 layer_tree_host()->AcquireLayerTextures();
159 impl_may_draw_client_data_ = false;
160 }
165 if (rate_limit_context_ && client_) 161 if (rate_limit_context_ && client_)
166 layer_tree_host()->StopRateLimiter(client_->Context3d()); 162 layer_tree_host()->StopRateLimiter(client_->Context3d());
167 } 163 }
168 // If we're removed from the tree, the TextureLayerImpl will be destroyed, and 164 // If we're removed from the tree, the TextureLayerImpl will be destroyed, and
169 // we will need to set the mailbox again on a new TextureLayerImpl the next 165 // we will need to set the mailbox again on a new TextureLayerImpl the next
170 // time we push. 166 // time we push.
171 if (!host && uses_mailbox_ && holder_ref_) 167 if (!host && uses_mailbox_ && holder_ref_)
172 needs_set_mailbox_ = true; 168 needs_set_mailbox_ = true;
173 Layer::SetLayerTreeHost(host); 169 Layer::SetLayerTreeHost(host);
174 } 170 }
175 171
176 bool TextureLayer::DrawsContent() const { 172 bool TextureLayer::DrawsContent() const {
177 return (client_ || texture_id_ || holder_ref_) && Layer::DrawsContent(); 173 return (client_ || texture_id_ || holder_ref_) && Layer::DrawsContent();
178 } 174 }
179 175
176 bool TextureLayer::DrawsClientData() const {
177 if (!Layer::DrawsContent() || !client_)
178 return false;
179 return texture_id_ || holder_ref_;
180 }
181
180 bool TextureLayer::Update(ResourceUpdateQueue* queue, 182 bool TextureLayer::Update(ResourceUpdateQueue* queue,
181 const OcclusionTracker* occlusion) { 183 const OcclusionTracker* occlusion) {
182 bool updated = false; 184 bool updated = false;
183 if (client_) { 185 if (client_) {
184 if (uses_mailbox_) { 186 if (uses_mailbox_) {
185 TextureMailbox mailbox; 187 TextureMailbox mailbox;
186 if (client_->PrepareTextureMailbox( 188 if (client_->PrepareTextureMailbox(
187 &mailbox, layer_tree_host()->UsingSharedMemoryResources())) { 189 &mailbox, layer_tree_host()->UsingSharedMemoryResources())) {
188 SetTextureMailbox(mailbox); 190 SetTextureMailbox(mailbox);
189 updated = true; 191 updated = true;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 MailboxHolder* holder = holder_ref_->holder(); 224 MailboxHolder* holder = holder_ref_->holder();
223 TextureMailbox::ReleaseCallback callback = 225 TextureMailbox::ReleaseCallback callback =
224 holder->GetCallbackForImplThread(); 226 holder->GetCallbackForImplThread();
225 texture_mailbox = holder->mailbox().CopyWithNewCallback(callback); 227 texture_mailbox = holder->mailbox().CopyWithNewCallback(callback);
226 } 228 }
227 texture_layer->SetTextureMailbox(texture_mailbox); 229 texture_layer->SetTextureMailbox(texture_mailbox);
228 needs_set_mailbox_ = false; 230 needs_set_mailbox_ = false;
229 } else { 231 } else {
230 texture_layer->set_texture_id(texture_id_); 232 texture_layer->set_texture_id(texture_id_);
231 } 233 }
232 content_committed_ = DrawsContent(); 234 impl_may_draw_client_data_ = DrawsClientData();
233 } 235 }
234 236
235 bool TextureLayer::BlocksPendingCommit() const { 237 bool TextureLayer::BlocksPendingCommit() const {
236 // Double-buffered texture layers need to be blocked until they can be made 238 // Double-buffered texture layers need to be blocked until they can be made
237 // triple-buffered. Single-buffered layers already prevent draws, so 239 // triple-buffered. Single-buffered layers already prevent draws, so
238 // can block too for simplicity. 240 // can block too for simplicity.
239 return DrawsContent(); 241 return DrawsContent();
240 } 242 }
241 243
242 bool TextureLayer::CanClipSelf() const { 244 bool TextureLayer::CanClipSelf() const {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 } 307 }
306 308
307 void TextureLayer::MailboxHolder::ReturnAndReleaseOnImplThread( 309 void TextureLayer::MailboxHolder::ReturnAndReleaseOnImplThread(
308 unsigned sync_point, bool is_lost) { 310 unsigned sync_point, bool is_lost) {
309 message_loop_->PostTask(FROM_HERE, base::Bind( 311 message_loop_->PostTask(FROM_HERE, base::Bind(
310 &MailboxHolder::ReturnAndReleaseOnMainThread, 312 &MailboxHolder::ReturnAndReleaseOnMainThread,
311 this, sync_point, is_lost)); 313 this, sync_point, is_lost));
312 } 314 }
313 315
314 } // namespace cc 316 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/texture_layer.h ('k') | cc/layers/texture_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698