OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "cc/base/region.h" | 10 #include "cc/base/region.h" |
| 11 #include "cc/output/ca_layer_overlay.h" |
11 #include "cc/output/compositor_frame.h" | 12 #include "cc/output/compositor_frame.h" |
12 #include "cc/output/compositor_frame_metadata.h" | 13 #include "cc/output/compositor_frame_metadata.h" |
| 14 #include "cc/output/filter_operation.h" |
13 #include "cc/output/gl_renderer.h" | 15 #include "cc/output/gl_renderer.h" |
14 #include "cc/output/output_surface.h" | 16 #include "cc/output/output_surface.h" |
15 #include "cc/output/output_surface_client.h" | 17 #include "cc/output/output_surface_client.h" |
16 #include "cc/output/overlay_candidate_validator.h" | 18 #include "cc/output/overlay_candidate_validator.h" |
17 #include "cc/output/overlay_processor.h" | 19 #include "cc/output/overlay_processor.h" |
18 #include "cc/output/overlay_strategy_fullscreen.h" | 20 #include "cc/output/overlay_strategy_fullscreen.h" |
19 #include "cc/output/overlay_strategy_single_on_top.h" | 21 #include "cc/output/overlay_strategy_single_on_top.h" |
20 #include "cc/output/overlay_strategy_underlay.h" | 22 #include "cc/output/overlay_strategy_underlay.h" |
21 #include "cc/quads/render_pass.h" | 23 #include "cc/quads/render_pass.h" |
| 24 #include "cc/quads/render_pass_draw_quad.h" |
22 #include "cc/quads/solid_color_draw_quad.h" | 25 #include "cc/quads/solid_color_draw_quad.h" |
23 #include "cc/quads/stream_video_draw_quad.h" | 26 #include "cc/quads/stream_video_draw_quad.h" |
24 #include "cc/quads/texture_draw_quad.h" | 27 #include "cc/quads/texture_draw_quad.h" |
25 #include "cc/resources/resource_provider.h" | 28 #include "cc/resources/resource_provider.h" |
26 #include "cc/resources/texture_mailbox.h" | 29 #include "cc/resources/texture_mailbox.h" |
27 #include "cc/test/fake_output_surface_client.h" | 30 #include "cc/test/fake_output_surface_client.h" |
28 #include "cc/test/fake_resource_provider.h" | 31 #include "cc/test/fake_resource_provider.h" |
29 #include "cc/test/geometry_test_utils.h" | 32 #include "cc/test/geometry_test_utils.h" |
30 #include "cc/test/test_context_provider.h" | 33 #include "cc/test/test_context_provider.h" |
31 #include "cc/test/test_shared_bitmap_manager.h" | 34 #include "cc/test/test_shared_bitmap_manager.h" |
(...skipping 1703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1735 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1738 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1736 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1739 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
1737 | 1740 |
1738 ReturnResourceInUseQuery(resource2); | 1741 ReturnResourceInUseQuery(resource2); |
1739 ReturnResourceInUseQuery(resource3); | 1742 ReturnResourceInUseQuery(resource3); |
1740 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1743 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1741 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1744 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
1742 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); | 1745 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); |
1743 } | 1746 } |
1744 | 1747 |
| 1748 class CALayerOverlayRPDQTest : public CALayerOverlayTest { |
| 1749 protected: |
| 1750 void SetUp() override { |
| 1751 CALayerOverlayTest::SetUp(); |
| 1752 EnableRenderPassDrawQuadForTesting(); |
| 1753 pass_ = CreateRenderPass(); |
| 1754 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 1755 render_pass_id_.layer_id = 3; |
| 1756 render_pass_id_.index = 17; |
| 1757 } |
| 1758 |
| 1759 void ProcessForOverlays() { |
| 1760 gfx::Rect damage_rect; |
| 1761 overlay_list_ = BackbufferOverlayList(pass_.get()); |
| 1762 overlay_processor_->ProcessForOverlays(resource_provider_.get(), |
| 1763 pass_.get(), &overlay_list_, |
| 1764 &ca_layer_list_, &damage_rect); |
| 1765 } |
| 1766 std::unique_ptr<RenderPass> pass_; |
| 1767 RenderPassDrawQuad* quad_; |
| 1768 RenderPassId render_pass_id_; |
| 1769 FilterOperations filters_; |
| 1770 FilterOperations background_filters_; |
| 1771 CALayerOverlayList ca_layer_list_; |
| 1772 OverlayCandidateList overlay_list_; |
| 1773 }; |
| 1774 |
| 1775 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadNoFilters) { |
| 1776 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1777 kOverlayRect, render_pass_id_, 0, gfx::Vector2dF(), gfx::Size(), |
| 1778 filters_, gfx::Vector2dF(1, 1), background_filters_); |
| 1779 ProcessForOverlays(); |
| 1780 |
| 1781 EXPECT_EQ(1U, ca_layer_list_.size()); |
| 1782 CALayerOverlay overlay = ca_layer_list_[0]; |
| 1783 EXPECT_EQ(render_pass_id_, overlay.render_pass_id); |
| 1784 } |
| 1785 |
| 1786 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadAllValidFilters) { |
| 1787 filters_.Append(FilterOperation::CreateGrayscaleFilter(0.1f)); |
| 1788 filters_.Append(FilterOperation::CreateSepiaFilter(0.2f)); |
| 1789 filters_.Append(FilterOperation::CreateSaturateFilter(0.3f)); |
| 1790 filters_.Append(FilterOperation::CreateHueRotateFilter(0.4f)); |
| 1791 filters_.Append(FilterOperation::CreateInvertFilter(0.5f)); |
| 1792 filters_.Append(FilterOperation::CreateBrightnessFilter(0.6f)); |
| 1793 filters_.Append(FilterOperation::CreateContrastFilter(0.7f)); |
| 1794 filters_.Append(FilterOperation::CreateOpacityFilter(0.8f)); |
| 1795 filters_.Append(FilterOperation::CreateBlurFilter(0.9f)); |
| 1796 filters_.Append(FilterOperation::CreateDropShadowFilter(gfx::Point(10, 20), |
| 1797 1.0f, SK_ColorGREEN)); |
| 1798 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1799 kOverlayRect, render_pass_id_, 0, gfx::Vector2dF(), gfx::Size(), |
| 1800 filters_, gfx::Vector2dF(1, 1), background_filters_); |
| 1801 ProcessForOverlays(); |
| 1802 |
| 1803 EXPECT_EQ(1U, ca_layer_list_.size()); |
| 1804 |
| 1805 CALayerOverlay overlay = ca_layer_list_[0]; |
| 1806 EXPECT_EQ(10u, overlay.filter_effects.size()); |
| 1807 for (size_t i = 0; i < 10; ++i) { |
| 1808 ui::CARendererLayerParams::FilterEffect effect = overlay.filter_effects[i]; |
| 1809 EXPECT_FLOAT_EQ((i + 1) / 10.0f, effect.amount); |
| 1810 |
| 1811 if (effect.type == |
| 1812 ui::CARendererLayerParams::FilterEffectType::DROP_SHADOW) { |
| 1813 EXPECT_EQ(10, effect.drop_shadow_offset.x()); |
| 1814 EXPECT_EQ(20, effect.drop_shadow_offset.y()); |
| 1815 EXPECT_EQ(SK_ColorGREEN, effect.drop_shadow_color); |
| 1816 } |
| 1817 } |
| 1818 } |
| 1819 |
| 1820 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadFilterScale) { |
| 1821 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1822 kOverlayRect, render_pass_id_, 0, gfx::Vector2dF(), gfx::Size(), |
| 1823 filters_, gfx::Vector2dF(1, 2), background_filters_); |
| 1824 ProcessForOverlays(); |
| 1825 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 1826 } |
| 1827 |
| 1828 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadBackgroundFilter) { |
| 1829 background_filters_.Append(FilterOperation::CreateGrayscaleFilter(0.1f)); |
| 1830 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1831 kOverlayRect, render_pass_id_, 0, gfx::Vector2dF(), gfx::Size(), |
| 1832 filters_, gfx::Vector2dF(1, 1), background_filters_); |
| 1833 ProcessForOverlays(); |
| 1834 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 1835 } |
| 1836 |
| 1837 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadMask) { |
| 1838 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1839 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), gfx::Size(), |
| 1840 filters_, gfx::Vector2dF(1, 1), background_filters_); |
| 1841 ProcessForOverlays(); |
| 1842 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 1843 } |
| 1844 |
| 1845 TEST_F(CALayerOverlayRPDQTest, RenderPassDrawQuadUnsupportedFilter) { |
| 1846 filters_.Append(FilterOperation::CreateZoomFilter(0.9f, 1)); |
| 1847 quad_->SetNew(pass_->shared_quad_state_list.back(), kOverlayRect, |
| 1848 kOverlayRect, render_pass_id_, 0, gfx::Vector2dF(), gfx::Size(), |
| 1849 filters_, gfx::Vector2dF(1, 1), background_filters_); |
| 1850 ProcessForOverlays(); |
| 1851 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 1852 } |
| 1853 |
1745 } // namespace | 1854 } // namespace |
1746 } // namespace cc | 1855 } // namespace cc |
OLD | NEW |