OLD | NEW |
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 "cc/layers/tiled_layer.h" | 5 #include "cc/layers/tiled_layer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 CHECK(TileAt(i, j)); | 287 CHECK(TileAt(i, j)); |
288 | 288 |
289 return added_tile; | 289 return added_tile; |
290 } | 290 } |
291 | 291 |
292 void TiledLayer::SetNeedsDisplayRect(const gfx::RectF& dirty_rect) { | 292 void TiledLayer::SetNeedsDisplayRect(const gfx::RectF& dirty_rect) { |
293 InvalidateContentRect(LayerRectToContentRect(dirty_rect)); | 293 InvalidateContentRect(LayerRectToContentRect(dirty_rect)); |
294 ContentsScalingLayer::SetNeedsDisplayRect(dirty_rect); | 294 ContentsScalingLayer::SetNeedsDisplayRect(dirty_rect); |
295 } | 295 } |
296 | 296 |
297 void TiledLayer::InvalidateContentRect(gfx::Rect content_rect) { | 297 void TiledLayer::InvalidateContentRect(const gfx::Rect& content_rect) { |
298 UpdateBounds(); | 298 UpdateBounds(); |
299 if (tiler_->is_empty() || content_rect.IsEmpty() || skips_draw_) | 299 if (tiler_->is_empty() || content_rect.IsEmpty() || skips_draw_) |
300 return; | 300 return; |
301 | 301 |
302 for (LayerTilingData::TileMap::const_iterator iter = tiler_->tiles().begin(); | 302 for (LayerTilingData::TileMap::const_iterator iter = tiler_->tiles().begin(); |
303 iter != tiler_->tiles().end(); | 303 iter != tiler_->tiles().end(); |
304 ++iter) { | 304 ++iter) { |
305 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); | 305 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); |
306 DCHECK(tile); | 306 DCHECK(tile); |
307 // TODO(enne): This should not ever be null. | 307 // TODO(enne): This should not ever be null. |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 tile->managed_resource()->ReturnBackingTexture(); | 461 tile->managed_resource()->ReturnBackingTexture(); |
462 } | 462 } |
463 } | 463 } |
464 | 464 |
465 paint_rect->Union(tile->dirty_rect); | 465 paint_rect->Union(tile->dirty_rect); |
466 tile->MarkForUpdate(); | 466 tile->MarkForUpdate(); |
467 } | 467 } |
468 } | 468 } |
469 } | 469 } |
470 | 470 |
471 void TiledLayer::UpdateTileTextures(gfx::Rect update_rect, | 471 void TiledLayer::UpdateTileTextures(const gfx::Rect& update_rect, |
472 gfx::Rect paint_rect, | 472 const gfx::Rect& paint_rect, |
473 int left, | 473 int left, |
474 int top, | 474 int top, |
475 int right, | 475 int right, |
476 int bottom, | 476 int bottom, |
477 ResourceUpdateQueue* queue, | 477 ResourceUpdateQueue* queue, |
478 const OcclusionTracker* occlusion) { | 478 const OcclusionTracker* occlusion) { |
479 // The update_rect should be in layer space. So we have to convert the | 479 // The update_rect should be in layer space. So we have to convert the |
480 // paint_rect from content space to layer space. | 480 // paint_rect from content space to layer space. |
481 float width_scale = | 481 float width_scale = |
482 paint_properties().bounds.width() / | 482 paint_properties().bounds.width() / |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 return content_rect.width() <= | 586 return content_rect.width() <= |
587 viewport_size.width() + tiler_->tile_size().width() && | 587 viewport_size.width() + tiler_->tile_size().width() && |
588 content_rect.height() <= | 588 content_rect.height() <= |
589 viewport_size.height() + tiler_->tile_size().height(); | 589 viewport_size.height() + tiler_->tile_size().height(); |
590 } | 590 } |
591 | 591 |
592 namespace { | 592 namespace { |
593 // TODO(epenner): Remove this and make this based on distance once distance can | 593 // TODO(epenner): Remove this and make this based on distance once distance can |
594 // be calculated for offscreen layers. For now, prioritize all small animated | 594 // be calculated for offscreen layers. For now, prioritize all small animated |
595 // layers after 512 pixels of pre-painting. | 595 // layers after 512 pixels of pre-painting. |
596 void SetPriorityForTexture(gfx::Rect visible_rect, | 596 void SetPriorityForTexture(const gfx::Rect& visible_rect, |
597 gfx::Rect tile_rect, | 597 const gfx::Rect& tile_rect, |
598 bool draws_to_root, | 598 bool draws_to_root, |
599 bool is_small_animated_layer, | 599 bool is_small_animated_layer, |
600 PrioritizedResource* texture) { | 600 PrioritizedResource* texture) { |
601 int priority = PriorityCalculator::LowestPriority(); | 601 int priority = PriorityCalculator::LowestPriority(); |
602 if (!visible_rect.IsEmpty()) { | 602 if (!visible_rect.IsEmpty()) { |
603 priority = PriorityCalculator::PriorityFromDistance( | 603 priority = PriorityCalculator::PriorityFromDistance( |
604 visible_rect, tile_rect, draws_to_root); | 604 visible_rect, tile_rect, draws_to_root); |
605 } | 605 } |
606 | 606 |
607 if (is_small_animated_layer) { | 607 if (is_small_animated_layer) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 ++iter) { | 677 ++iter) { |
678 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); | 678 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); |
679 // TODO(enne): This should not ever be null. | 679 // TODO(enne): This should not ever be null. |
680 if (!tile) | 680 if (!tile) |
681 continue; | 681 continue; |
682 tile->ResetUpdateState(); | 682 tile->ResetUpdateState(); |
683 } | 683 } |
684 } | 684 } |
685 | 685 |
686 namespace { | 686 namespace { |
687 gfx::Rect ExpandRectByDelta(gfx::Rect rect, gfx::Vector2d delta) { | 687 gfx::Rect ExpandRectByDelta(const gfx::Rect& rect, gfx::Vector2d delta) { |
688 int width = rect.width() + std::abs(delta.x()); | 688 int width = rect.width() + std::abs(delta.x()); |
689 int height = rect.height() + std::abs(delta.y()); | 689 int height = rect.height() + std::abs(delta.y()); |
690 int x = rect.x() + ((delta.x() < 0) ? delta.x() : 0); | 690 int x = rect.x() + ((delta.x() < 0) ? delta.x() : 0); |
691 int y = rect.y() + ((delta.y() < 0) ? delta.y() : 0); | 691 int y = rect.y() + ((delta.y() < 0) ? delta.y() : 0); |
692 return gfx::Rect(x, y, width, height); | 692 return gfx::Rect(x, y, width, height); |
693 } | 693 } |
694 } | 694 } |
695 | 695 |
696 void TiledLayer::UpdateScrollPrediction() { | 696 void TiledLayer::UpdateScrollPrediction() { |
697 // This scroll prediction is very primitive and should be replaced by a | 697 // This scroll prediction is very primitive and should be replaced by a |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 gfx::Rect prepaint_rect = visible_content_rect(); | 911 gfx::Rect prepaint_rect = visible_content_rect(); |
912 prepaint_rect.Inset(-tiler_->tile_size().width() * kPrepaintColumns, | 912 prepaint_rect.Inset(-tiler_->tile_size().width() * kPrepaintColumns, |
913 -tiler_->tile_size().height() * kPrepaintRows); | 913 -tiler_->tile_size().height() * kPrepaintRows); |
914 gfx::Rect content_rect(content_bounds()); | 914 gfx::Rect content_rect(content_bounds()); |
915 prepaint_rect.Intersect(content_rect); | 915 prepaint_rect.Intersect(content_rect); |
916 | 916 |
917 return prepaint_rect; | 917 return prepaint_rect; |
918 } | 918 } |
919 | 919 |
920 } // namespace cc | 920 } // namespace cc |
OLD | NEW |