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

Side by Side Diff: cc/layers/tiled_layer_unittest.cc

Issue 567743003: Fix bad scaling in TiledLayer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge to trunk Created 6 years, 3 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
« no previous file with comments | « cc/layers/tiled_layer.cc ('k') | cc/resources/bitmap_content_layer_updater.h » ('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 "cc/layers/tiled_layer.h" 5 #include "cc/layers/tiled_layer.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 layer->InvalidateContentRect(gfx::Rect(0, 0, 100, 200)); 282 layer->InvalidateContentRect(gfx::Rect(0, 0, 100, 200));
283 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); 283 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
284 UpdateAndPush(layer, layer_impl); 284 UpdateAndPush(layer, layer_impl);
285 285
286 // We should only have the first tile since the other tile was invalidated but 286 // We should only have the first tile since the other tile was invalidated but
287 // not painted. 287 // not painted.
288 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); 288 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0));
289 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1)); 289 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1));
290 } 290 }
291 291
292 TEST_F(TiledLayerTest, Scale) {
293 layer_tree_host_->SetDeviceScaleFactor(1.5);
294
295 scoped_refptr<FakeTiledLayer> layer =
296 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
297 scoped_ptr<FakeTiledLayerImpl> layer_impl =
298 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1));
299 RenderSurfaceLayerList render_surface_layer_list;
300
301 layer_tree_host_->root_layer()->AddChild(layer);
302
303 layer->SetBounds(gfx::Size(100, 200));
304 CalcDrawProps(&render_surface_layer_list);
305
306 // Change the width so that it doesn't divide cleanly by the scale.
307 layer->SetBounds(gfx::Size(101, 200));
308 UpdateAndPush(layer, layer_impl);
309
310 EXPECT_EQ(1.5, layer->fake_layer_updater()->last_contents_width_scale());
311 }
312
292 TEST_F(TiledLayerTest, PushOccludedDirtyTiles) { 313 TEST_F(TiledLayerTest, PushOccludedDirtyTiles) {
293 scoped_refptr<FakeTiledLayer> layer = 314 scoped_refptr<FakeTiledLayer> layer =
294 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); 315 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
295 scoped_ptr<FakeTiledLayerImpl> layer_impl = 316 scoped_ptr<FakeTiledLayerImpl> layer_impl =
296 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); 317 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1));
297 TestOcclusionTracker occluded; 318 TestOcclusionTracker occluded;
298 occlusion_ = &occluded; 319 occlusion_ = &occluded;
299 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); 320 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000));
300 321
301 layer_tree_host_->root_layer()->AddChild(layer); 322 layer_tree_host_->root_layer()->AddChild(layer);
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 886
866 TEST_F(TiledLayerTest, VerifyUpdateRectWhenContentBoundsAreScaled) { 887 TEST_F(TiledLayerTest, VerifyUpdateRectWhenContentBoundsAreScaled) {
867 // The update rect (that indicates what was actually painted) should be in 888 // The update rect (that indicates what was actually painted) should be in
868 // layer space, not the content space. 889 // layer space, not the content space.
869 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr( 890 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr(
870 new FakeTiledLayerWithScaledBounds(resource_manager_.get())); 891 new FakeTiledLayerWithScaledBounds(resource_manager_.get()));
871 892
872 layer_tree_host_->root_layer()->AddChild(layer); 893 layer_tree_host_->root_layer()->AddChild(layer);
873 894
874 gfx::Rect layer_bounds(0, 0, 300, 200); 895 gfx::Rect layer_bounds(0, 0, 300, 200);
875 gfx::Rect content_bounds(0, 0, 200, 250); 896 gfx::Rect content_bounds(0, 0, 150, 250);
876 897
877 layer->SetBounds(layer_bounds.size()); 898 layer->SetBounds(layer_bounds.size());
878 layer->SetContentBounds(content_bounds.size()); 899 layer->SetContentBounds(content_bounds.size());
879 layer->draw_properties().visible_content_rect = content_bounds; 900 layer->draw_properties().visible_content_rect = content_bounds;
901 layer->draw_properties().contents_scale_x = .5f;
902 layer->draw_properties().contents_scale_y = 1.25f;
880 903
881 // On first update, the update_rect includes all tiles, even beyond the 904 // On first update, the update_rect includes all tiles, even beyond the
882 // boundaries of the layer. 905 // boundaries of the layer.
883 // However, it should still be in layer space, not content space. 906 // However, it should still be in layer space, not content space.
884 layer->InvalidateContentRect(content_bounds); 907 layer->InvalidateContentRect(content_bounds);
885 908
886 layer->SetTexturePriorities(priority_calculator_); 909 layer->SetTexturePriorities(priority_calculator_);
887 resource_manager_->PrioritizeTextures(); 910 resource_manager_->PrioritizeTextures();
888 layer->SavePaintProperties(); 911 layer->SavePaintProperties();
889 layer->Update(queue_.get(), NULL); 912 layer->Update(queue_.get(), NULL);
890 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 300, 300 * 0.8), layer->update_rect()); 913
914 // Update rect is 200x300 (tile size of 100x100). Scaled this gives 400x240.
915 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 400, 240), layer->update_rect());
891 UpdateTextures(); 916 UpdateTextures();
892 917
893 // After the tiles are updated once, another invalidate only needs to update 918 // After the tiles are updated once, another invalidate only needs to update
894 // the bounds of the layer. 919 // the bounds of the layer.
895 layer->SetTexturePriorities(priority_calculator_); 920 layer->SetTexturePriorities(priority_calculator_);
896 resource_manager_->PrioritizeTextures(); 921 resource_manager_->PrioritizeTextures();
897 layer->InvalidateContentRect(content_bounds); 922 layer->InvalidateContentRect(content_bounds);
898 layer->SavePaintProperties(); 923 layer->SavePaintProperties();
899 layer->Update(queue_.get(), NULL); 924 layer->Update(queue_.get(), NULL);
900 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layer_bounds), layer->update_rect()); 925 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layer_bounds), layer->update_rect());
901 UpdateTextures(); 926 UpdateTextures();
902 927
903 // Partial re-paint should also be represented by the update rect in layer 928 // Partial re-paint should also be represented by the update rect in layer
904 // space, not content space. 929 // space, not content space.
905 gfx::Rect partial_damage(30, 100, 10, 10); 930 gfx::Rect partial_damage(30, 100, 10, 10);
906 layer->InvalidateContentRect(partial_damage); 931 layer->InvalidateContentRect(partial_damage);
907 layer->SetTexturePriorities(priority_calculator_); 932 layer->SetTexturePriorities(priority_calculator_);
908 resource_manager_->PrioritizeTextures(); 933 resource_manager_->PrioritizeTextures();
909 layer->SavePaintProperties(); 934 layer->SavePaintProperties();
910 layer->Update(queue_.get(), NULL); 935 layer->Update(queue_.get(), NULL);
911 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->update_rect()); 936 EXPECT_FLOAT_RECT_EQ(gfx::RectF(60, 80, 20, 8), layer->update_rect());
912 } 937 }
913 938
914 TEST_F(TiledLayerTest, VerifyInvalidationWhenContentsScaleChanges) { 939 TEST_F(TiledLayerTest, VerifyInvalidationWhenContentsScaleChanges) {
915 scoped_refptr<FakeTiledLayer> layer = 940 scoped_refptr<FakeTiledLayer> layer =
916 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); 941 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
917 scoped_ptr<FakeTiledLayerImpl> layer_impl = 942 scoped_ptr<FakeTiledLayerImpl> layer_impl =
918 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); 943 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1));
919 RenderSurfaceLayerList render_surface_layer_list; 944 RenderSurfaceLayerList render_surface_layer_list;
920 945
921 layer_tree_host_->root_layer()->AddChild(layer); 946 layer_tree_host_->root_layer()->AddChild(layer);
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 layer->tracking_layer_painter()->ResetPaintedRect(); 1710 layer->tracking_layer_painter()->ResetPaintedRect();
1686 1711
1687 EXPECT_RECT_EQ(gfx::Rect(), layer->tracking_layer_painter()->PaintedRect()); 1712 EXPECT_RECT_EQ(gfx::Rect(), layer->tracking_layer_painter()->PaintedRect());
1688 UpdateTextures(); 1713 UpdateTextures();
1689 1714
1690 // Invalidate the entire layer in content space. When painting, the rect given 1715 // Invalidate the entire layer in content space. When painting, the rect given
1691 // to webkit should match the layer's bounds. 1716 // to webkit should match the layer's bounds.
1692 layer->InvalidateContentRect(content_rect); 1717 layer->InvalidateContentRect(content_rect);
1693 layer->Update(queue_.get(), NULL); 1718 layer->Update(queue_.get(), NULL);
1694 1719
1695 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); 1720 // Rounding leads to an extra pixel.
1721 gfx::Rect expanded_layer_rect(layer_rect);
1722 expanded_layer_rect.set_height(32);
1723 EXPECT_RECT_EQ(expanded_layer_rect,
1724 layer->tracking_layer_painter()->PaintedRect());
1696 } 1725 }
1697 1726
1698 TEST_F(TiledLayerTest, 1727 TEST_F(TiledLayerTest,
1699 NonIntegerContentsScaleIsNotDistortedDuringInvalidation) { 1728 NonIntegerContentsScaleIsNotDistortedDuringInvalidation) {
1700 scoped_refptr<UpdateTrackingTiledLayer> layer = 1729 scoped_refptr<UpdateTrackingTiledLayer> layer =
1701 make_scoped_refptr(new UpdateTrackingTiledLayer(resource_manager_.get())); 1730 make_scoped_refptr(new UpdateTrackingTiledLayer(resource_manager_.get()));
1702 1731
1703 layer_tree_host_->root_layer()->AddChild(layer); 1732 layer_tree_host_->root_layer()->AddChild(layer);
1704 1733
1705 gfx::Rect layer_rect(0, 0, 30, 31); 1734 gfx::Rect layer_rect(0, 0, 30, 31);
(...skipping 14 matching lines...) Expand all
1720 layer->tracking_layer_painter()->ResetPaintedRect(); 1749 layer->tracking_layer_painter()->ResetPaintedRect();
1721 1750
1722 EXPECT_RECT_EQ(gfx::Rect(), layer->tracking_layer_painter()->PaintedRect()); 1751 EXPECT_RECT_EQ(gfx::Rect(), layer->tracking_layer_painter()->PaintedRect());
1723 UpdateTextures(); 1752 UpdateTextures();
1724 1753
1725 // Invalidate the entire layer in layer space. When painting, the rect given 1754 // Invalidate the entire layer in layer space. When painting, the rect given
1726 // to webkit should match the layer's bounds. 1755 // to webkit should match the layer's bounds.
1727 layer->SetNeedsDisplayRect(layer_rect); 1756 layer->SetNeedsDisplayRect(layer_rect);
1728 layer->Update(queue_.get(), NULL); 1757 layer->Update(queue_.get(), NULL);
1729 1758
1730 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); 1759 // Rounding leads to an extra pixel.
1760 gfx::Rect expanded_layer_rect(layer_rect);
1761 expanded_layer_rect.set_height(32);
1762 EXPECT_RECT_EQ(expanded_layer_rect,
1763 layer->tracking_layer_painter()->PaintedRect());
1731 } 1764 }
1732 1765
1733 } // namespace 1766 } // namespace
1734 } // namespace cc 1767 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/tiled_layer.cc ('k') | cc/resources/bitmap_content_layer_updater.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698