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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 tiler_->TakeTile((*iter)->i(), (*iter)->j()); | 229 tiler_->TakeTile((*iter)->i(), (*iter)->j()); |
230 | 230 |
231 // TiledLayer must push properties every frame, since viewport state and | 231 // TiledLayer must push properties every frame, since viewport state and |
232 // occlusion from anywhere in the tree can change what the layer decides to | 232 // occlusion from anywhere in the tree can change what the layer decides to |
233 // push to the impl tree. | 233 // push to the impl tree. |
234 needs_push_properties_ = true; | 234 needs_push_properties_ = true; |
235 } | 235 } |
236 | 236 |
237 PrioritizedResourceManager* TiledLayer::ResourceManager() { | 237 PrioritizedResourceManager* TiledLayer::ResourceManager() { |
238 if (!layer_tree_host()) | 238 if (!layer_tree_host()) |
239 return NULL; | 239 return nullptr; |
240 return layer_tree_host()->contents_texture_manager(); | 240 return layer_tree_host()->contents_texture_manager(); |
241 } | 241 } |
242 | 242 |
243 const PrioritizedResource* TiledLayer::ResourceAtForTesting(int i, | 243 const PrioritizedResource* TiledLayer::ResourceAtForTesting(int i, |
244 int j) const { | 244 int j) const { |
245 UpdatableTile* tile = TileAt(i, j); | 245 UpdatableTile* tile = TileAt(i, j); |
246 if (!tile) | 246 if (!tile) |
247 return NULL; | 247 return nullptr; |
248 return tile->managed_resource(); | 248 return tile->managed_resource(); |
249 } | 249 } |
250 | 250 |
251 void TiledLayer::SetLayerTreeHost(LayerTreeHost* host) { | 251 void TiledLayer::SetLayerTreeHost(LayerTreeHost* host) { |
252 if (host && host != layer_tree_host()) { | 252 if (host && host != layer_tree_host()) { |
253 for (LayerTilingData::TileMap::const_iterator | 253 for (LayerTilingData::TileMap::const_iterator |
254 iter = tiler_->tiles().begin(); | 254 iter = tiler_->tiles().begin(); |
255 iter != tiler_->tiles().end(); | 255 iter != tiler_->tiles().end(); |
256 ++iter) { | 256 ++iter) { |
257 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); | 257 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second); |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 // Animation pre-paint. If the layer is small, try to paint it all | 705 // Animation pre-paint. If the layer is small, try to paint it all |
706 // immediately whether or not it is occluded, to avoid paint/upload | 706 // immediately whether or not it is occluded, to avoid paint/upload |
707 // hiccups while it is animating. | 707 // hiccups while it is animating. |
708 if (IsSmallAnimatedLayer()) { | 708 if (IsSmallAnimatedLayer()) { |
709 int left, top, right, bottom; | 709 int left, top, right, bottom; |
710 tiler_->ContentRectToTileIndices(gfx::Rect(content_bounds()), | 710 tiler_->ContentRectToTileIndices(gfx::Rect(content_bounds()), |
711 &left, | 711 &left, |
712 &top, | 712 &top, |
713 &right, | 713 &right, |
714 &bottom); | 714 &bottom); |
715 UpdateTiles(left, top, right, bottom, queue, NULL, &updated); | 715 UpdateTiles(left, top, right, bottom, queue, nullptr, &updated); |
716 if (updated) | 716 if (updated) |
717 return updated; | 717 return updated; |
718 // This was an attempt to paint the entire layer so if we fail it's okay, | 718 // This was an attempt to paint the entire layer so if we fail it's okay, |
719 // just fallback on painting visible etc. below. | 719 // just fallback on painting visible etc. below. |
720 failed_update_ = false; | 720 failed_update_ = false; |
721 } | 721 } |
722 | 722 |
723 if (predicted_visible_rect_.IsEmpty()) | 723 if (predicted_visible_rect_.IsEmpty()) |
724 return updated; | 724 return updated; |
725 | 725 |
(...skipping 10 matching lines...) Expand all Loading... |
736 if (skips_draw_ || updated) | 736 if (skips_draw_ || updated) |
737 return true; | 737 return true; |
738 | 738 |
739 // If we have already painting everything visible. Do some pre-painting while | 739 // If we have already painting everything visible. Do some pre-painting while |
740 // idle. | 740 // idle. |
741 gfx::Rect idle_paint_content_rect = IdlePaintRect(); | 741 gfx::Rect idle_paint_content_rect = IdlePaintRect(); |
742 if (idle_paint_content_rect.IsEmpty()) | 742 if (idle_paint_content_rect.IsEmpty()) |
743 return updated; | 743 return updated; |
744 | 744 |
745 // Prepaint anything that was occluded but inside the layer's visible region. | 745 // Prepaint anything that was occluded but inside the layer's visible region. |
746 if (!UpdateTiles(left, top, right, bottom, queue, NULL, &updated) || | 746 if (!UpdateTiles(left, top, right, bottom, queue, nullptr, &updated) || |
747 updated) | 747 updated) |
748 return updated; | 748 return updated; |
749 | 749 |
750 int prepaint_left, prepaint_top, prepaint_right, prepaint_bottom; | 750 int prepaint_left, prepaint_top, prepaint_right, prepaint_bottom; |
751 tiler_->ContentRectToTileIndices(idle_paint_content_rect, | 751 tiler_->ContentRectToTileIndices(idle_paint_content_rect, |
752 &prepaint_left, | 752 &prepaint_left, |
753 &prepaint_top, | 753 &prepaint_top, |
754 &prepaint_right, | 754 &prepaint_right, |
755 &prepaint_bottom); | 755 &prepaint_bottom); |
756 | 756 |
757 // Then expand outwards one row/column at a time until we find a dirty | 757 // Then expand outwards one row/column at a time until we find a dirty |
758 // row/column to update. Increment along the major and minor scroll directions | 758 // row/column to update. Increment along the major and minor scroll directions |
759 // first. | 759 // first. |
760 gfx::Vector2d delta = -predicted_scroll_; | 760 gfx::Vector2d delta = -predicted_scroll_; |
761 delta = gfx::Vector2d(delta.x() == 0 ? 1 : delta.x(), | 761 delta = gfx::Vector2d(delta.x() == 0 ? 1 : delta.x(), |
762 delta.y() == 0 ? 1 : delta.y()); | 762 delta.y() == 0 ? 1 : delta.y()); |
763 gfx::Vector2d major_delta = | 763 gfx::Vector2d major_delta = |
764 (std::abs(delta.x()) > std::abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) | 764 (std::abs(delta.x()) > std::abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) |
765 : gfx::Vector2d(0, delta.y()); | 765 : gfx::Vector2d(0, delta.y()); |
766 gfx::Vector2d minor_delta = | 766 gfx::Vector2d minor_delta = |
767 (std::abs(delta.x()) <= std::abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) | 767 (std::abs(delta.x()) <= std::abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) |
768 : gfx::Vector2d(0, delta.y()); | 768 : gfx::Vector2d(0, delta.y()); |
769 gfx::Vector2d deltas[4] = { major_delta, minor_delta, -major_delta, | 769 gfx::Vector2d deltas[4] = { major_delta, minor_delta, -major_delta, |
770 -minor_delta }; | 770 -minor_delta }; |
771 for (int i = 0; i < 4; i++) { | 771 for (int i = 0; i < 4; i++) { |
772 if (deltas[i].y() > 0) { | 772 if (deltas[i].y() > 0) { |
773 while (bottom < prepaint_bottom) { | 773 while (bottom < prepaint_bottom) { |
774 ++bottom; | 774 ++bottom; |
775 if (!UpdateTiles( | 775 if (!UpdateTiles( |
776 left, bottom, right, bottom, queue, NULL, &updated) || | 776 left, bottom, right, bottom, queue, nullptr, &updated) || |
777 updated) | 777 updated) |
778 return updated; | 778 return updated; |
779 } | 779 } |
780 } | 780 } |
781 if (deltas[i].y() < 0) { | 781 if (deltas[i].y() < 0) { |
782 while (top > prepaint_top) { | 782 while (top > prepaint_top) { |
783 --top; | 783 --top; |
784 if (!UpdateTiles( | 784 if (!UpdateTiles(left, top, right, top, queue, nullptr, &updated) || |
785 left, top, right, top, queue, NULL, &updated) || | |
786 updated) | 785 updated) |
787 return updated; | 786 return updated; |
788 } | 787 } |
789 } | 788 } |
790 if (deltas[i].x() < 0) { | 789 if (deltas[i].x() < 0) { |
791 while (left > prepaint_left) { | 790 while (left > prepaint_left) { |
792 --left; | 791 --left; |
793 if (!UpdateTiles( | 792 if (!UpdateTiles(left, top, left, bottom, queue, nullptr, &updated) || |
794 left, top, left, bottom, queue, NULL, &updated) || | |
795 updated) | 793 updated) |
796 return updated; | 794 return updated; |
797 } | 795 } |
798 } | 796 } |
799 if (deltas[i].x() > 0) { | 797 if (deltas[i].x() > 0) { |
800 while (right < prepaint_right) { | 798 while (right < prepaint_right) { |
801 ++right; | 799 ++right; |
802 if (!UpdateTiles( | 800 if (!UpdateTiles(right, top, right, bottom, queue, nullptr, &updated) || |
803 right, top, right, bottom, queue, NULL, &updated) || | |
804 updated) | 801 updated) |
805 return updated; | 802 return updated; |
806 } | 803 } |
807 } | 804 } |
808 } | 805 } |
809 return updated; | 806 return updated; |
810 } | 807 } |
811 | 808 |
812 void TiledLayer::OnOutputSurfaceCreated() { | 809 void TiledLayer::OnOutputSurfaceCreated() { |
813 // Ensure that all textures are of the right format. | 810 // Ensure that all textures are of the right format. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 gfx::Rect prepaint_rect = visible_content_rect(); | 860 gfx::Rect prepaint_rect = visible_content_rect(); |
864 prepaint_rect.Inset(-tiler_->tile_size().width() * kPrepaintColumns, | 861 prepaint_rect.Inset(-tiler_->tile_size().width() * kPrepaintColumns, |
865 -tiler_->tile_size().height() * kPrepaintRows); | 862 -tiler_->tile_size().height() * kPrepaintRows); |
866 gfx::Rect content_rect(content_bounds()); | 863 gfx::Rect content_rect(content_bounds()); |
867 prepaint_rect.Intersect(content_rect); | 864 prepaint_rect.Intersect(content_rect); |
868 | 865 |
869 return prepaint_rect; | 866 return prepaint_rect; |
870 } | 867 } |
871 | 868 |
872 } // namespace cc | 869 } // namespace cc |
OLD | NEW |