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

Unified Diff: cc/output/overlay_unittest.cc

Issue 208213003: Plumb overlay processing into DirectRenderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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
« cc/output/direct_renderer.cc ('K') | « cc/output/overlay_processor.cc ('k') | no next file » | 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 ab22cb485508442ad778d6188befc7fb53f5d2ef..8360a37039b60834020a6d416cc5948b62407f0f 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "cc/base/scoped_ptr_vector.h"
+#include "cc/output/gl_renderer.h"
#include "cc/output/output_surface.h"
#include "cc/output/output_surface_client.h"
#include "cc/output/overlay_candidate_validator.h"
@@ -16,8 +17,12 @@
#include "cc/test/fake_output_surface_client.h"
#include "cc/test/geometry_test_utils.h"
#include "cc/test/test_context_provider.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using testing::_;
+using testing::Mock;
+
namespace cc {
namespace {
@@ -252,7 +257,7 @@ TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
pass_list.push_back(pass.Pass());
// Check for potential candidates.
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_TRUE(overlay_processor_->ProcessForOverlays(&pass_list));
// This should have one more pass with an overlay.
ASSERT_EQ(2U, pass_list.size());
@@ -283,7 +288,7 @@ TEST_F(SingleOverlayOnTopTest, NoCandidates) {
RenderPassList original_pass_list;
RenderPass::CopyAll(pass_list, &original_pass_list);
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
// There should be nothing new here.
CompareRenderPassLists(pass_list, original_pass_list);
}
@@ -306,7 +311,7 @@ TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
RenderPassList original_pass_list;
RenderPass::CopyAll(pass_list, &original_pass_list);
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
// There should be nothing new here.
CompareRenderPassLists(pass_list, original_pass_list);
}
@@ -331,7 +336,7 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
pass_list.push_back(pass.Pass());
// Check for potential candidates.
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_TRUE(overlay_processor_->ProcessForOverlays(&pass_list));
// This should have one more pass with an overlay.
ASSERT_EQ(3U, pass_list.size());
@@ -346,7 +351,7 @@ TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
@@ -360,7 +365,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlending) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
@@ -374,7 +379,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
@@ -388,7 +393,7 @@ TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
@@ -402,7 +407,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
@@ -417,10 +422,179 @@ TEST_F(SingleOverlayOnTopTest, RejectTransform) {
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- overlay_processor_->ProcessForOverlays(&pass_list);
+ EXPECT_FALSE(overlay_processor_->ProcessForOverlays(&pass_list));
ASSERT_EQ(1U, pass_list.size());
EXPECT_EQ(RenderPass::NO_OVERLAY, pass_list.back()->overlay_state);
}
+class OverlayInfoRendererGL : public GLRenderer {
+ public:
+ OverlayInfoRendererGL(RendererClient* client,
+ const LayerTreeSettings* settings,
+ OutputSurface* output_surface,
+ ResourceProvider* resource_provider)
+ : GLRenderer(client,
+ settings,
+ output_surface,
+ resource_provider,
+ NULL,
+ 0),
+ expect_overlays_(false) {}
+
+ MOCK_METHOD2(DoDrawQuad, void(DrawingFrame* frame, const DrawQuad* quad));
+
+ virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE {
+ if (!expect_overlays_) {
+ EXPECT_TRUE(frame->render_passes_in_draw_order == NULL);
+ EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
+ return;
+ }
+
+ ASSERT_TRUE(frame->render_passes_in_draw_order != NULL);
+ ASSERT_EQ(2U, frame->render_passes_in_draw_order->size());
+
+ const RenderPass* overlay_pass =
+ frame->render_passes_in_draw_order->front();
+ EXPECT_EQ(RenderPass::SIMPLE_OVERLAY, overlay_pass->overlay_state);
+ EXPECT_EQ(RenderPass::NO_OVERLAY, frame->root_render_pass->overlay_state);
+
+ // Check that the quad is what we expect it to be.
+ EXPECT_EQ(1U, overlay_pass->quad_list.size());
+ const DrawQuad* overlay_quad = overlay_pass->quad_list.front();
+ EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, overlay_quad->material);
+ }
+
+ void set_expect_overlays(bool expect_overlays) {
+ expect_overlays_ = expect_overlays;
+ }
+
+ private:
+ bool expect_overlays_;
+};
+
+class FakeRendererClient : public RendererClient {
+ public:
+ // RendererClient methods.
+ virtual void SetFullRootLayerDamage() OVERRIDE {}
+};
+
+class GLRendererWithOverlaysTest : public testing::Test {
+ protected:
+ GLRendererWithOverlaysTest() {
+ provider_ = TestContextProvider::Create();
+ output_surface_.reset(new OverlayOutputSurface(provider_));
+ CHECK(output_surface_->BindToClient(&output_surface_client_));
+ resource_provider_ =
+ ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
+ }
+
+ void Init(bool use_validator) {
+ if (use_validator)
+ output_surface_->InitWithSingleOverlayValidator();
+
+ renderer_ =
+ make_scoped_ptr(new OverlayInfoRendererGL(&renderer_client_,
+ &settings_,
+ output_surface_.get(),
+ resource_provider_.get()));
+ }
+
+ LayerTreeSettings settings_;
+ FakeOutputSurfaceClient output_surface_client_;
+ scoped_ptr<OverlayOutputSurface> output_surface_;
+ FakeRendererClient renderer_client_;
+ scoped_ptr<ResourceProvider> resource_provider_;
+ scoped_ptr<OverlayInfoRendererGL> renderer_;
+ scoped_refptr<TestContextProvider> provider_;
+};
+
+TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) {
+ bool use_validator = true;
+ Init(use_validator);
+ renderer_->set_expect_overlays(true);
+ gfx::Rect viewport_rect(16, 16);
+
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+
+ pass->quad_list.push_back(
+ CreateCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back())
+ .PassAs<DrawQuad>());
+
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+
+ // Candidate pass was taken out and extra skipped pass added,
+ // so only draw 2 quads.
+ EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(2);
+ renderer_->DrawFrame(
+ &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
+
+ Mock::VerifyAndClearExpectations(renderer_.get());
+}
+
+TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) {
+ bool use_validator = true;
+ Init(use_validator);
+ renderer_->set_expect_overlays(false);
+ gfx::Rect viewport_rect(16, 16);
+
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+
+ pass->quad_list.push_back(
+ CreateCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back())
+ .PassAs<DrawQuad>());
+
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+
+ // 3 quads in the pass, all should draw.
+ EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
+ renderer_->DrawFrame(
+ &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
+
+ Mock::VerifyAndClearExpectations(renderer_.get());
+}
+
+TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) {
+ bool use_validator = false;
+ Init(use_validator);
+ renderer_->set_expect_overlays(false);
+ gfx::Rect viewport_rect(16, 16);
+
+ scoped_ptr<RenderPass> pass = CreateRenderPass();
+
+ pass->quad_list.push_back(
+ CreateCandidateQuad(resource_provider_.get(),
+ pass->shared_quad_state_list.back())
+ .PassAs<DrawQuad>());
+
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+ pass->quad_list.push_back(CreateCheckeredQuad(
+ resource_provider_.get(), pass->shared_quad_state_list.back()));
+
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+
+ // Should see no overlays.
+ EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(3);
+ renderer_->DrawFrame(
+ &pass_list, NULL, 1.f, viewport_rect, viewport_rect, false);
+
+ Mock::VerifyAndClearExpectations(renderer_.get());
+}
+
} // namespace
} // namespace cc
« cc/output/direct_renderer.cc ('K') | « cc/output/overlay_processor.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698