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

Unified Diff: cc/layers/surface_layer_impl_unittest.cc

Issue 2673813002: Changes the bounds being sent for occlusion from physical pixels to DIP (Closed)
Patch Set: Resolving comments Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: cc/layers/surface_layer_impl_unittest.cc
diff --git a/cc/layers/surface_layer_impl_unittest.cc b/cc/layers/surface_layer_impl_unittest.cc
index 1747e1be63c2eef846c56670b7968424c54732f5..321557909b4a03ef0cc06e32a2dc2ccdd9dd96cb 100644
--- a/cc/layers/surface_layer_impl_unittest.cc
+++ b/cc/layers/surface_layer_impl_unittest.cc
@@ -8,6 +8,7 @@
#include "cc/layers/append_quads_data.h"
#include "cc/test/layer_test_common.h"
+#include "cc/trees/layer_tree_host_common.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
@@ -15,6 +16,77 @@ namespace {
static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1);
+TEST(SurfaceLayerImplTest, OcclusionWithDeviceScaleFactor) {
+ float device_scale_factor = 1.25f;
+
+ gfx::Size layer_size(1000, 1000);
+ gfx::Size scaled_surface_size(
+ gfx::ScaleToCeiledSize(layer_size, device_scale_factor));
+ gfx::Size viewport_size(1250, 1325);
+
+ const LocalSurfaceId kArbitraryLocalSurfaceId(
+ 9, base::UnguessableToken::Create());
+
+ LayerTestCommon::LayerImplTest impl;
+
+ SurfaceLayerImpl* surface_layer_impl =
+ impl.AddChildToRoot<SurfaceLayerImpl>();
+ surface_layer_impl->SetBounds(layer_size);
+ surface_layer_impl->SetDrawsContent(true);
+ SurfaceId surface_id(kArbitraryFrameSinkId, kArbitraryLocalSurfaceId);
+ surface_layer_impl->SetSurfaceInfo(
+ SurfaceInfo(surface_id, device_scale_factor, scaled_surface_size));
+
+ LayerImplList layer_list;
+ LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
+ impl.root_layer_for_testing(), viewport_size, device_scale_factor,
+ &layer_list);
+ LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
+
+ {
+ SCOPED_TRACE("No occlusion");
+ gfx::Rect occluded;
+ impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
+
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(
+ impl.quad_list(), gfx::Rect(scaled_surface_size));
+ EXPECT_EQ(1u, impl.quad_list().size());
+ }
+
+ {
+ SCOPED_TRACE("Full occlusion");
+ gfx::Rect occluded(scaled_surface_size);
+ impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
+
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
+ EXPECT_EQ(impl.quad_list().size(), 0u);
+ }
+
+ {
+ SCOPED_TRACE("Partial occlusion");
+ gfx::Rect occluded(gfx::ScaleToEnclosingRect(gfx::Rect(200, 0, 800, 1000),
+ device_scale_factor));
+ impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
+
+ size_t partially_occluded_count = 0;
+ LayerTestCommon::VerifyQuadsAreOccluded(impl.quad_list(), occluded,
+ &partially_occluded_count);
+ // The layer outputs one quad, which is partially occluded.
+ EXPECT_EQ(1u, impl.quad_list().size());
+ EXPECT_EQ(1u, partially_occluded_count);
+ }
+ {
+ SCOPED_TRACE("No outside occlusion");
+ gfx::Rect occluded(gfx::ScaleToEnclosingRect(gfx::Rect(0, 1000, 1250, 300),
+ device_scale_factor));
+ impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded);
+
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(
+ impl.quad_list(), gfx::Rect(scaled_surface_size));
+ EXPECT_EQ(1u, impl.quad_list().size());
+ }
+}
+
TEST(SurfaceLayerImplTest, Occlusion) {
gfx::Size layer_size(1000, 1000);
gfx::Size viewport_size(1000, 1000);

Powered by Google App Engine
This is Rietveld 408576698