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

Side by Side Diff: cc/scrollbar_layer.cc

Issue 11464041: cc: Don't use partial updates for scrollbars when they are not allowed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix android Created 7 years, 12 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
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/scrollbar_layer.h" 5 #include "cc/scrollbar_layer.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "cc/layer_painter.h" 9 #include "cc/layer_painter.h"
10 #include "cc/layer_tree_host.h" 10 #include "cc/layer_tree_host.h"
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 if (!m_thumb) 242 if (!m_thumb)
243 m_thumb = m_thumbUpdater->createResource(layerTreeHost()->contentsTextur eManager()); 243 m_thumb = m_thumbUpdater->createResource(layerTreeHost()->contentsTextur eManager());
244 } 244 }
245 245
246 void ScrollbarLayer::updatePart(CachingBitmapContentLayerUpdater* painter, Layer Updater::Resource* resource, const gfx::Rect& rect, ResourceUpdateQueue& queue, RenderingStats& stats) 246 void ScrollbarLayer::updatePart(CachingBitmapContentLayerUpdater* painter, Layer Updater::Resource* resource, const gfx::Rect& rect, ResourceUpdateQueue& queue, RenderingStats& stats)
247 { 247 {
248 // Skip painting and uploading if there are no invalidations and 248 // Skip painting and uploading if there are no invalidations and
249 // we already have valid texture data. 249 // we already have valid texture data.
250 if (resource->texture()->haveBackingTexture() && 250 if (resource->texture()->haveBackingTexture() &&
251 resource->texture()->size() == rect.size() && 251 resource->texture()->size() == rect.size() &&
252 m_updateRect.IsEmpty()) 252 !isDirty())
253 return; 253 return;
254 254
255 // We should always have enough memory for UI. 255 // We should always have enough memory for UI.
256 DCHECK(resource->texture()->canAcquireBackingTexture()); 256 DCHECK(resource->texture()->canAcquireBackingTexture());
257 if (!resource->texture()->canAcquireBackingTexture()) 257 if (!resource->texture()->canAcquireBackingTexture())
258 return; 258 return;
259 259
260 // Paint and upload the entire part. 260 // Paint and upload the entire part.
261 gfx::Rect paintedOpaqueRect; 261 gfx::Rect paintedOpaqueRect;
262 painter->prepareToUpdate(rect, rect.size(), contentsScaleX(), contentsScaleY (), paintedOpaqueRect, stats); 262 painter->prepareToUpdate(rect, rect.size(), contentsScaleX(), contentsScaleY (), paintedOpaqueRect, stats);
263 if (!painter->pixelsDidChange() && resource->texture()->haveBackingTexture() ) { 263 if (!painter->pixelsDidChange() && resource->texture()->haveBackingTexture() ) {
264 TRACE_EVENT_INSTANT0("cc","ScrollbarLayer::updatePart no texture upload needed"); 264 TRACE_EVENT_INSTANT0("cc","ScrollbarLayer::updatePart no texture upload needed");
265 return; 265 return;
266 } 266 }
267 267
268 bool partialUpdatesAllowed = layerTreeHost()->settings().maxPartialTextureUp dates > 0;
269 if (!partialUpdatesAllowed)
270 resource->texture()->returnBackingTexture();
271
268 gfx::Vector2d destOffset(0, 0); 272 gfx::Vector2d destOffset(0, 0);
269 resource->update(queue, rect, destOffset, false, stats); 273 resource->update(queue, rect, destOffset, partialUpdatesAllowed, stats);
270 } 274 }
271 275
272 gfx::Rect ScrollbarLayer::scrollbarLayerRectToContentRect(const gfx::Rect& layer Rect) const 276 gfx::Rect ScrollbarLayer::scrollbarLayerRectToContentRect(const gfx::Rect& layer Rect) const
273 { 277 {
274 // Don't intersect with the bounds as in layerRectToContentRect() because 278 // Don't intersect with the bounds as in layerRectToContentRect() because
275 // layerRect here might be in coordinates of the containing layer. 279 // layerRect here might be in coordinates of the containing layer.
276 gfx::RectF contentRect = gfx::ScaleRect(layerRect, contentsScaleX(), content sScaleY()); 280 gfx::RectF contentRect = gfx::ScaleRect(layerRect, contentsScaleX(), content sScaleY());
277 return gfx::ToEnclosingRect(contentRect); 281 return gfx::ToEnclosingRect(contentRect);
278 } 282 }
279 283
(...skipping 19 matching lines...) Expand all
299 gfx::Size thumbSize = scrollbarLayerRectToContentRect(m_geometry->thumbR ect(m_scrollbar.get())).size(); 303 gfx::Size thumbSize = scrollbarLayerRectToContentRect(m_geometry->thumbR ect(m_scrollbar.get())).size();
300 m_thumb->texture()->setDimensions(thumbSize, m_textureFormat); 304 m_thumb->texture()->setDimensions(thumbSize, m_textureFormat);
301 m_thumb->texture()->setRequestPriority(PriorityCalculator::uiPriority(dr awsToRoot)); 305 m_thumb->texture()->setRequestPriority(PriorityCalculator::uiPriority(dr awsToRoot));
302 } 306 }
303 } 307 }
304 308
305 void ScrollbarLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats) 309 void ScrollbarLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats)
306 { 310 {
307 ContentsScalingLayer::update(queue, occlusion, stats); 311 ContentsScalingLayer::update(queue, occlusion, stats);
308 312
313 m_dirtyRect.Union(m_updateRect);
309 if (contentBounds().IsEmpty()) 314 if (contentBounds().IsEmpty())
310 return; 315 return;
316 if (visibleContentRect().IsEmpty())
317 return;
318 if (!isDirty())
319 return;
311 320
312 createUpdaterIfNeeded(); 321 createUpdaterIfNeeded();
313 322
314 gfx::Rect contentRect = scrollbarLayerRectToContentRect(gfx::Rect(m_scrollba r->location(), bounds())); 323 gfx::Rect contentRect = scrollbarLayerRectToContentRect(gfx::Rect(m_scrollba r->location(), bounds()));
315 updatePart(m_backTrackUpdater.get(), m_backTrack.get(), contentRect, queue, stats); 324 updatePart(m_backTrackUpdater.get(), m_backTrack.get(), contentRect, queue, stats);
316 if (m_foreTrack && m_foreTrackUpdater) 325 if (m_foreTrack && m_foreTrackUpdater)
317 updatePart(m_foreTrackUpdater.get(), m_foreTrack.get(), contentRect, que ue, stats); 326 updatePart(m_foreTrackUpdater.get(), m_foreTrack.get(), contentRect, que ue, stats);
318 327
319 // Consider the thumb to be at the origin when painting. 328 // Consider the thumb to be at the origin when painting.
320 WebKit::WebRect thumbRect = m_geometry->thumbRect(m_scrollbar.get()); 329 gfx::Rect thumbRect = m_geometry->thumbRect(m_scrollbar.get());
321 gfx::Rect originThumbRect = scrollbarLayerRectToContentRect(gfx::Rect(0, 0, thumbRect.width, thumbRect.height)); 330 gfx::Rect originThumbRect = scrollbarLayerRectToContentRect(gfx::Rect(thumbR ect.size()));
322 if (!originThumbRect.IsEmpty()) 331 if (!originThumbRect.IsEmpty())
323 updatePart(m_thumbUpdater.get(), m_thumb.get(), originThumbRect, queue, stats); 332 updatePart(m_thumbUpdater.get(), m_thumb.get(), originThumbRect, queue, stats);
333
334 m_dirtyRect = gfx::RectF();
324 } 335 }
325 336
326 } // namespace cc 337 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698