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

Side by Side Diff: cc/tiled_layer.cc

Issue 11048044: cc: Switch to Chromium DCHECKs and LOGs (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase 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
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 "TiledLayerChromium.h" 7 #include "TiledLayerChromium.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "CCLayerImpl.h" 10 #include "CCLayerImpl.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 { 92 {
93 } 93 }
94 94
95 scoped_ptr<CCLayerImpl> TiledLayerChromium::createCCLayerImpl() 95 scoped_ptr<CCLayerImpl> TiledLayerChromium::createCCLayerImpl()
96 { 96 {
97 return CCTiledLayerImpl::create(id()).PassAs<CCLayerImpl>(); 97 return CCTiledLayerImpl::create(id()).PassAs<CCLayerImpl>();
98 } 98 }
99 99
100 void TiledLayerChromium::updateTileSizeAndTilingOption() 100 void TiledLayerChromium::updateTileSizeAndTilingOption()
101 { 101 {
102 ASSERT(layerTreeHost()); 102 CC_DCHECK(layerTreeHost());
103 103
104 const IntSize& defaultTileSize = layerTreeHost()->settings().defaultTileSize ; 104 const IntSize& defaultTileSize = layerTreeHost()->settings().defaultTileSize ;
105 const IntSize& maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledL ayerSize; 105 const IntSize& maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledL ayerSize;
106 int layerWidth = contentBounds().width(); 106 int layerWidth = contentBounds().width();
107 int layerHeight = contentBounds().height(); 107 int layerHeight = contentBounds().height();
108 108
109 const IntSize tileSize(min(defaultTileSize.width(), layerWidth), min(default TileSize.height(), layerHeight)); 109 const IntSize tileSize(min(defaultTileSize.width(), layerWidth), min(default TileSize.height(), layerHeight));
110 110
111 // Tile if both dimensions large, or any one dimension large and the other 111 // Tile if both dimensions large, or any one dimension large and the other
112 // extends into a second tile but the total layer area isn't larger than tha t 112 // extends into a second tile but the total layer area isn't larger than tha t
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 updateBounds(); 318 updateBounds();
319 if (m_tiler->isEmpty() || contentRect.isEmpty() || m_skipsDraw) 319 if (m_tiler->isEmpty() || contentRect.isEmpty() || m_skipsDraw)
320 return; 320 return;
321 321
322 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) { 322 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) {
323 #if WTF_NEW_HASHMAP_ITERATORS_INTERFACE 323 #if WTF_NEW_HASHMAP_ITERATORS_INTERFACE
324 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->value.get()); 324 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->value.get());
325 #else 325 #else
326 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get()); 326 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get());
327 #endif 327 #endif
328 ASSERT(tile); 328 CC_DCHECK(tile);
329 // FIXME: This should not ever be null. 329 // FIXME: This should not ever be null.
330 if (!tile) 330 if (!tile)
331 continue; 331 continue;
332 IntRect bound = m_tiler->tileRect(tile); 332 IntRect bound = m_tiler->tileRect(tile);
333 bound.intersect(contentRect); 333 bound.intersect(contentRect);
334 tile->dirtyRect.unite(bound); 334 tile->dirtyRect.unite(bound);
335 } 335 }
336 } 336 }
337 337
338 // Returns true if tile is dirty and only part of it needs to be updated. 338 // 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
388 // and requesting memory so those are encapsulated in this function: 388 // and requesting memory so those are encapsulated in this function:
389 // - We only want to call requestLate on unoccluded textures (to preserve 389 // - We only want to call requestLate on unoccluded textures (to preserve
390 // memory for other layers when near OOM). 390 // memory for other layers when near OOM).
391 // - We only want to record occlusion metrics if all memory requests succeed . 391 // - We only want to record occlusion metrics if all memory requests succeed .
392 392
393 int occludedTileCount = 0; 393 int occludedTileCount = 0;
394 bool succeeded = true; 394 bool succeeded = true;
395 for (int j = top; j <= bottom; ++j) { 395 for (int j = top; j <= bottom; ++j) {
396 for (int i = left; i <= right; ++i) { 396 for (int i = left; i <= right; ++i) {
397 UpdatableTile* tile = tileAt(i, j); 397 UpdatableTile* tile = tileAt(i, j);
398 ASSERT(tile); // Did setTexturePriorities get skipped? 398 CC_DCHECK(tile); // Did setTexturePriorities get skipped?
399 // FIXME: This should not ever be null. 399 // FIXME: This should not ever be null.
400 if (!tile) 400 if (!tile)
401 continue; 401 continue;
402 ASSERT(!tile->occluded); // Did resetUpdateState get skipped? Are we doing more than one occlusion pass? 402 CC_DCHECK(!tile->occluded); // Did resetUpdateState get skipped? Are we doing more than one occlusion pass?
403 IntRect visibleTileRect = intersection(m_tiler->tileBounds(i, j), vi sibleContentRect()); 403 IntRect visibleTileRect = intersection(m_tiler->tileBounds(i, j), vi sibleContentRect());
404 if (occlusion && occlusion->occluded(this, visibleTileRect)) { 404 if (occlusion && occlusion->occluded(this, visibleTileRect)) {
405 tile->occluded = true; 405 tile->occluded = true;
406 occludedTileCount++; 406 occludedTileCount++;
407 } else { 407 } else {
408 succeeded &= tile->managedTexture()->requestLate(); 408 succeeded &= tile->managedTexture()->requestLate();
409 } 409 }
410 } 410 }
411 } 411 }
412 412
413 if (!succeeded) 413 if (!succeeded)
414 return; 414 return;
415 415
416 // FIXME: Remove the loop and just pass the count! 416 // FIXME: Remove the loop and just pass the count!
417 for (int i = 0; i < occludedTileCount; i++) 417 for (int i = 0; i < occludedTileCount; i++)
418 occlusion->overdrawMetrics().didCullTileForUpload(); 418 occlusion->overdrawMetrics().didCullTileForUpload();
419 } 419 }
420 420
421 bool TiledLayerChromium::haveTexturesForTiles(int left, int top, int right, int bottom, bool ignoreOcclusions) 421 bool TiledLayerChromium::haveTexturesForTiles(int left, int top, int right, int bottom, bool ignoreOcclusions)
422 { 422 {
423 for (int j = top; j <= bottom; ++j) { 423 for (int j = top; j <= bottom; ++j) {
424 for (int i = left; i <= right; ++i) { 424 for (int i = left; i <= right; ++i) {
425 UpdatableTile* tile = tileAt(i, j); 425 UpdatableTile* tile = tileAt(i, j);
426 ASSERT(tile); // Did setTexturePriorites get skipped? 426 CC_DCHECK(tile); // Did setTexturePriorites get skipped?
427 // FIXME: This should not ever be null. 427 // FIXME: This should not ever be null.
428 if (!tile) 428 if (!tile)
429 continue; 429 continue;
430 430
431 // Ensure the entire tile is dirty if we don't have the texture. 431 // Ensure the entire tile is dirty if we don't have the texture.
432 if (!tile->managedTexture()->haveBackingTexture()) 432 if (!tile->managedTexture()->haveBackingTexture())
433 tile->dirtyRect = m_tiler->tileRect(tile); 433 tile->dirtyRect = m_tiler->tileRect(tile);
434 434
435 // If using occlusion and the visible region of the tile is occluded , 435 // If using occlusion and the visible region of the tile is occluded ,
436 // don't reserve a texture or update the tile. 436 // don't reserve a texture or update the tile.
437 if (tile->occluded && !ignoreOcclusions) 437 if (tile->occluded && !ignoreOcclusions)
438 continue; 438 continue;
439 439
440 if (!tile->managedTexture()->canAcquireBackingTexture()) 440 if (!tile->managedTexture()->canAcquireBackingTexture())
441 return false; 441 return false;
442 } 442 }
443 } 443 }
444 return true; 444 return true;
445 } 445 }
446 446
447 IntRect TiledLayerChromium::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions) 447 IntRect TiledLayerChromium::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions)
448 { 448 {
449 IntRect paintRect; 449 IntRect paintRect;
450 for (int j = top; j <= bottom; ++j) { 450 for (int j = top; j <= bottom; ++j) {
451 for (int i = left; i <= right; ++i) { 451 for (int i = left; i <= right; ++i) {
452 UpdatableTile* tile = tileAt(i, j); 452 UpdatableTile* tile = tileAt(i, j);
453 ASSERT(tile); // Did setTexturePriorites get skipped? 453 CC_DCHECK(tile); // Did setTexturePriorites get skipped?
454 // FIXME: This should not ever be null. 454 // FIXME: This should not ever be null.
455 if (!tile) 455 if (!tile)
456 continue; 456 continue;
457 if (tile->occluded && !ignoreOcclusions) 457 if (tile->occluded && !ignoreOcclusions)
458 continue; 458 continue;
459 paintRect.unite(tile->dirtyRect); 459 paintRect.unite(tile->dirtyRect);
460 tile->markForUpdate(); 460 tile->markForUpdate();
461 } 461 }
462 } 462 }
463 return paintRect; 463 return paintRect;
(...skipping 11 matching lines...) Expand all
475 // effect of disabling compositing, which causes our reference to the textur e updater to be deleted. 475 // effect of disabling compositing, which causes our reference to the textur e updater to be deleted.
476 // However, we can't free the memory backing the SkCanvas until the paint fi nishes, 476 // However, we can't free the memory backing the SkCanvas until the paint fi nishes,
477 // so we grab a local reference here to hold the updater alive until the pai nt completes. 477 // so we grab a local reference here to hold the updater alive until the pai nt completes.
478 RefPtr<LayerTextureUpdater> protector(textureUpdater()); 478 RefPtr<LayerTextureUpdater> protector(textureUpdater());
479 IntRect paintedOpaqueRect; 479 IntRect paintedOpaqueRect;
480 textureUpdater()->prepareToUpdate(paintRect, m_tiler->tileSize(), 1 / widthS cale, 1 / heightScale, paintedOpaqueRect, stats); 480 textureUpdater()->prepareToUpdate(paintRect, m_tiler->tileSize(), 1 / widthS cale, 1 / heightScale, paintedOpaqueRect, stats);
481 481
482 for (int j = top; j <= bottom; ++j) { 482 for (int j = top; j <= bottom; ++j) {
483 for (int i = left; i <= right; ++i) { 483 for (int i = left; i <= right; ++i) {
484 UpdatableTile* tile = tileAt(i, j); 484 UpdatableTile* tile = tileAt(i, j);
485 ASSERT(tile); // Did setTexturePriorites get skipped? 485 CC_DCHECK(tile); // Did setTexturePriorites get skipped?
486 // FIXME: This should not ever be null. 486 // FIXME: This should not ever be null.
487 if (!tile) 487 if (!tile)
488 continue; 488 continue;
489 489
490 IntRect tileRect = m_tiler->tileBounds(i, j); 490 IntRect tileRect = m_tiler->tileBounds(i, j);
491 491
492 // Use updateRect as the above loop copied the dirty rect for this f rame to updateRect. 492 // Use updateRect as the above loop copied the dirty rect for this f rame to updateRect.
493 const IntRect& dirtyRect = tile->updateRect; 493 const IntRect& dirtyRect = tile->updateRect;
494 if (dirtyRect.isEmpty()) 494 if (dirtyRect.isEmpty())
495 continue; 495 continue;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 #endif 684 #endif
685 // FIXME: This should not ever be null. 685 // FIXME: This should not ever be null.
686 if (!tile) 686 if (!tile)
687 continue; 687 continue;
688 tile->resetUpdateState(); 688 tile->resetUpdateState();
689 } 689 }
690 } 690 }
691 691
692 void TiledLayerChromium::update(CCTextureUpdateQueue& queue, const CCOcclusionTr acker* occlusion, CCRenderingStats& stats) 692 void TiledLayerChromium::update(CCTextureUpdateQueue& queue, const CCOcclusionTr acker* occlusion, CCRenderingStats& stats)
693 { 693 {
694 ASSERT(!m_skipsDraw && !m_failedUpdate); // Did resetUpdateState get skipped ? 694 CC_DCHECK(!m_skipsDraw && !m_failedUpdate); // Did resetUpdateState get skip ped?
695 updateBounds(); 695 updateBounds();
696 if (m_tiler->hasEmptyBounds() || !drawsContent()) 696 if (m_tiler->hasEmptyBounds() || !drawsContent())
697 return; 697 return;
698 698
699 bool didPaint = false; 699 bool didPaint = false;
700 700
701 // Animation pre-paint. If the layer is small, try to paint it all 701 // Animation pre-paint. If the layer is small, try to paint it all
702 // immediately whether or not it is occluded, to avoid paint/upload 702 // immediately whether or not it is occluded, to avoid paint/upload
703 // hiccups while it is animating. 703 // hiccups while it is animating.
704 if (isSmallAnimatedLayer(this)) { 704 if (isSmallAnimatedLayer(this)) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 IntRect idlePaintContentRect = idlePaintRect(); 771 IntRect idlePaintContentRect = idlePaintRect();
772 if (idlePaintContentRect.isEmpty()) 772 if (idlePaintContentRect.isEmpty())
773 return false; 773 return false;
774 774
775 int left, top, right, bottom; 775 int left, top, right, bottom;
776 m_tiler->contentRectToTileIndices(idlePaintContentRect, left, top, right, bo ttom); 776 m_tiler->contentRectToTileIndices(idlePaintContentRect, left, top, right, bo ttom);
777 777
778 for (int j = top; j <= bottom; ++j) { 778 for (int j = top; j <= bottom; ++j) {
779 for (int i = left; i <= right; ++i) { 779 for (int i = left; i <= right; ++i) {
780 UpdatableTile* tile = tileAt(i, j); 780 UpdatableTile* tile = tileAt(i, j);
781 ASSERT(tile); // Did setTexturePriorities get skipped? 781 CC_DCHECK(tile); // Did setTexturePriorities get skipped?
782 if (!tile) 782 if (!tile)
783 continue; 783 continue;
784 784
785 bool updated = !tile->updateRect.isEmpty(); 785 bool updated = !tile->updateRect.isEmpty();
786 bool canAcquire = tile->managedTexture()->canAcquireBackingTexture() ; 786 bool canAcquire = tile->managedTexture()->canAcquireBackingTexture() ;
787 bool dirty = tile->isDirty() || !tile->managedTexture()->haveBacking Texture(); 787 bool dirty = tile->isDirty() || !tile->managedTexture()->haveBacking Texture();
788 if (!updated && canAcquire && dirty) 788 if (!updated && canAcquire && dirty)
789 return true; 789 return true;
790 } 790 }
791 } 791 }
(...skipping 11 matching lines...) Expand all
803 IntRect prepaintRect = visibleContentRect(); 803 IntRect prepaintRect = visibleContentRect();
804 prepaintRect.inflateX(m_tiler->tileSize().width()); 804 prepaintRect.inflateX(m_tiler->tileSize().width());
805 prepaintRect.inflateY(m_tiler->tileSize().height() * 2); 805 prepaintRect.inflateY(m_tiler->tileSize().height() * 2);
806 IntRect contentRect(IntPoint::zero(), contentBounds()); 806 IntRect contentRect(IntPoint::zero(), contentBounds());
807 prepaintRect.intersect(contentRect); 807 prepaintRect.intersect(contentRect);
808 808
809 return prepaintRect; 809 return prepaintRect;
810 } 810 }
811 811
812 } 812 }
OLDNEW
« no previous file with comments | « cc/tile_draw_quad.cc ('k') | cc/tiled_layer_impl.cc » ('j') | cc/yuv_video_draw_quad.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698