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

Unified Diff: cc/output/overlay_unittest.cc

Issue 2693023002: Use SwapBuffersWithBounds on Chromecast (Closed)
Patch Set: 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/output/overlay_unittest.cc
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index 8dcd8dd4b0baa0b6f273d9cd2aaff47e8b8517ce..fb82fe69f5a59270f5964fa2c32f6f8a5adb8da7 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -20,6 +20,7 @@
#include "cc/output/overlay_strategy_fullscreen.h"
#include "cc/output/overlay_strategy_single_on_top.h"
#include "cc/output/overlay_strategy_underlay.h"
+#include "cc/output/overlay_strategy_underlay_cast.h"
#include "cc/quads/render_pass.h"
#include "cc/quads/render_pass_draw_quad.h"
#include "cc/quads/solid_color_draw_quad.h"
@@ -130,6 +131,13 @@ class UnderlayOverlayValidator : public SingleOverlayValidator {
}
};
+class UnderlayCastOverlayValidator : public SingleOverlayValidator {
+ public:
+ void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
+ strategies->push_back(base::MakeUnique<OverlayStrategyUnderlayCast>(this));
+ }
+};
+
class DefaultOverlayProcessor : public OverlayProcessor {
public:
explicit DefaultOverlayProcessor(OutputSurface* surface);
@@ -302,6 +310,16 @@ void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false);
}
+void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
+ const SharedQuadState* shared_quad_state,
+ RenderPass* render_pass,
+ const gfx::Rect& rect,
+ SkColor color) {
+ SolidColorDrawQuad* color_quad =
+ render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ color_quad->SetNew(shared_quad_state, rect, rect, color, false);
+}
+
void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider,
const SharedQuadState* shared_quad_state,
RenderPass* render_pass) {
@@ -370,6 +388,7 @@ class OverlayTest : public testing::Test {
typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest;
typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest;
+typedef OverlayTest<UnderlayCastOverlayValidator> UnderlayCastTest;
danakj 2017/02/14 17:28:58 using instead of typedef
halliwell 2017/02/15 22:29:04 Done.
typedef OverlayTest<CALayerValidator> CALayerOverlayTest;
TEST(OverlayTest, NoOverlaysByDefault) {
@@ -1221,6 +1240,119 @@ TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) {
EXPECT_TRUE(damage_rect_.IsEmpty());
}
+TEST_F(UnderlayCastTest, NoOverlayDamageRect) {
danakj 2017/02/14 17:28:58 These tests are named for damage rects but that se
danakj 2017/02/14 17:32:35 .. but then should they be testing the damage rect
halliwell 2017/02/15 22:29:04 They are mis-named (I copied them over from previo
+ std::unique_ptr<RenderPass> pass = CreateRenderPass();
+
+ CreateOpaqueQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayTopLeftRect);
+
+ OverlayCandidateList candidate_list;
+ RenderPassFilterList render_pass_filters;
+ RenderPassFilterList render_pass_background_filters;
+ overlay_processor_->ProcessForOverlays(
+ resource_provider_.get(), pass.get(), render_pass_filters,
+ render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
+
+ std::vector<gfx::Rect> content_bounds;
+ overlay_processor_->GetContentBounds(&content_bounds);
+ EXPECT_EQ(0U, content_bounds.size());
+}
+
+TEST_F(UnderlayCastTest, FullScreenOverlayDamageRect) {
+ std::unique_ptr<RenderPass> pass = CreateRenderPass();
+ CreateCandidateQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayRect);
+
+ OverlayCandidateList candidate_list;
+ RenderPassFilterList render_pass_filters;
+ RenderPassFilterList render_pass_background_filters;
+ overlay_processor_->ProcessForOverlays(
+ resource_provider_.get(), pass.get(), render_pass_filters,
+ render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
+
+ std::vector<gfx::Rect> content_bounds;
+ overlay_processor_->GetContentBounds(&content_bounds);
+ EXPECT_EQ(1U, content_bounds.size());
+ EXPECT_TRUE(content_bounds[0].IsEmpty());
danakj 2017/02/14 17:32:35 What is the difference between swapping an empty r
halliwell 2017/02/15 22:29:04 I clarified in the comment on OutputFrame. Empty
+}
+
+TEST_F(UnderlayCastTest, BlackOutsideOverlayDamageRect) {
+ const gfx::Rect kLeftSide(0, 0, 128, 256);
+ const gfx::Rect kTopRight(128, 0, 128, 128);
+
+ std::unique_ptr<RenderPass> pass = CreateRenderPass();
+ CreateCandidateQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayBottomRightRect);
+ CreateOpaqueQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(), kLeftSide,
+ SK_ColorBLACK);
+ CreateOpaqueQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(), kTopRight,
+ SK_ColorBLACK);
+
+ OverlayCandidateList candidate_list;
+ RenderPassFilterList render_pass_filters;
+ RenderPassFilterList render_pass_background_filters;
+ overlay_processor_->ProcessForOverlays(
+ resource_provider_.get(), pass.get(), render_pass_filters,
+ render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
+
+ std::vector<gfx::Rect> content_bounds;
+ overlay_processor_->GetContentBounds(&content_bounds);
+ EXPECT_EQ(1U, content_bounds.size());
+ EXPECT_TRUE(content_bounds[0].IsEmpty());
+}
+
+TEST_F(UnderlayCastTest, OverlayOccludedDamageRect) {
+ std::unique_ptr<RenderPass> pass = CreateRenderPass();
+ CreateOpaqueQuadAt(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);
+
+ OverlayCandidateList candidate_list;
+ RenderPassFilterList render_pass_filters;
+ RenderPassFilterList render_pass_background_filters;
+ overlay_processor_->ProcessForOverlays(
+ resource_provider_.get(), pass.get(), render_pass_filters,
+ render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
+
+ std::vector<gfx::Rect> content_bounds;
+ overlay_processor_->GetContentBounds(&content_bounds);
+ EXPECT_EQ(1U, content_bounds.size());
+ EXPECT_EQ(kOverlayTopLeftRect, content_bounds[0]);
+}
+
+TEST_F(UnderlayCastTest, OverlayOccludedUnionDamageRect) {
+ std::unique_ptr<RenderPass> pass = CreateRenderPass();
+ CreateOpaqueQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayTopLeftRect);
+ CreateOpaqueQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayBottomRightRect);
+ CreateCandidateQuadAt(resource_provider_.get(),
+ pass->shared_quad_state_list.back(), pass.get(),
+ kOverlayRect);
+
+ OverlayCandidateList candidate_list;
+ RenderPassFilterList render_pass_filters;
+ RenderPassFilterList render_pass_background_filters;
+ overlay_processor_->ProcessForOverlays(
+ resource_provider_.get(), pass.get(), render_pass_filters,
+ render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
+
+ std::vector<gfx::Rect> content_bounds;
+ overlay_processor_->GetContentBounds(&content_bounds);
+ EXPECT_EQ(1U, content_bounds.size());
+ EXPECT_EQ(kOverlayRect, content_bounds[0]);
+}
+
OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
OverlayCandidateList list;
OverlayCandidate output_surface_plane;

Powered by Google App Engine
This is Rietveld 408576698