| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
| 6 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
| 7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
| 8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
| 9 #include "cc/quads/picture_draw_quad.h" | 9 #include "cc/quads/picture_draw_quad.h" |
| 10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 false); // nearest_neighbor | 156 false); // nearest_neighbor |
| 157 } | 157 } |
| 158 | 158 |
| 159 typedef ::testing::Types<GLRenderer, | 159 typedef ::testing::Types<GLRenderer, |
| 160 SoftwareRenderer, | 160 SoftwareRenderer, |
| 161 GLRendererWithExpandedViewport, | 161 GLRendererWithExpandedViewport, |
| 162 SoftwareRendererWithExpandedViewport> RendererTypes; | 162 SoftwareRendererWithExpandedViewport> RendererTypes; |
| 163 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 163 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
| 164 | 164 |
| 165 template <typename RendererType> | 165 template <typename RendererType> |
| 166 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {}; |
| 167 |
| 168 typedef ::testing::Types<SoftwareRenderer, SoftwareRendererWithExpandedViewport> |
| 169 SoftwareRendererTypes; |
| 170 TYPED_TEST_CASE(SoftwareRendererPixelTest, SoftwareRendererTypes); |
| 171 |
| 172 template <typename RendererType> |
| 166 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { | 173 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { |
| 167 public: | 174 public: |
| 168 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) | 175 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) |
| 169 : fuzzy_(discard_alpha), exact_(discard_alpha) {} | 176 : fuzzy_(discard_alpha), exact_(discard_alpha) {} |
| 170 | 177 |
| 171 bool Compare(const SkBitmap& actual_bmp, | 178 bool Compare(const SkBitmap& actual_bmp, |
| 172 const SkBitmap& expected_bmp) const override; | 179 const SkBitmap& expected_bmp) const override; |
| 173 | 180 |
| 174 private: | 181 private: |
| 175 FuzzyPixelOffByOneComparator fuzzy_; | 182 FuzzyPixelOffByOneComparator fuzzy_; |
| (...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1820 | 1827 |
| 1821 RenderPassList pass_list; | 1828 RenderPassList pass_list; |
| 1822 pass_list.push_back(pass.Pass()); | 1829 pass_list.push_back(pass.Pass()); |
| 1823 | 1830 |
| 1824 EXPECT_TRUE(this->RunPixelTest( | 1831 EXPECT_TRUE(this->RunPixelTest( |
| 1825 &pass_list, | 1832 &pass_list, |
| 1826 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), | 1833 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), |
| 1827 FuzzyPixelOffByOneComparator(true))); | 1834 FuzzyPixelOffByOneComparator(true))); |
| 1828 } | 1835 } |
| 1829 | 1836 |
| 1830 TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) { | 1837 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) { |
| 1831 gfx::Size pile_tile_size(1000, 1000); | 1838 gfx::Size pile_tile_size(1000, 1000); |
| 1832 gfx::Rect viewport(this->device_viewport_size_); | 1839 gfx::Rect viewport(this->device_viewport_size_); |
| 1833 // TODO(enne): the renderer should figure this out on its own. | 1840 // TODO(enne): the renderer should figure this out on its own. |
| 1834 ResourceFormat texture_format = RGBA_8888; | 1841 ResourceFormat texture_format = RGBA_8888; |
| 1835 bool nearest_neighbor = false; | 1842 bool nearest_neighbor = false; |
| 1836 | 1843 |
| 1837 RenderPassId id(1, 1); | 1844 RenderPassId id(1, 1); |
| 1838 gfx::Transform transform_to_root; | 1845 gfx::Transform transform_to_root; |
| 1839 scoped_ptr<RenderPass> pass = | 1846 scoped_ptr<RenderPass> pass = |
| 1840 CreateTestRenderPass(id, viewport, transform_to_root); | 1847 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1900 RenderPassList pass_list; | 1907 RenderPassList pass_list; |
| 1901 pass_list.push_back(pass.Pass()); | 1908 pass_list.push_back(pass.Pass()); |
| 1902 | 1909 |
| 1903 EXPECT_TRUE(this->RunPixelTest( | 1910 EXPECT_TRUE(this->RunPixelTest( |
| 1904 &pass_list, | 1911 &pass_list, |
| 1905 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), | 1912 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), |
| 1906 ExactPixelComparator(true))); | 1913 ExactPixelComparator(true))); |
| 1907 } | 1914 } |
| 1908 | 1915 |
| 1909 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. | 1916 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. |
| 1910 TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) { | 1917 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) { |
| 1911 gfx::Size pile_tile_size(1000, 1000); | 1918 gfx::Size pile_tile_size(1000, 1000); |
| 1912 gfx::Rect viewport(this->device_viewport_size_); | 1919 gfx::Rect viewport(this->device_viewport_size_); |
| 1913 ResourceFormat texture_format = RGBA_8888; | 1920 ResourceFormat texture_format = RGBA_8888; |
| 1914 bool nearest_neighbor = false; | 1921 bool nearest_neighbor = false; |
| 1915 | 1922 |
| 1916 RenderPassId id(1, 1); | 1923 RenderPassId id(1, 1); |
| 1917 gfx::Transform transform_to_root; | 1924 gfx::Transform transform_to_root; |
| 1918 scoped_ptr<RenderPass> pass = | 1925 scoped_ptr<RenderPass> pass = |
| 1919 CreateTestRenderPass(id, viewport, transform_to_root); | 1926 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1920 | 1927 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1977 return true; | 1984 return true; |
| 1978 } | 1985 } |
| 1979 | 1986 |
| 1980 template<> | 1987 template<> |
| 1981 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { | 1988 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { |
| 1982 return true; | 1989 return true; |
| 1983 } | 1990 } |
| 1984 | 1991 |
| 1985 // If we disable image filtering, then a 2x2 bitmap should appear as four | 1992 // If we disable image filtering, then a 2x2 bitmap should appear as four |
| 1986 // huge sharp squares. | 1993 // huge sharp squares. |
| 1987 TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) { | 1994 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) { |
| 1988 // We only care about this in software mode since bilinear filtering is | 1995 // We only care about this in software mode since bilinear filtering is |
| 1989 // cheap in hardware. | 1996 // cheap in hardware. |
| 1990 if (!IsSoftwareRenderer<TypeParam>()) | 1997 if (!IsSoftwareRenderer<TypeParam>()) |
| 1991 return; | 1998 return; |
| 1992 | 1999 |
| 1993 gfx::Size pile_tile_size(1000, 1000); | 2000 gfx::Size pile_tile_size(1000, 1000); |
| 1994 gfx::Rect viewport(this->device_viewport_size_); | 2001 gfx::Rect viewport(this->device_viewport_size_); |
| 1995 ResourceFormat texture_format = RGBA_8888; | 2002 ResourceFormat texture_format = RGBA_8888; |
| 1996 bool nearest_neighbor = false; | 2003 bool nearest_neighbor = false; |
| 1997 | 2004 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2034 | 2041 |
| 2035 this->disable_picture_quad_image_filtering_ = true; | 2042 this->disable_picture_quad_image_filtering_ = true; |
| 2036 | 2043 |
| 2037 EXPECT_TRUE(this->RunPixelTest( | 2044 EXPECT_TRUE(this->RunPixelTest( |
| 2038 &pass_list, | 2045 &pass_list, |
| 2039 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 2046 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 2040 ExactPixelComparator(true))); | 2047 ExactPixelComparator(true))); |
| 2041 } | 2048 } |
| 2042 | 2049 |
| 2043 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. | 2050 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. |
| 2044 TYPED_TEST(RendererPixelTest, PictureDrawQuadNearestNeighbor) { | 2051 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) { |
| 2045 gfx::Size pile_tile_size(1000, 1000); | 2052 gfx::Size pile_tile_size(1000, 1000); |
| 2046 gfx::Rect viewport(this->device_viewport_size_); | 2053 gfx::Rect viewport(this->device_viewport_size_); |
| 2047 ResourceFormat texture_format = RGBA_8888; | 2054 ResourceFormat texture_format = RGBA_8888; |
| 2048 bool nearest_neighbor = true; | 2055 bool nearest_neighbor = true; |
| 2049 | 2056 |
| 2050 RenderPassId id(1, 1); | 2057 RenderPassId id(1, 1); |
| 2051 gfx::Transform transform_to_root; | 2058 gfx::Transform transform_to_root; |
| 2052 scoped_ptr<RenderPass> pass = | 2059 scoped_ptr<RenderPass> pass = |
| 2053 CreateTestRenderPass(id, viewport, transform_to_root); | 2060 CreateTestRenderPass(id, viewport, transform_to_root); |
| 2054 | 2061 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2141 | 2148 |
| 2142 RenderPassList pass_list; | 2149 RenderPassList pass_list; |
| 2143 pass_list.push_back(pass.Pass()); | 2150 pass_list.push_back(pass.Pass()); |
| 2144 | 2151 |
| 2145 EXPECT_TRUE(this->RunPixelTest( | 2152 EXPECT_TRUE(this->RunPixelTest( |
| 2146 &pass_list, | 2153 &pass_list, |
| 2147 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 2154 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 2148 ExactPixelComparator(true))); | 2155 ExactPixelComparator(true))); |
| 2149 } | 2156 } |
| 2150 | 2157 |
| 2151 TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) { | 2158 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { |
| 2152 gfx::Size pile_tile_size(1000, 1000); | 2159 gfx::Size pile_tile_size(1000, 1000); |
| 2153 gfx::Rect viewport(this->device_viewport_size_); | 2160 gfx::Rect viewport(this->device_viewport_size_); |
| 2154 // TODO(enne): the renderer should figure this out on its own. | 2161 // TODO(enne): the renderer should figure this out on its own. |
| 2155 ResourceFormat texture_format = RGBA_8888; | 2162 ResourceFormat texture_format = RGBA_8888; |
| 2156 bool nearest_neighbor = false; | 2163 bool nearest_neighbor = false; |
| 2157 | 2164 |
| 2158 RenderPassId id(1, 1); | 2165 RenderPassId id(1, 1); |
| 2159 gfx::Transform transform_to_root; | 2166 gfx::Transform transform_to_root; |
| 2160 scoped_ptr<RenderPass> pass = | 2167 scoped_ptr<RenderPass> pass = |
| 2161 CreateTestRenderPass(id, viewport, transform_to_root); | 2168 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2442 this->device_viewport_size_.width() / 2, | 2449 this->device_viewport_size_.width() / 2, |
| 2443 this->device_viewport_size_.height() / 2); | 2450 this->device_viewport_size_.height() / 2); |
| 2444 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( | 2451 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( |
| 2445 &pass_list, | 2452 &pass_list, |
| 2446 pass_list.front(), | 2453 pass_list.front(), |
| 2447 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), | 2454 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), |
| 2448 ExactPixelComparator(true), | 2455 ExactPixelComparator(true), |
| 2449 &capture_rect)); | 2456 &capture_rect)); |
| 2450 } | 2457 } |
| 2451 | 2458 |
| 2452 TEST_F(GLRendererPixelTest, PictureDrawQuadTexture4444) { | |
| 2453 gfx::Size pile_tile_size(1000, 1000); | |
| 2454 gfx::Rect viewport(this->device_viewport_size_); | |
| 2455 ResourceFormat texture_format = RGBA_4444; | |
| 2456 bool nearest_neighbor = false; | |
| 2457 | |
| 2458 RenderPassId id(1, 1); | |
| 2459 gfx::Transform transform_to_root; | |
| 2460 scoped_ptr<RenderPass> pass = | |
| 2461 CreateTestRenderPass(id, viewport, transform_to_root); | |
| 2462 | |
| 2463 // One viewport-filling blue quad | |
| 2464 scoped_ptr<FakePicturePile> blue_recording = | |
| 2465 FakePicturePile::CreateFilledPile(pile_tile_size, viewport.size()); | |
| 2466 SkPaint blue_paint; | |
| 2467 blue_paint.setColor(SK_ColorBLUE); | |
| 2468 blue_recording->add_draw_rect_with_paint(viewport, blue_paint); | |
| 2469 blue_recording->RerecordPile(); | |
| 2470 scoped_refptr<FakePicturePileImpl> blue_pile = | |
| 2471 FakePicturePileImpl::CreateFromPile(blue_recording.get(), nullptr); | |
| 2472 | |
| 2473 gfx::Transform blue_content_to_target_transform; | |
| 2474 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( | |
| 2475 blue_content_to_target_transform, viewport, pass.get()); | |
| 2476 | |
| 2477 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | |
| 2478 blue_quad->SetNew(blue_shared_state, viewport, gfx::Rect(), viewport, | |
| 2479 gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(), | |
| 2480 nearest_neighbor, texture_format, viewport, 1.f, | |
| 2481 blue_pile.get()); | |
| 2482 | |
| 2483 RenderPassList pass_list; | |
| 2484 pass_list.push_back(pass.Pass()); | |
| 2485 | |
| 2486 EXPECT_TRUE(this->RunPixelTest(&pass_list, | |
| 2487 base::FilePath(FILE_PATH_LITERAL("blue.png")), | |
| 2488 ExactPixelComparator(true))); | |
| 2489 } | |
| 2490 | |
| 2491 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { | 2459 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { |
| 2492 gfx::Rect rect(this->device_viewport_size_); | 2460 gfx::Rect rect(this->device_viewport_size_); |
| 2493 | 2461 |
| 2494 RenderPassId id(1, 1); | 2462 RenderPassId id(1, 1); |
| 2495 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 2463 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 2496 | 2464 |
| 2497 SharedQuadState* shared_state = | 2465 SharedQuadState* shared_state = |
| 2498 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 2466 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 2499 | 2467 |
| 2500 gfx::Rect texture_rect(4, 4); | 2468 gfx::Rect texture_rect(4, 4); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2548 EXPECT_TRUE(this->RunPixelTest( | 2516 EXPECT_TRUE(this->RunPixelTest( |
| 2549 &pass_list, | 2517 &pass_list, |
| 2550 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), | 2518 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), |
| 2551 FuzzyPixelOffByOneComparator(true))); | 2519 FuzzyPixelOffByOneComparator(true))); |
| 2552 } | 2520 } |
| 2553 | 2521 |
| 2554 #endif // !defined(OS_ANDROID) | 2522 #endif // !defined(OS_ANDROID) |
| 2555 | 2523 |
| 2556 } // namespace | 2524 } // namespace |
| 2557 } // namespace cc | 2525 } // namespace cc |
| OLD | NEW |