| Index: cc/output/overlay_unittest.cc
|
| diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
|
| deleted file mode 100644
|
| index 75fbb6ebaf1059ce8a71cf32b2434e9cf2f50d3e..0000000000000000000000000000000000000000
|
| --- a/cc/output/overlay_unittest.cc
|
| +++ /dev/null
|
| @@ -1,1058 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "cc/base/scoped_ptr_vector.h"
|
| -#include "cc/output/compositor_frame_metadata.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"
|
| -#include "cc/output/overlay_processor.h"
|
| -#include "cc/output/overlay_strategy_single_on_top.h"
|
| -#include "cc/quads/checkerboard_draw_quad.h"
|
| -#include "cc/quads/render_pass.h"
|
| -#include "cc/quads/stream_video_draw_quad.h"
|
| -#include "cc/quads/texture_draw_quad.h"
|
| -#include "cc/resources/resource_provider.h"
|
| -#include "cc/resources/texture_mailbox.h"
|
| -#include "cc/test/fake_output_surface_client.h"
|
| -#include "cc/test/geometry_test_utils.h"
|
| -#include "cc/test/test_context_provider.h"
|
| -#include "cc/test/test_shared_bitmap_manager.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using testing::_;
|
| -using testing::Mock;
|
| -
|
| -namespace cc {
|
| -namespace {
|
| -
|
| -const gfx::Rect kOverlayRect(0, 0, 128, 128);
|
| -const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64);
|
| -const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64);
|
| -const gfx::PointF kUVTopLeft(0.1f, 0.2f);
|
| -const gfx::PointF kUVBottomRight(1.0f, 1.0f);
|
| -const gfx::Transform kNormalTransform =
|
| - gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y.
|
| -const gfx::Transform kXMirrorTransform =
|
| - gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y.
|
| -const gfx::Transform kYMirrorTransform =
|
| - gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y.
|
| -const gfx::Transform kBothMirrorTransform =
|
| - gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y.
|
| -const gfx::Transform kSwapTransform =
|
| - gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x.
|
| -
|
| -void MailboxReleased(unsigned sync_point,
|
| - bool lost_resource,
|
| - BlockingTaskRunner* main_thread_task_runner) {
|
| -}
|
| -
|
| -class SingleOverlayValidator : public OverlayCandidateValidator {
|
| - public:
|
| - void CheckOverlaySupport(OverlayCandidateList* surfaces) override;
|
| -};
|
| -
|
| -void SingleOverlayValidator::CheckOverlaySupport(
|
| - OverlayCandidateList* surfaces) {
|
| - ASSERT_EQ(2U, surfaces->size());
|
| -
|
| - OverlayCandidate& candidate = surfaces->back();
|
| - if (candidate.display_rect.width() == 64)
|
| - EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect);
|
| - else
|
| - EXPECT_EQ(kOverlayRect, candidate.display_rect);
|
| - EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(),
|
| - candidate.uv_rect.ToString());
|
| - candidate.overlay_handled = true;
|
| -}
|
| -
|
| -class SingleOverlayProcessor : public OverlayProcessor {
|
| - public:
|
| - SingleOverlayProcessor(OutputSurface* surface,
|
| - ResourceProvider* resource_provider);
|
| - // Virtual to allow testing different strategies.
|
| - void Initialize() override;
|
| -};
|
| -
|
| -SingleOverlayProcessor::SingleOverlayProcessor(
|
| - OutputSurface* surface,
|
| - ResourceProvider* resource_provider)
|
| - : OverlayProcessor(surface, resource_provider) {
|
| - EXPECT_EQ(surface, surface_);
|
| - EXPECT_EQ(resource_provider, resource_provider_);
|
| -}
|
| -
|
| -void SingleOverlayProcessor::Initialize() {
|
| - OverlayCandidateValidator* candidates =
|
| - surface_->overlay_candidate_validator();
|
| - ASSERT_TRUE(candidates != NULL);
|
| - strategies_.push_back(scoped_ptr<Strategy>(
|
| - new OverlayStrategySingleOnTop(candidates, resource_provider_)));
|
| -}
|
| -
|
| -class DefaultOverlayProcessor : public OverlayProcessor {
|
| - public:
|
| - DefaultOverlayProcessor(OutputSurface* surface,
|
| - ResourceProvider* resource_provider);
|
| - size_t GetStrategyCount();
|
| -};
|
| -
|
| -DefaultOverlayProcessor::DefaultOverlayProcessor(
|
| - OutputSurface* surface,
|
| - ResourceProvider* resource_provider)
|
| - : OverlayProcessor(surface, resource_provider) {}
|
| -
|
| -size_t DefaultOverlayProcessor::GetStrategyCount() {
|
| - return strategies_.size();
|
| -}
|
| -
|
| -class OverlayOutputSurface : public OutputSurface {
|
| - public:
|
| - explicit OverlayOutputSurface(scoped_refptr<ContextProvider> context_provider)
|
| - : OutputSurface(context_provider) {}
|
| -
|
| - // OutputSurface implementation
|
| - void SwapBuffers(CompositorFrame* frame) override;
|
| -
|
| - void InitWithSingleOverlayValidator() {
|
| - overlay_candidate_validator_.reset(new SingleOverlayValidator);
|
| - }
|
| -};
|
| -
|
| -void OverlayOutputSurface::SwapBuffers(CompositorFrame* frame) {
|
| - client_->DidSwapBuffers();
|
| - client_->DidSwapBuffersComplete();
|
| -}
|
| -
|
| -scoped_ptr<RenderPass> CreateRenderPass() {
|
| - RenderPassId id(1, 0);
|
| - gfx::Rect output_rect(0, 0, 256, 256);
|
| - bool has_transparent_background = true;
|
| -
|
| - scoped_ptr<RenderPass> pass = RenderPass::Create();
|
| - pass->SetAll(id,
|
| - output_rect,
|
| - output_rect,
|
| - gfx::Transform(),
|
| - has_transparent_background);
|
| -
|
| - SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
|
| - shared_state->opacity = 1.f;
|
| - return pass.Pass();
|
| -}
|
| -
|
| -ResourceProvider::ResourceId CreateResource(
|
| - ResourceProvider* resource_provider) {
|
| - unsigned sync_point = 0;
|
| - TextureMailbox mailbox =
|
| - TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
|
| - mailbox.set_allow_overlay(true);
|
| - scoped_ptr<SingleReleaseCallbackImpl> release_callback =
|
| - SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
|
| -
|
| - return resource_provider->CreateResourceFromTextureMailbox(
|
| - mailbox, release_callback.Pass());
|
| -}
|
| -
|
| -SolidColorDrawQuad* CreateSolidColorQuadAt(
|
| - const SharedQuadState* shared_quad_state,
|
| - SkColor color,
|
| - RenderPass* render_pass,
|
| - const gfx::Rect& rect) {
|
| - SolidColorDrawQuad* quad =
|
| - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
|
| - quad->SetNew(shared_quad_state, rect, rect, color, false);
|
| - return quad;
|
| -}
|
| -
|
| -TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass,
|
| - const gfx::Rect& rect) {
|
| - ResourceProvider::ResourceId resource_id = CreateResource(resource_provider);
|
| - bool premultiplied_alpha = false;
|
| - bool flipped = false;
|
| - bool nearest_neighbor = false;
|
| - float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
| -
|
| - TextureDrawQuad* overlay_quad =
|
| - render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
|
| - overlay_quad->SetNew(shared_quad_state,
|
| - rect,
|
| - rect,
|
| - rect,
|
| - resource_id,
|
| - premultiplied_alpha,
|
| - kUVTopLeft,
|
| - kUVBottomRight,
|
| - SK_ColorTRANSPARENT,
|
| - vertex_opacity,
|
| - flipped,
|
| - nearest_neighbor);
|
| -
|
| - return overlay_quad;
|
| -}
|
| -
|
| -StreamVideoDrawQuad* CreateCandidateVideoQuadAt(
|
| - ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass,
|
| - const gfx::Rect& rect,
|
| - const gfx::Transform& transform) {
|
| - ResourceProvider::ResourceId resource_id = CreateResource(resource_provider);
|
| -
|
| - StreamVideoDrawQuad* overlay_quad =
|
| - render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
|
| - overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id,
|
| - transform);
|
| -
|
| - return overlay_quad;
|
| -}
|
| -
|
| -TextureDrawQuad* CreateFullscreenCandidateQuad(
|
| - ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass) {
|
| - return CreateCandidateQuadAt(
|
| - resource_provider, shared_quad_state, render_pass, kOverlayRect);
|
| -}
|
| -
|
| -StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad(
|
| - ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass,
|
| - const gfx::Transform& transform) {
|
| - return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state,
|
| - render_pass, kOverlayRect, transform);
|
| -}
|
| -
|
| -void CreateCheckeredQuadAt(ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass,
|
| - const gfx::Rect& rect) {
|
| - CheckerboardDrawQuad* checkerboard_quad =
|
| - render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
|
| - checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor(), 1.f);
|
| -}
|
| -
|
| -void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider,
|
| - const SharedQuadState* shared_quad_state,
|
| - RenderPass* render_pass) {
|
| - CreateCheckeredQuadAt(
|
| - resource_provider, shared_quad_state, render_pass, kOverlayRect);
|
| -}
|
| -
|
| -static void CompareRenderPassLists(const RenderPassList& expected_list,
|
| - const RenderPassList& actual_list) {
|
| - EXPECT_EQ(expected_list.size(), actual_list.size());
|
| - for (size_t i = 0; i < actual_list.size(); ++i) {
|
| - RenderPass* expected = expected_list[i];
|
| - RenderPass* actual = actual_list[i];
|
| -
|
| - EXPECT_EQ(expected->id, actual->id);
|
| - EXPECT_EQ(expected->output_rect, actual->output_rect);
|
| - EXPECT_EQ(expected->transform_to_root_target,
|
| - actual->transform_to_root_target);
|
| - EXPECT_EQ(expected->damage_rect, actual->damage_rect);
|
| - EXPECT_EQ(expected->has_transparent_background,
|
| - actual->has_transparent_background);
|
| -
|
| - EXPECT_EQ(expected->shared_quad_state_list.size(),
|
| - actual->shared_quad_state_list.size());
|
| - EXPECT_EQ(expected->quad_list.size(), actual->quad_list.size());
|
| -
|
| - for (auto exp_iter = expected->quad_list.cbegin(),
|
| - act_iter = actual->quad_list.cbegin();
|
| - exp_iter != expected->quad_list.cend();
|
| - ++exp_iter, ++act_iter) {
|
| - EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString());
|
| - EXPECT_EQ(exp_iter->shared_quad_state->content_bounds.ToString(),
|
| - act_iter->shared_quad_state->content_bounds.ToString());
|
| - }
|
| - }
|
| -}
|
| -
|
| -TEST(OverlayTest, NoOverlaysByDefault) {
|
| - scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
|
| - OverlayOutputSurface output_surface(provider);
|
| - EXPECT_EQ(NULL, output_surface.overlay_candidate_validator());
|
| -
|
| - output_surface.InitWithSingleOverlayValidator();
|
| - EXPECT_TRUE(output_surface.overlay_candidate_validator() != NULL);
|
| -}
|
| -
|
| -TEST(OverlayTest, OverlaysProcessorHasStrategy) {
|
| - scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
|
| - OverlayOutputSurface output_surface(provider);
|
| - FakeOutputSurfaceClient client;
|
| - EXPECT_TRUE(output_surface.BindToClient(&client));
|
| - output_surface.InitWithSingleOverlayValidator();
|
| - EXPECT_TRUE(output_surface.overlay_candidate_validator() != NULL);
|
| -
|
| - scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
|
| - new TestSharedBitmapManager());
|
| - scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
|
| - &output_surface, shared_bitmap_manager.get(), NULL, NULL, 0, false, 1));
|
| -
|
| - scoped_ptr<DefaultOverlayProcessor> overlay_processor(
|
| - new DefaultOverlayProcessor(&output_surface, resource_provider.get()));
|
| - overlay_processor->Initialize();
|
| - EXPECT_GE(1U, overlay_processor->GetStrategyCount());
|
| -}
|
| -
|
| -class SingleOverlayOnTopTest : public testing::Test {
|
| - protected:
|
| - void SetUp() override {
|
| - provider_ = TestContextProvider::Create();
|
| - output_surface_.reset(new OverlayOutputSurface(provider_));
|
| - EXPECT_TRUE(output_surface_->BindToClient(&client_));
|
| - output_surface_->InitWithSingleOverlayValidator();
|
| - EXPECT_TRUE(output_surface_->overlay_candidate_validator() != NULL);
|
| -
|
| - shared_bitmap_manager_.reset(new TestSharedBitmapManager());
|
| - resource_provider_ = ResourceProvider::Create(output_surface_.get(),
|
| - shared_bitmap_manager_.get(),
|
| - NULL,
|
| - NULL,
|
| - 0,
|
| - false,
|
| - 1);
|
| -
|
| - overlay_processor_.reset(new SingleOverlayProcessor(
|
| - output_surface_.get(), resource_provider_.get()));
|
| - overlay_processor_->Initialize();
|
| - }
|
| -
|
| - scoped_refptr<TestContextProvider> provider_;
|
| - scoped_ptr<OverlayOutputSurface> output_surface_;
|
| - FakeOutputSurfaceClient client_;
|
| - scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
|
| - scoped_ptr<ResourceProvider> resource_provider_;
|
| - scoped_ptr<SingleOverlayProcessor> overlay_processor_;
|
| -};
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - TextureDrawQuad* original_quad =
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - unsigned original_resource_id = original_quad->resource_id;
|
| -
|
| - // Add something behind it.
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - // Check for potential candidates.
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| -
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - ASSERT_EQ(2U, candidate_list.size());
|
| -
|
| - RenderPass* main_pass = pass_list.back();
|
| - // Check that the quad is gone.
|
| - EXPECT_EQ(2U, main_pass->quad_list.size());
|
| - const QuadList& quad_list = main_pass->quad_list;
|
| - for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
|
| - it != quad_list.BackToFrontEnd();
|
| - ++it) {
|
| - EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material);
|
| - }
|
| -
|
| - // Check that the right resource id got extracted.
|
| - EXPECT_EQ(original_resource_id, candidate_list.back().resource_id);
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, NoCandidates) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| - // There should be nothing new here.
|
| - CompareRenderPassLists(pass_list, original_pass_list);
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| - // There should be nothing new here.
|
| - CompareRenderPassLists(pass_list, original_pass_list);
|
| -}
|
| -
|
| -// Test with multiple render passes.
|
| -TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(CreateRenderPass());
|
| -
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - // Add something behind it.
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - // Check for potential candidates.
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -
|
| - // This should be the same.
|
| - ASSERT_EQ(2U, pass_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - TextureDrawQuad* quad =
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - quad->premultiplied_alpha = true;
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectBlending) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - TextureDrawQuad* quad =
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - quad->needs_blending = true;
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - TextureDrawQuad* quad =
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - quad->background_color = SK_ColorBLACK;
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode;
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
|
| - 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.5f;
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectNonScaleTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - pass->shared_quad_state_list.back()
|
| - ->content_to_target_transform.RotateAboutXAxis(45.f);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectNegativeScaleTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.0f,
|
| - -1.0f);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
|
| - gfx::Rect rect = kOverlayRect;
|
| - rect.set_width(rect.width() / 2);
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateCandidateQuadAt(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(), pass.get(), rect);
|
| - pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.0f,
|
| - 1.0f);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateCheckeredQuadAt(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(),
|
| - kOverlayTopLeftRect);
|
| - CreateCandidateQuadAt(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(),
|
| - kOverlayBottomRightRect);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
|
| - shared_state->opacity = 0.f;
|
| - CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
|
| - kOverlayBottomRightRect);
|
| - shared_state = pass->CreateAndAppendSharedQuadState();
|
| - shared_state->opacity = 1.f;
|
| - CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
|
| - kOverlayBottomRightRect);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateSolidColorQuadAt(pass->shared_quad_state_list.back(),
|
| - SK_ColorTRANSPARENT, pass.get(),
|
| - kOverlayBottomRightRect);
|
| - CreateCandidateQuadAt(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(), pass.get(),
|
| - kOverlayBottomRightRect);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
|
| - shared_state->opacity = 0.5f;
|
| - CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
|
| - kOverlayBottomRightRect);
|
| - shared_state = pass->CreateAndAppendSharedQuadState();
|
| - shared_state->opacity = 1.f;
|
| - CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
|
| - kOverlayBottomRightRect);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
|
| - CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(),
|
| - kOverlayBottomRightRect)->opaque_rect =
|
| - kOverlayBottomRightRect;
|
| - CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
|
| - kOverlayBottomRightRect);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - RenderPassList original_pass_list;
|
| - RenderPass::CopyAll(pass_list, &original_pass_list);
|
| -
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - EXPECT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(), kSwapTransform);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(0U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(), kXMirrorTransform);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(), kBothMirrorTransform);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(), kNormalTransform);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) {
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get(), kYMirrorTransform);
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| - OverlayCandidateList candidate_list;
|
| - overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
|
| - ASSERT_EQ(1U, pass_list.size());
|
| - EXPECT_EQ(2U, candidate_list.size());
|
| -}
|
| -
|
| -class OverlayInfoRendererGL : public GLRenderer {
|
| - public:
|
| - OverlayInfoRendererGL(RendererClient* client,
|
| - const RendererSettings* settings,
|
| - OutputSurface* output_surface,
|
| - ResourceProvider* resource_provider)
|
| - : GLRenderer(client,
|
| - settings,
|
| - output_surface,
|
| - resource_provider,
|
| - NULL,
|
| - 0),
|
| - expect_overlays_(false) {}
|
| -
|
| - MOCK_METHOD3(DoDrawQuad,
|
| - void(DrawingFrame* frame,
|
| - const DrawQuad* quad,
|
| - const gfx::QuadF* draw_region));
|
| -
|
| - using GLRenderer::BeginDrawingFrame;
|
| -
|
| - void FinishDrawingFrame(DrawingFrame* frame) override {
|
| - GLRenderer::FinishDrawingFrame(frame);
|
| -
|
| - if (!expect_overlays_) {
|
| - EXPECT_EQ(0U, frame->overlay_list.size());
|
| - return;
|
| - }
|
| -
|
| - ASSERT_EQ(2U, frame->overlay_list.size());
|
| - EXPECT_NE(0U, frame->overlay_list.back().resource_id);
|
| - }
|
| -
|
| - void set_expect_overlays(bool expect_overlays) {
|
| - expect_overlays_ = expect_overlays;
|
| - }
|
| -
|
| - private:
|
| - bool expect_overlays_;
|
| -};
|
| -
|
| -class FakeRendererClient : public RendererClient {
|
| - public:
|
| - // RendererClient methods.
|
| - void SetFullRootLayerDamage() override {}
|
| -};
|
| -
|
| -class MockOverlayScheduler {
|
| - public:
|
| - MOCK_METHOD5(Schedule,
|
| - void(int plane_z_order,
|
| - gfx::OverlayTransform plane_transform,
|
| - unsigned overlay_texture_id,
|
| - const gfx::Rect& display_bounds,
|
| - const gfx::RectF& uv_rect));
|
| -};
|
| -
|
| -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, NULL, NULL, 0, false, 1);
|
| -
|
| - provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind(
|
| - &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_)));
|
| - }
|
| -
|
| - 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()));
|
| - }
|
| -
|
| - void SwapBuffers() { renderer_->SwapBuffers(CompositorFrameMetadata()); }
|
| -
|
| - RendererSettings 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_;
|
| - MockOverlayScheduler scheduler_;
|
| -};
|
| -
|
| -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();
|
| -
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - 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);
|
| - EXPECT_CALL(scheduler_,
|
| - Schedule(1,
|
| - gfx::OVERLAY_TRANSFORM_NONE,
|
| - _,
|
| - kOverlayRect,
|
| - BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1);
|
| - renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
|
| -
|
| - SwapBuffers();
|
| -
|
| - Mock::VerifyAndClearExpectations(renderer_.get());
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -}
|
| -
|
| -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();
|
| -
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - // 3 quads in the pass, all should draw.
|
| - EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3);
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
|
| - renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
|
| -
|
| - SwapBuffers();
|
| -
|
| - Mock::VerifyAndClearExpectations(renderer_.get());
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -}
|
| -
|
| -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();
|
| -
|
| - CreateFullscreenCandidateQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| - CreateFullscreenCheckeredQuad(resource_provider_.get(),
|
| - pass->shared_quad_state_list.back(),
|
| - pass.get());
|
| -
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - // Should see no overlays.
|
| - EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3);
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
|
| - renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false);
|
| -
|
| - SwapBuffers();
|
| -
|
| - Mock::VerifyAndClearExpectations(renderer_.get());
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -}
|
| -
|
| -TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturned) {
|
| - bool use_validator = true;
|
| - Init(use_validator);
|
| - renderer_->set_expect_overlays(true);
|
| -
|
| - ResourceProvider::ResourceId resource1 =
|
| - CreateResource(resource_provider_.get());
|
| - ResourceProvider::ResourceId resource2 =
|
| - CreateResource(resource_provider_.get());
|
| -
|
| - scoped_ptr<RenderPass> pass = CreateRenderPass();
|
| - RenderPassList pass_list;
|
| - pass_list.push_back(pass.Pass());
|
| -
|
| - DirectRenderer::DrawingFrame frame1;
|
| - frame1.render_passes_in_draw_order = &pass_list;
|
| - frame1.overlay_list.resize(2);
|
| - OverlayCandidate& overlay1 = frame1.overlay_list.back();
|
| - overlay1.resource_id = resource1;
|
| - overlay1.plane_z_order = 1;
|
| -
|
| - DirectRenderer::DrawingFrame frame2;
|
| - frame2.render_passes_in_draw_order = &pass_list;
|
| - frame2.overlay_list.resize(2);
|
| - OverlayCandidate& overlay2 = frame2.overlay_list.back();
|
| - overlay2.resource_id = resource2;
|
| - overlay2.plane_z_order = 1;
|
| -
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1);
|
| - renderer_->BeginDrawingFrame(&frame1);
|
| - renderer_->FinishDrawingFrame(&frame1);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2));
|
| - SwapBuffers();
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1);
|
| - renderer_->BeginDrawingFrame(&frame2);
|
| - renderer_->FinishDrawingFrame(&frame2);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2));
|
| - SwapBuffers();
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1);
|
| - renderer_->BeginDrawingFrame(&frame1);
|
| - renderer_->FinishDrawingFrame(&frame1);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2));
|
| - SwapBuffers();
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2));
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - // No overlays, release the resource.
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
|
| - DirectRenderer::DrawingFrame frame3;
|
| - frame3.render_passes_in_draw_order = &pass_list;
|
| - renderer_->set_expect_overlays(false);
|
| - renderer_->BeginDrawingFrame(&frame3);
|
| - renderer_->FinishDrawingFrame(&frame3);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2));
|
| - SwapBuffers();
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - // Use the same buffer twice.
|
| - renderer_->set_expect_overlays(true);
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1);
|
| - renderer_->BeginDrawingFrame(&frame1);
|
| - renderer_->FinishDrawingFrame(&frame1);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - SwapBuffers();
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1);
|
| - renderer_->BeginDrawingFrame(&frame1);
|
| - renderer_->FinishDrawingFrame(&frame1);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - SwapBuffers();
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -
|
| - EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0);
|
| - renderer_->set_expect_overlays(false);
|
| - renderer_->BeginDrawingFrame(&frame3);
|
| - renderer_->FinishDrawingFrame(&frame3);
|
| - EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
|
| - SwapBuffers();
|
| - EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
|
| - Mock::VerifyAndClearExpectations(&scheduler_);
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace cc
|
|
|