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

Unified Diff: cc/output/overlay_unittest.cc

Issue 1430813002: cc: Fork OverlayCandidate to CALayerOverlay (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master1
Patch Set: Rebase Created 5 years, 1 month 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
« no previous file with comments | « cc/output/overlay_strategy_all_or_nothing.cc ('k') | cc/test/fake_output_surface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/overlay_unittest.cc
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index dd325bd0c5a26b8ae5d2836542d8c2bceab5704c..29403eea99e009823a575fc53fd47afb9d536073 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -10,7 +10,6 @@
#include "cc/output/output_surface_client.h"
#include "cc/output/overlay_candidate_validator.h"
#include "cc/output/overlay_processor.h"
-#include "cc/output/overlay_strategy_all_or_nothing.h"
#include "cc/output/overlay_strategy_sandwich.h"
#include "cc/output/overlay_strategy_single_on_top.h"
#include "cc/output/overlay_strategy_underlay.h"
@@ -64,6 +63,7 @@ class SingleOverlayValidator : public OverlayCandidateValidator {
make_scoped_ptr(new OverlayStrategySingleOnTop(this)));
strategies->push_back(make_scoped_ptr(new OverlayStrategyUnderlay(this)));
}
+ bool AllowCALayerOverlays() override { return false; }
void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
// We may have 1 or 2 surfaces depending on whether this ran through the
// full renderer and picked up the output surface, or not.
@@ -91,6 +91,13 @@ class SingleOverlayValidator : public OverlayCandidateValidator {
}
};
+class CALayerValidator : public OverlayCandidateValidator {
+ public:
+ void GetStrategies(OverlayProcessor::StrategyList* strategies) override {}
+ bool AllowCALayerOverlays() override { return true; }
+ void CheckOverlaySupport(OverlayCandidateList* surfaces) override {}
+};
+
class SingleOnTopOverlayValidator : public SingleOverlayValidator {
public:
void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
@@ -111,18 +118,7 @@ class SandwichOverlayValidator : public OverlayCandidateValidator {
void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
strategies->push_back(make_scoped_ptr(new OverlayStrategySandwich(this)));
}
- void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
- for (OverlayCandidate& candidate : *surfaces)
- candidate.overlay_handled = true;
- }
-};
-
-class AllOrNothingOverlayValidator : public OverlayCandidateValidator {
- public:
- void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
- strategies->push_back(
- make_scoped_ptr(new OverlayStrategyAllOrNothing(this)));
- }
+ bool AllowCALayerOverlays() override { return false; }
void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
for (OverlayCandidate& candidate : *surfaces)
candidate.overlay_handled = true;
@@ -370,7 +366,7 @@ class OverlayTest : public testing::Test {
typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest;
typedef OverlayTest<SandwichOverlayValidator> SandwichTest;
-typedef OverlayTest<AllOrNothingOverlayValidator> AllOrNothingOverlayTest;
+typedef OverlayTest<CALayerValidator> CALayerOverlayTest;
TEST(OverlayTest, NoOverlaysByDefault) {
scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
@@ -1327,90 +1323,137 @@ TEST_F(UnderlayTest, DamageRect) {
DCHECK(!damage_rect_.IsEmpty());
}
-TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) {
- scoped_ptr<RenderPass> pass = CreateRenderPass();
+OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
+ OverlayCandidateList list;
+ OverlayCandidate output_surface_plane;
+ output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect);
+ output_surface_plane.quad_rect_in_target_space =
+ root_render_pass->output_rect;
+ output_surface_plane.use_output_surface_for_resource = true;
+ output_surface_plane.overlay_handled = true;
+ list.push_back(output_surface_plane);
+ return list;
+}
- // Add two overlapping candidates.
- CreateCandidateQuadAt(resource_provider_.get(),
- pass->shared_quad_state_list.back(), pass.get(),
- kOverlayTopLeftRect);
- CreateCandidateQuadAt(resource_provider_.get(),
- pass->shared_quad_state_list.back(), pass.get(),
- kOverlayRect);
+TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) {
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+ CreateFullscreenCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back(),
+ pass.get());
+ pass->shared_quad_state_list.back()
+ ->quad_to_target_transform.RotateAboutZAxis(45.f);
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- OverlayCandidateList candidates;
- overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
- &candidates, &damage_rect_);
-
- // Both quads should become overlays.
- EXPECT_EQ(2u, candidates.size());
- EXPECT_EQ(-1, candidates[0].plane_z_order);
- EXPECT_EQ(-2, candidates[1].plane_z_order);
- EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect);
- EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect);
-
- // All quads should be gone.
- EXPECT_TRUE(pass_list.back()->quad_list.empty());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(0U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(0U, overlay_list.size());
+ EXPECT_EQ(1U, ca_layer_list.size());
}
-TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) {
+TEST_F(CALayerOverlayTest, Disallow3DTransform) {
scoped_ptr<RenderPass> pass = CreateRenderPass();
+ CreateFullscreenCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back(),
+ pass.get());
+ pass->shared_quad_state_list.back()
+ ->quad_to_target_transform.RotateAboutXAxis(45.f);
- CreateCandidateQuadAt(resource_provider_.get(),
- pass->shared_quad_state_list.back(), pass.get(),
- kOverlayTopLeftRect);
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(1U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(1U, overlay_list.size());
+ EXPECT_EQ(0U, ca_layer_list.size());
+}
- // Add a rotated quad that can't be promoted into overlay.
- SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
- shared_state->opacity = 1.f;
- shared_state->quad_to_target_transform.Rotate(90);
- CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
- kOverlayBottomRightRect);
+TEST_F(CALayerOverlayTest, AllowContainingClip) {
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+ CreateFullscreenCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back(),
+ pass.get());
+ pass->shared_quad_state_list.back()->is_clipped = true;
+ pass->shared_quad_state_list.back()->clip_rect = kOverlayRect;
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- OverlayCandidateList candidates;
- overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
- &candidates, &damage_rect_);
-
- // No quads should become overlays.
- EXPECT_EQ(0u, candidates.size());
- EXPECT_EQ(2u, pass_list.back()->quad_list.size());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(0U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(0U, overlay_list.size());
+ EXPECT_EQ(1U, ca_layer_list.size());
}
-TEST_F(AllOrNothingOverlayTest, DamageRect) {
+TEST_F(CALayerOverlayTest, SkipDisjointClip) {
scoped_ptr<RenderPass> pass = CreateRenderPass();
CreateFullscreenCandidateQuad(resource_provider_.get(),
pass->shared_quad_state_list.back(),
pass.get());
+ pass->shared_quad_state_list.back()->is_clipped = true;
+ pass->shared_quad_state_list.back()->clip_rect =
+ gfx::Rect(128, 128, 128, 128);
- damage_rect_ = kOverlayRect;
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(0U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(0U, overlay_list.size());
+ EXPECT_EQ(0U, ca_layer_list.size());
+}
- // Add something behind it.
- CreateFullscreenOpaqueQuad(resource_provider_.get(),
- pass->shared_quad_state_list.back(), pass.get());
- CreateFullscreenOpaqueQuad(resource_provider_.get(),
- pass->shared_quad_state_list.back(), pass.get());
+TEST_F(CALayerOverlayTest, DisallowNontrivialClip) {
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+ CreateFullscreenCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back(),
+ pass.get());
+ pass->shared_quad_state_list.back()->is_clipped = true;
+ pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128);
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
- // Check for potential candidates.
- OverlayCandidateList candidate_list;
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(1U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(1U, overlay_list.size());
+ EXPECT_EQ(0U, ca_layer_list.size());
+}
- // Primary plane.
- OverlayCandidate output_surface_plane;
- output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
- output_surface_plane.quad_rect_in_target_space = kOverlayRect;
- output_surface_plane.use_output_surface_for_resource = true;
- output_surface_plane.overlay_handled = true;
- candidate_list.push_back(output_surface_plane);
+TEST_F(CALayerOverlayTest, SkipTransparent) {
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+ CreateFullscreenCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back(),
+ pass.get());
+ pass->shared_quad_state_list.back()->opacity = 0;
- overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
- &candidate_list, &damage_rect_);
- DCHECK(!damage_rect_.IsEmpty());
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+ CALayerOverlayList ca_layer_list;
+ OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
+ overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list,
+ &ca_layer_list, &overlay_list);
+ ASSERT_EQ(1U, pass_list.size());
+ EXPECT_EQ(0U, pass_list.back()->quad_list.size());
+ EXPECT_EQ(0U, overlay_list.size());
+ EXPECT_EQ(0U, ca_layer_list.size());
}
class OverlayInfoRendererGL : public GLRenderer {
« no previous file with comments | « cc/output/overlay_strategy_all_or_nothing.cc ('k') | cc/test/fake_output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698