OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "cc/render_surface_filters.h" | |
6 | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 #include "third_party/WebKit/Source/Platform/chromium/public/WebFilterOperation.
h" | |
9 #include "third_party/WebKit/Source/Platform/chromium/public/WebFilterOperations
.h" | |
10 | |
11 using namespace WebKit; | |
12 | |
13 namespace cc { | |
14 namespace { | |
15 | |
16 // Checks whether op can be combined with a following color matrix. | |
17 bool isCombined(const WebFilterOperation& op) | |
18 { | |
19 WebFilterOperations filters; | |
20 filters.append(op); | |
21 filters.append(WebFilterOperation::createBrightnessFilter(0)); // brightness
(0) is identity. | |
22 WebFilterOperations optimized = RenderSurfaceFilters::Optimize(filters); | |
23 return optimized.size() == 1; | |
24 } | |
25 | |
26 TEST(RenderSurfaceFiltersTest, testColorMatrixFiltersCombined) | |
27 { | |
28 // Several filters should always combine for any amount between 0 and 1: | |
29 // grayscale, saturate, invert, contrast, opacity. | |
30 EXPECT_TRUE(isCombined(WebFilterOperation::createGrayscaleFilter(0))); | |
31 // Note that we use 0.3f to avoid "argument is truncated from 'double' to | |
32 // 'float'" warnings on Windows. 0.5 is exactly representable as a float, so | |
33 // there is no warning. | |
34 EXPECT_TRUE(isCombined(WebFilterOperation::createGrayscaleFilter(0.3f))); | |
35 EXPECT_TRUE(isCombined(WebFilterOperation::createGrayscaleFilter(0.5))); | |
36 EXPECT_TRUE(isCombined(WebFilterOperation::createGrayscaleFilter(1))); | |
37 | |
38 EXPECT_TRUE(isCombined(WebFilterOperation::createSaturateFilter(0))); | |
39 EXPECT_TRUE(isCombined(WebFilterOperation::createSaturateFilter(0.3f))); | |
40 EXPECT_TRUE(isCombined(WebFilterOperation::createSaturateFilter(0.5))); | |
41 EXPECT_TRUE(isCombined(WebFilterOperation::createSaturateFilter(1))); | |
42 | |
43 EXPECT_TRUE(isCombined(WebFilterOperation::createInvertFilter(0))); | |
44 EXPECT_TRUE(isCombined(WebFilterOperation::createInvertFilter(0.3f))); | |
45 EXPECT_TRUE(isCombined(WebFilterOperation::createInvertFilter(0.5))); | |
46 EXPECT_TRUE(isCombined(WebFilterOperation::createInvertFilter(1))); | |
47 | |
48 EXPECT_TRUE(isCombined(WebFilterOperation::createContrastFilter(0))); | |
49 EXPECT_TRUE(isCombined(WebFilterOperation::createContrastFilter(0.3f))); | |
50 EXPECT_TRUE(isCombined(WebFilterOperation::createContrastFilter(0.5))); | |
51 EXPECT_TRUE(isCombined(WebFilterOperation::createContrastFilter(1))); | |
52 | |
53 EXPECT_TRUE(isCombined(WebFilterOperation::createOpacityFilter(0))); | |
54 EXPECT_TRUE(isCombined(WebFilterOperation::createOpacityFilter(0.3f))); | |
55 EXPECT_TRUE(isCombined(WebFilterOperation::createOpacityFilter(0.5))); | |
56 EXPECT_TRUE(isCombined(WebFilterOperation::createOpacityFilter(1))); | |
57 | |
58 // Brightness combines when amount <= 1 | |
59 EXPECT_TRUE(isCombined(WebFilterOperation::createBrightnessFilter(0.5))); | |
60 EXPECT_TRUE(isCombined(WebFilterOperation::createBrightnessFilter(1))); | |
61 EXPECT_FALSE(isCombined(WebFilterOperation::createBrightnessFilter(1.5))); | |
62 | |
63 // SaturatingBrightness combines only when amount == 0 | |
64 EXPECT_TRUE(isCombined(WebFilterOperation::createSaturatingBrightnessFilter(
0))); | |
65 EXPECT_FALSE(isCombined(WebFilterOperation::createSaturatingBrightnessFilter
(0.5))); | |
66 EXPECT_FALSE(isCombined(WebFilterOperation::createSaturatingBrightnessFilter
(1))); | |
67 | |
68 // Several filters should never combine: blur, drop-shadow. | |
69 EXPECT_FALSE(isCombined(WebFilterOperation::createBlurFilter(3))); | |
70 EXPECT_FALSE(isCombined(WebFilterOperation::createDropShadowFilter(WebPoint(
2, 2), 3, 0xffffffff))); | |
71 | |
72 // sepia and hue may or may not combine depending on the value. | |
73 EXPECT_TRUE(isCombined(WebFilterOperation::createSepiaFilter(0))); | |
74 EXPECT_FALSE(isCombined(WebFilterOperation::createSepiaFilter(1))); | |
75 EXPECT_TRUE(isCombined(WebFilterOperation::createHueRotateFilter(0))); | |
76 EXPECT_FALSE(isCombined(WebFilterOperation::createHueRotateFilter(180))); | |
77 | |
78 float matrix1[20] = { | |
79 1, 0, 0, 0, 0, | |
80 0, 1, 0, 0, 0, | |
81 0, 0, 1, 0, 0, | |
82 0, 0, 0, 1, 0, | |
83 }; | |
84 EXPECT_TRUE(isCombined(WebFilterOperation::createColorMatrixFilter(matrix1))
); | |
85 | |
86 float matrix2[20] = { | |
87 1, 1, 0, 0, 0, | |
88 0, 1, 0, 0, 0, | |
89 0, 0, 1, 0, 0, | |
90 0, 0, 0, 1, 0, | |
91 }; | |
92 EXPECT_FALSE(isCombined(WebFilterOperation::createColorMatrixFilter(matrix2)
)); | |
93 | |
94 float matrix3[20] = { | |
95 0.25, 0, 0, 0, 255*0.75, | |
96 0, 1, 0, 0, 0, | |
97 0, 0, 1, 0, 0, | |
98 0, 0, 0, 1, 0, | |
99 }; | |
100 EXPECT_TRUE(isCombined(WebFilterOperation::createColorMatrixFilter(matrix3))
); | |
101 | |
102 float matrix4[20] = { | |
103 -0.25, 0.75, 0, 0, 255*0.25, | |
104 0, 1, 0, 0, 0, | |
105 0, 0, 1, 0, 0, | |
106 0, 0, 0, 1, 0, | |
107 }; | |
108 EXPECT_TRUE(isCombined(WebFilterOperation::createColorMatrixFilter(matrix4))
); | |
109 } | |
110 | |
111 TEST(RenderSurfaceFiltersTest, testOptimize) | |
112 { | |
113 WebFilterOperation combines(WebFilterOperation::createBrightnessFilter(1)); | |
114 WebFilterOperation doesntCombine(WebFilterOperation::createBrightnessFilter(
1.5)); | |
115 | |
116 WebFilterOperations filters; | |
117 WebFilterOperations optimized = RenderSurfaceFilters::Optimize(filters); | |
118 EXPECT_EQ(0u, optimized.size()); | |
119 | |
120 filters.append(combines); | |
121 optimized = RenderSurfaceFilters::Optimize(filters); | |
122 EXPECT_EQ(1u, optimized.size()); | |
123 | |
124 filters.append(combines); | |
125 optimized = RenderSurfaceFilters::Optimize(filters); | |
126 EXPECT_EQ(1u, optimized.size()); | |
127 | |
128 filters.append(doesntCombine); | |
129 optimized = RenderSurfaceFilters::Optimize(filters); | |
130 EXPECT_EQ(1u, optimized.size()); | |
131 | |
132 filters.append(combines); | |
133 optimized = RenderSurfaceFilters::Optimize(filters); | |
134 EXPECT_EQ(2u, optimized.size()); | |
135 | |
136 filters.append(doesntCombine); | |
137 optimized = RenderSurfaceFilters::Optimize(filters); | |
138 EXPECT_EQ(2u, optimized.size()); | |
139 | |
140 filters.append(doesntCombine); | |
141 optimized = RenderSurfaceFilters::Optimize(filters); | |
142 EXPECT_EQ(3u, optimized.size()); | |
143 } | |
144 | |
145 } // namespace | |
146 } // namespace cc | |
OLD | NEW |