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

Side by Side Diff: cc/tiled_layer.cc

Issue 11192030: cc: Switch to Chromium DCHECKs LOGs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebaseonenne Created 8 years, 2 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/tile_draw_quad.cc ('k') | cc/tiled_layer_impl.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 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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/tiled_layer.h" 7 #include "cc/tiled_layer.h"
8 8
9 #include "CCLayerImpl.h" 9 #include "CCLayerImpl.h"
10 #include "CCLayerTreeHost.h" 10 #include "CCLayerTreeHost.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 { 90 {
91 } 91 }
92 92
93 scoped_ptr<CCLayerImpl> TiledLayerChromium::createCCLayerImpl() 93 scoped_ptr<CCLayerImpl> TiledLayerChromium::createCCLayerImpl()
94 { 94 {
95 return CCTiledLayerImpl::create(id()).PassAs<CCLayerImpl>(); 95 return CCTiledLayerImpl::create(id()).PassAs<CCLayerImpl>();
96 } 96 }
97 97
98 void TiledLayerChromium::updateTileSizeAndTilingOption() 98 void TiledLayerChromium::updateTileSizeAndTilingOption()
99 { 99 {
100 ASSERT(layerTreeHost()); 100 DCHECK(layerTreeHost());
101 101
102 const IntSize& defaultTileSize = layerTreeHost()->settings().defaultTileSize ; 102 const IntSize& defaultTileSize = layerTreeHost()->settings().defaultTileSize ;
103 const IntSize& maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledL ayerSize; 103 const IntSize& maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledL ayerSize;
104 int layerWidth = contentBounds().width(); 104 int layerWidth = contentBounds().width();
105 int layerHeight = contentBounds().height(); 105 int layerHeight = contentBounds().height();
106 106
107 const IntSize tileSize(min(defaultTileSize.width(), layerWidth), min(default TileSize.height(), layerHeight)); 107 const IntSize tileSize(min(defaultTileSize.width(), layerWidth), min(default TileSize.height(), layerHeight));
108 108
109 // Tile if both dimensions large, or any one dimension large and the other 109 // Tile if both dimensions large, or any one dimension large and the other
110 // extends into a second tile but the total layer area isn't larger than tha t 110 // extends into a second tile but the total layer area isn't larger than tha t
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 302 }
303 303
304 void TiledLayerChromium::invalidateContentRect(const IntRect& contentRect) 304 void TiledLayerChromium::invalidateContentRect(const IntRect& contentRect)
305 { 305 {
306 updateBounds(); 306 updateBounds();
307 if (m_tiler->isEmpty() || contentRect.isEmpty() || m_skipsDraw) 307 if (m_tiler->isEmpty() || contentRect.isEmpty() || m_skipsDraw)
308 return; 308 return;
309 309
310 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) { 310 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) {
311 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); 311 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second);
312 ASSERT(tile); 312 DCHECK(tile);
313 // FIXME: This should not ever be null. 313 // FIXME: This should not ever be null.
314 if (!tile) 314 if (!tile)
315 continue; 315 continue;
316 IntRect bound = m_tiler->tileRect(tile); 316 IntRect bound = m_tiler->tileRect(tile);
317 bound.intersect(contentRect); 317 bound.intersect(contentRect);
318 tile->dirtyRect.unite(bound); 318 tile->dirtyRect.unite(bound);
319 } 319 }
320 } 320 }
321 321
322 // Returns true if tile is dirty and only part of it needs to be updated. 322 // Returns true if tile is dirty and only part of it needs to be updated.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 // and requesting memory so those are encapsulated in this function: 372 // and requesting memory so those are encapsulated in this function:
373 // - We only want to call requestLate on unoccluded textures (to preserve 373 // - We only want to call requestLate on unoccluded textures (to preserve
374 // memory for other layers when near OOM). 374 // memory for other layers when near OOM).
375 // - We only want to record occlusion metrics if all memory requests succeed . 375 // - We only want to record occlusion metrics if all memory requests succeed .
376 376
377 int occludedTileCount = 0; 377 int occludedTileCount = 0;
378 bool succeeded = true; 378 bool succeeded = true;
379 for (int j = top; j <= bottom; ++j) { 379 for (int j = top; j <= bottom; ++j) {
380 for (int i = left; i <= right; ++i) { 380 for (int i = left; i <= right; ++i) {
381 UpdatableTile* tile = tileAt(i, j); 381 UpdatableTile* tile = tileAt(i, j);
382 ASSERT(tile); // Did setTexturePriorities get skipped? 382 DCHECK(tile); // Did setTexturePriorities get skipped?
383 // FIXME: This should not ever be null. 383 // FIXME: This should not ever be null.
384 if (!tile) 384 if (!tile)
385 continue; 385 continue;
386 ASSERT(!tile->occluded); // Did resetUpdateState get skipped? Are we doing more than one occlusion pass? 386 DCHECK(!tile->occluded); // Did resetUpdateState get skipped? Are we doing more than one occlusion pass?
387 IntRect visibleTileRect = intersection(m_tiler->tileBounds(i, j), vi sibleContentRect()); 387 IntRect visibleTileRect = intersection(m_tiler->tileBounds(i, j), vi sibleContentRect());
388 if (occlusion && occlusion->occluded(this, visibleTileRect)) { 388 if (occlusion && occlusion->occluded(this, visibleTileRect)) {
389 tile->occluded = true; 389 tile->occluded = true;
390 occludedTileCount++; 390 occludedTileCount++;
391 } else { 391 } else {
392 succeeded &= tile->managedTexture()->requestLate(); 392 succeeded &= tile->managedTexture()->requestLate();
393 } 393 }
394 } 394 }
395 } 395 }
396 396
397 if (!succeeded) 397 if (!succeeded)
398 return; 398 return;
399 399
400 // FIXME: Remove the loop and just pass the count! 400 // FIXME: Remove the loop and just pass the count!
401 for (int i = 0; i < occludedTileCount; i++) 401 for (int i = 0; i < occludedTileCount; i++)
402 occlusion->overdrawMetrics().didCullTileForUpload(); 402 occlusion->overdrawMetrics().didCullTileForUpload();
403 } 403 }
404 404
405 bool TiledLayerChromium::haveTexturesForTiles(int left, int top, int right, int bottom, bool ignoreOcclusions) 405 bool TiledLayerChromium::haveTexturesForTiles(int left, int top, int right, int bottom, bool ignoreOcclusions)
406 { 406 {
407 for (int j = top; j <= bottom; ++j) { 407 for (int j = top; j <= bottom; ++j) {
408 for (int i = left; i <= right; ++i) { 408 for (int i = left; i <= right; ++i) {
409 UpdatableTile* tile = tileAt(i, j); 409 UpdatableTile* tile = tileAt(i, j);
410 ASSERT(tile); // Did setTexturePriorites get skipped? 410 DCHECK(tile); // Did setTexturePriorites get skipped?
411 // FIXME: This should not ever be null. 411 // FIXME: This should not ever be null.
412 if (!tile) 412 if (!tile)
413 continue; 413 continue;
414 414
415 // Ensure the entire tile is dirty if we don't have the texture. 415 // Ensure the entire tile is dirty if we don't have the texture.
416 if (!tile->managedTexture()->haveBackingTexture()) 416 if (!tile->managedTexture()->haveBackingTexture())
417 tile->dirtyRect = m_tiler->tileRect(tile); 417 tile->dirtyRect = m_tiler->tileRect(tile);
418 418
419 // If using occlusion and the visible region of the tile is occluded , 419 // If using occlusion and the visible region of the tile is occluded ,
420 // don't reserve a texture or update the tile. 420 // don't reserve a texture or update the tile.
421 if (tile->occluded && !ignoreOcclusions) 421 if (tile->occluded && !ignoreOcclusions)
422 continue; 422 continue;
423 423
424 if (!tile->managedTexture()->canAcquireBackingTexture()) 424 if (!tile->managedTexture()->canAcquireBackingTexture())
425 return false; 425 return false;
426 } 426 }
427 } 427 }
428 return true; 428 return true;
429 } 429 }
430 430
431 IntRect TiledLayerChromium::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions) 431 IntRect TiledLayerChromium::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions)
432 { 432 {
433 IntRect paintRect; 433 IntRect paintRect;
434 for (int j = top; j <= bottom; ++j) { 434 for (int j = top; j <= bottom; ++j) {
435 for (int i = left; i <= right; ++i) { 435 for (int i = left; i <= right; ++i) {
436 UpdatableTile* tile = tileAt(i, j); 436 UpdatableTile* tile = tileAt(i, j);
437 ASSERT(tile); // Did setTexturePriorites get skipped? 437 DCHECK(tile); // Did setTexturePriorites get skipped?
438 // FIXME: This should not ever be null. 438 // FIXME: This should not ever be null.
439 if (!tile) 439 if (!tile)
440 continue; 440 continue;
441 if (tile->occluded && !ignoreOcclusions) 441 if (tile->occluded && !ignoreOcclusions)
442 continue; 442 continue;
443 paintRect.unite(tile->dirtyRect); 443 paintRect.unite(tile->dirtyRect);
444 tile->markForUpdate(); 444 tile->markForUpdate();
445 } 445 }
446 } 446 }
447 return paintRect; 447 return paintRect;
(...skipping 11 matching lines...) Expand all
459 // effect of disabling compositing, which causes our reference to the textur e updater to be deleted. 459 // effect of disabling compositing, which causes our reference to the textur e updater to be deleted.
460 // However, we can't free the memory backing the SkCanvas until the paint fi nishes, 460 // However, we can't free the memory backing the SkCanvas until the paint fi nishes,
461 // so we grab a local reference here to hold the updater alive until the pai nt completes. 461 // so we grab a local reference here to hold the updater alive until the pai nt completes.
462 scoped_refptr<LayerTextureUpdater> protector(textureUpdater()); 462 scoped_refptr<LayerTextureUpdater> protector(textureUpdater());
463 IntRect paintedOpaqueRect; 463 IntRect paintedOpaqueRect;
464 textureUpdater()->prepareToUpdate(paintRect, m_tiler->tileSize(), 1 / widthS cale, 1 / heightScale, paintedOpaqueRect, stats); 464 textureUpdater()->prepareToUpdate(paintRect, m_tiler->tileSize(), 1 / widthS cale, 1 / heightScale, paintedOpaqueRect, stats);
465 465
466 for (int j = top; j <= bottom; ++j) { 466 for (int j = top; j <= bottom; ++j) {
467 for (int i = left; i <= right; ++i) { 467 for (int i = left; i <= right; ++i) {
468 UpdatableTile* tile = tileAt(i, j); 468 UpdatableTile* tile = tileAt(i, j);
469 ASSERT(tile); // Did setTexturePriorites get skipped? 469 DCHECK(tile); // Did setTexturePriorites get skipped?
470 // FIXME: This should not ever be null. 470 // FIXME: This should not ever be null.
471 if (!tile) 471 if (!tile)
472 continue; 472 continue;
473 473
474 IntRect tileRect = m_tiler->tileBounds(i, j); 474 IntRect tileRect = m_tiler->tileBounds(i, j);
475 475
476 // Use updateRect as the above loop copied the dirty rect for this f rame to updateRect. 476 // Use updateRect as the above loop copied the dirty rect for this f rame to updateRect.
477 const IntRect& dirtyRect = tile->updateRect; 477 const IntRect& dirtyRect = tile->updateRect;
478 if (dirtyRect.isEmpty()) 478 if (dirtyRect.isEmpty())
479 continue; 479 continue;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); 660 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second);
661 // FIXME: This should not ever be null. 661 // FIXME: This should not ever be null.
662 if (!tile) 662 if (!tile)
663 continue; 663 continue;
664 tile->resetUpdateState(); 664 tile->resetUpdateState();
665 } 665 }
666 } 666 }
667 667
668 void TiledLayerChromium::update(CCTextureUpdateQueue& queue, const CCOcclusionTr acker* occlusion, CCRenderingStats& stats) 668 void TiledLayerChromium::update(CCTextureUpdateQueue& queue, const CCOcclusionTr acker* occlusion, CCRenderingStats& stats)
669 { 669 {
670 ASSERT(!m_skipsDraw && !m_failedUpdate); // Did resetUpdateState get skipped ? 670 DCHECK(!m_skipsDraw && !m_failedUpdate); // Did resetUpdateState get skipped ?
671 updateBounds(); 671 updateBounds();
672 if (m_tiler->hasEmptyBounds() || !drawsContent()) 672 if (m_tiler->hasEmptyBounds() || !drawsContent())
673 return; 673 return;
674 674
675 bool didPaint = false; 675 bool didPaint = false;
676 676
677 // Animation pre-paint. If the layer is small, try to paint it all 677 // Animation pre-paint. If the layer is small, try to paint it all
678 // immediately whether or not it is occluded, to avoid paint/upload 678 // immediately whether or not it is occluded, to avoid paint/upload
679 // hiccups while it is animating. 679 // hiccups while it is animating.
680 if (isSmallAnimatedLayer(this)) { 680 if (isSmallAnimatedLayer(this)) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 IntRect idlePaintContentRect = idlePaintRect(); 747 IntRect idlePaintContentRect = idlePaintRect();
748 if (idlePaintContentRect.isEmpty()) 748 if (idlePaintContentRect.isEmpty())
749 return false; 749 return false;
750 750
751 int left, top, right, bottom; 751 int left, top, right, bottom;
752 m_tiler->contentRectToTileIndices(idlePaintContentRect, left, top, right, bo ttom); 752 m_tiler->contentRectToTileIndices(idlePaintContentRect, left, top, right, bo ttom);
753 753
754 for (int j = top; j <= bottom; ++j) { 754 for (int j = top; j <= bottom; ++j) {
755 for (int i = left; i <= right; ++i) { 755 for (int i = left; i <= right; ++i) {
756 UpdatableTile* tile = tileAt(i, j); 756 UpdatableTile* tile = tileAt(i, j);
757 ASSERT(tile); // Did setTexturePriorities get skipped? 757 DCHECK(tile); // Did setTexturePriorities get skipped?
758 if (!tile) 758 if (!tile)
759 continue; 759 continue;
760 760
761 bool updated = !tile->updateRect.isEmpty(); 761 bool updated = !tile->updateRect.isEmpty();
762 bool canAcquire = tile->managedTexture()->canAcquireBackingTexture() ; 762 bool canAcquire = tile->managedTexture()->canAcquireBackingTexture() ;
763 bool dirty = tile->isDirty() || !tile->managedTexture()->haveBacking Texture(); 763 bool dirty = tile->isDirty() || !tile->managedTexture()->haveBacking Texture();
764 if (!updated && canAcquire && dirty) 764 if (!updated && canAcquire && dirty)
765 return true; 765 return true;
766 } 766 }
767 } 767 }
(...skipping 11 matching lines...) Expand all
779 IntRect prepaintRect = visibleContentRect(); 779 IntRect prepaintRect = visibleContentRect();
780 prepaintRect.inflateX(m_tiler->tileSize().width()); 780 prepaintRect.inflateX(m_tiler->tileSize().width());
781 prepaintRect.inflateY(m_tiler->tileSize().height() * 2); 781 prepaintRect.inflateY(m_tiler->tileSize().height() * 2);
782 IntRect contentRect(IntPoint::zero(), contentBounds()); 782 IntRect contentRect(IntPoint::zero(), contentBounds());
783 prepaintRect.intersect(contentRect); 783 prepaintRect.intersect(contentRect);
784 784
785 return prepaintRect; 785 return prepaintRect;
786 } 786 }
787 787
788 } 788 }
OLDNEW
« no previous file with comments | « cc/tile_draw_quad.cc ('k') | cc/tiled_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698