OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "cc/playback/display_list_raster_source.h" | 6 #include "cc/playback/display_list_raster_source.h" |
7 #include "cc/test/fake_display_list_recording_source.h" | 7 #include "cc/test/fake_display_list_recording_source.h" |
8 #include "cc/test/skia_common.h" | 8 #include "cc/test/skia_common.h" |
9 #include "skia/ext/refptr.h" | 9 #include "skia/ext/refptr.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "third_party/skia/include/core/SkPixelRef.h" | 11 #include "third_party/skia/include/core/SkPixelRef.h" |
12 #include "third_party/skia/include/core/SkShader.h" | 12 #include "third_party/skia/include/core/SkShader.h" |
13 #include "ui/gfx/geometry/rect.h" | 13 #include "ui/gfx/geometry/rect.h" |
14 #include "ui/gfx/geometry/size_conversions.h" | 14 #include "ui/gfx/geometry/size_conversions.h" |
15 | 15 |
16 namespace cc { | 16 namespace cc { |
17 namespace { | 17 namespace { |
18 | 18 |
19 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidUnscaled) { | 19 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidUnscaled) { |
20 gfx::Size layer_bounds(400, 400); | 20 gfx::Size layer_bounds(400, 400); |
21 | 21 |
22 scoped_ptr<FakeDisplayListRecordingSource> recording_source = | 22 scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
23 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); | 23 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); |
24 | 24 |
25 SkPaint solid_paint; | 25 SkPaint solid_paint; |
26 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34); | 26 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34); |
27 solid_paint.setColor(solid_color); | 27 solid_paint.setColor(solid_color); |
28 | 28 |
29 SkColor non_solid_color = SkColorSetARGB(128, 45, 56, 67); | 29 SkColor non_solid_color = SkColorSetARGB(128, 45, 56, 67); |
| 30 SkColor color = SK_ColorTRANSPARENT; |
30 SkPaint non_solid_paint; | 31 SkPaint non_solid_paint; |
| 32 bool is_solid_color = false; |
31 non_solid_paint.setColor(non_solid_color); | 33 non_solid_paint.setColor(non_solid_color); |
32 | 34 |
33 recording_source->add_draw_rect_with_paint(gfx::Rect(layer_bounds), | 35 recording_source->add_draw_rect_with_paint(gfx::Rect(layer_bounds), |
34 solid_paint); | 36 solid_paint); |
35 recording_source->Rerecord(); | 37 recording_source->Rerecord(); |
36 | 38 |
37 scoped_refptr<DisplayListRasterSource> raster = | 39 scoped_refptr<DisplayListRasterSource> raster = |
38 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 40 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
39 recording_source.get(), false); | 41 recording_source.get(), false); |
40 | 42 |
41 // Ensure everything is solid. | 43 // Ensure everything is solid. |
42 for (int y = 0; y <= 300; y += 100) { | 44 for (int y = 0; y <= 300; y += 100) { |
43 for (int x = 0; x <= 300; x += 100) { | 45 for (int x = 0; x <= 300; x += 100) { |
44 DisplayListRasterSource::SolidColorAnalysis analysis; | |
45 gfx::Rect rect(x, y, 100, 100); | 46 gfx::Rect rect(x, y, 100, 100); |
46 raster->PerformSolidColorAnalysis(rect, 1.0, &analysis); | 47 is_solid_color = raster->PerformSolidColorAnalysis(rect, 1.0, &color); |
47 EXPECT_TRUE(analysis.is_solid_color) << rect.ToString(); | 48 EXPECT_TRUE(is_solid_color) << rect.ToString(); |
48 EXPECT_EQ(solid_color, analysis.solid_color) << rect.ToString(); | 49 EXPECT_EQ(solid_color, color) << rect.ToString(); |
49 } | 50 } |
50 } | 51 } |
51 | 52 |
52 // Add one non-solid pixel and recreate the raster source. | 53 // Add one non-solid pixel and recreate the raster source. |
53 recording_source->add_draw_rect_with_paint(gfx::Rect(50, 50, 1, 1), | 54 recording_source->add_draw_rect_with_paint(gfx::Rect(50, 50, 1, 1), |
54 non_solid_paint); | 55 non_solid_paint); |
55 recording_source->Rerecord(); | 56 recording_source->Rerecord(); |
56 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 57 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
57 recording_source.get(), false); | 58 recording_source.get(), false); |
58 | 59 |
59 DisplayListRasterSource::SolidColorAnalysis analysis; | 60 color = SK_ColorTRANSPARENT; |
60 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 100, 100), 1.0, &analysis); | 61 is_solid_color = |
61 EXPECT_FALSE(analysis.is_solid_color); | 62 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 100, 100), 1.0, &color); |
| 63 EXPECT_FALSE(is_solid_color); |
62 | 64 |
63 raster->PerformSolidColorAnalysis(gfx::Rect(100, 0, 100, 100), 1.0, | 65 is_solid_color = false; |
64 &analysis); | 66 color = SK_ColorTRANSPARENT; |
65 EXPECT_TRUE(analysis.is_solid_color); | 67 is_solid_color = raster->PerformSolidColorAnalysis( |
66 EXPECT_EQ(solid_color, analysis.solid_color); | 68 gfx::Rect(100, 0, 100, 100), 1.0, &color); |
| 69 EXPECT_TRUE(is_solid_color); |
| 70 EXPECT_EQ(solid_color, color); |
67 | 71 |
68 // Boundaries should be clipped. | 72 // Boundaries should be clipped. |
69 analysis.is_solid_color = false; | 73 is_solid_color = false; |
70 raster->PerformSolidColorAnalysis(gfx::Rect(350, 0, 100, 100), 1.0, | 74 color = SK_ColorTRANSPARENT; |
71 &analysis); | 75 is_solid_color = raster->PerformSolidColorAnalysis( |
72 EXPECT_TRUE(analysis.is_solid_color); | 76 gfx::Rect(350, 0, 100, 100), 1.0, &color); |
73 EXPECT_EQ(solid_color, analysis.solid_color); | 77 EXPECT_TRUE(is_solid_color); |
| 78 EXPECT_EQ(solid_color, color); |
74 | 79 |
75 analysis.is_solid_color = false; | 80 is_solid_color = false; |
76 raster->PerformSolidColorAnalysis(gfx::Rect(0, 350, 100, 100), 1.0, | 81 color = SK_ColorTRANSPARENT; |
77 &analysis); | 82 is_solid_color = raster->PerformSolidColorAnalysis( |
78 EXPECT_TRUE(analysis.is_solid_color); | 83 gfx::Rect(0, 350, 100, 100), 1.0, &color); |
79 EXPECT_EQ(solid_color, analysis.solid_color); | 84 EXPECT_TRUE(is_solid_color); |
| 85 EXPECT_EQ(solid_color, color); |
80 | 86 |
81 analysis.is_solid_color = false; | 87 is_solid_color = false; |
82 raster->PerformSolidColorAnalysis(gfx::Rect(350, 350, 100, 100), 1.0, | 88 color = SK_ColorTRANSPARENT; |
83 &analysis); | 89 is_solid_color = raster->PerformSolidColorAnalysis( |
84 EXPECT_TRUE(analysis.is_solid_color); | 90 gfx::Rect(350, 350, 100, 100), 1.0, &color); |
85 EXPECT_EQ(solid_color, analysis.solid_color); | 91 EXPECT_TRUE(is_solid_color); |
| 92 EXPECT_EQ(solid_color, color); |
86 } | 93 } |
87 | 94 |
88 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidScaled) { | 95 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidScaled) { |
89 gfx::Size layer_bounds(400, 400); | 96 gfx::Size layer_bounds(400, 400); |
90 | 97 |
91 scoped_ptr<FakeDisplayListRecordingSource> recording_source = | 98 scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
92 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); | 99 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); |
93 | 100 |
94 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34); | 101 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34); |
| 102 SkColor color = SK_ColorTRANSPARENT; |
95 SkPaint solid_paint; | 103 SkPaint solid_paint; |
| 104 bool is_solid_color = false; |
96 solid_paint.setColor(solid_color); | 105 solid_paint.setColor(solid_color); |
97 | 106 |
98 SkColor non_solid_color = SkColorSetARGB(128, 45, 56, 67); | 107 SkColor non_solid_color = SkColorSetARGB(128, 45, 56, 67); |
99 SkPaint non_solid_paint; | 108 SkPaint non_solid_paint; |
100 non_solid_paint.setColor(non_solid_color); | 109 non_solid_paint.setColor(non_solid_color); |
101 | 110 |
102 recording_source->add_draw_rect_with_paint(gfx::Rect(0, 0, 400, 400), | 111 recording_source->add_draw_rect_with_paint(gfx::Rect(0, 0, 400, 400), |
103 solid_paint); | 112 solid_paint); |
104 recording_source->Rerecord(); | 113 recording_source->Rerecord(); |
105 | 114 |
106 scoped_refptr<DisplayListRasterSource> raster = | 115 scoped_refptr<DisplayListRasterSource> raster = |
107 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 116 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
108 recording_source.get(), false); | 117 recording_source.get(), false); |
109 | 118 |
110 // Ensure everything is solid. | 119 // Ensure everything is solid. |
111 for (int y = 0; y <= 30; y += 10) { | 120 for (int y = 0; y <= 30; y += 10) { |
112 for (int x = 0; x <= 30; x += 10) { | 121 for (int x = 0; x <= 30; x += 10) { |
113 DisplayListRasterSource::SolidColorAnalysis analysis; | |
114 gfx::Rect rect(x, y, 10, 10); | 122 gfx::Rect rect(x, y, 10, 10); |
115 raster->PerformSolidColorAnalysis(rect, 0.1f, &analysis); | 123 is_solid_color = raster->PerformSolidColorAnalysis(rect, 0.1f, &color); |
116 EXPECT_TRUE(analysis.is_solid_color) << rect.ToString(); | 124 EXPECT_TRUE(is_solid_color) << rect.ToString(); |
117 EXPECT_EQ(analysis.solid_color, solid_color) << rect.ToString(); | 125 EXPECT_EQ(color, solid_color) << rect.ToString(); |
118 } | 126 } |
119 } | 127 } |
120 | 128 |
121 // Add one non-solid pixel and recreate the raster source. | 129 // Add one non-solid pixel and recreate the raster source. |
122 recording_source->add_draw_rect_with_paint(gfx::Rect(50, 50, 1, 1), | 130 recording_source->add_draw_rect_with_paint(gfx::Rect(50, 50, 1, 1), |
123 non_solid_paint); | 131 non_solid_paint); |
124 recording_source->Rerecord(); | 132 recording_source->Rerecord(); |
125 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 133 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
126 recording_source.get(), false); | 134 recording_source.get(), false); |
127 | 135 |
128 DisplayListRasterSource::SolidColorAnalysis analysis; | 136 is_solid_color = false; |
129 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 10, 10), 0.1f, &analysis); | 137 color = SK_ColorTRANSPARENT; |
130 EXPECT_FALSE(analysis.is_solid_color); | 138 is_solid_color = |
| 139 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 10, 10), 0.1f, &color); |
| 140 EXPECT_FALSE(is_solid_color); |
131 | 141 |
132 raster->PerformSolidColorAnalysis(gfx::Rect(10, 0, 10, 10), 0.1f, &analysis); | 142 is_solid_color = false; |
133 EXPECT_TRUE(analysis.is_solid_color); | 143 color = SK_ColorTRANSPARENT; |
134 EXPECT_EQ(analysis.solid_color, solid_color); | 144 is_solid_color = |
| 145 raster->PerformSolidColorAnalysis(gfx::Rect(10, 0, 10, 10), 0.1f, &color); |
| 146 EXPECT_TRUE(is_solid_color); |
| 147 EXPECT_EQ(color, solid_color); |
135 | 148 |
136 // Boundaries should be clipped. | 149 // Boundaries should be clipped. |
137 analysis.is_solid_color = false; | 150 is_solid_color = false; |
138 raster->PerformSolidColorAnalysis(gfx::Rect(35, 0, 10, 10), 0.1f, &analysis); | 151 color = SK_ColorTRANSPARENT; |
139 EXPECT_TRUE(analysis.is_solid_color); | 152 is_solid_color = |
140 EXPECT_EQ(analysis.solid_color, solid_color); | 153 raster->PerformSolidColorAnalysis(gfx::Rect(35, 0, 10, 10), 0.1f, &color); |
| 154 EXPECT_TRUE(is_solid_color); |
| 155 EXPECT_EQ(color, solid_color); |
141 | 156 |
142 analysis.is_solid_color = false; | 157 is_solid_color = false; |
143 raster->PerformSolidColorAnalysis(gfx::Rect(0, 35, 10, 10), 0.1f, &analysis); | 158 color = SK_ColorTRANSPARENT; |
144 EXPECT_TRUE(analysis.is_solid_color); | 159 is_solid_color = |
145 EXPECT_EQ(analysis.solid_color, solid_color); | 160 raster->PerformSolidColorAnalysis(gfx::Rect(0, 35, 10, 10), 0.1f, &color); |
| 161 EXPECT_TRUE(is_solid_color); |
| 162 EXPECT_EQ(color, solid_color); |
146 | 163 |
147 analysis.is_solid_color = false; | 164 is_solid_color = false; |
148 raster->PerformSolidColorAnalysis(gfx::Rect(35, 35, 10, 10), 0.1f, &analysis); | 165 color = SK_ColorTRANSPARENT; |
149 EXPECT_TRUE(analysis.is_solid_color); | 166 is_solid_color = raster->PerformSolidColorAnalysis(gfx::Rect(35, 35, 10, 10), |
150 EXPECT_EQ(analysis.solid_color, solid_color); | 167 0.1f, &color); |
| 168 EXPECT_TRUE(is_solid_color); |
| 169 EXPECT_EQ(color, solid_color); |
151 } | 170 } |
152 | 171 |
153 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidEmpty) { | 172 TEST(DisplayListRasterSourceTest, AnalyzeIsSolidEmpty) { |
154 gfx::Size layer_bounds(400, 400); | 173 gfx::Size layer_bounds(400, 400); |
155 | 174 |
156 scoped_ptr<FakeDisplayListRecordingSource> recording_source = | 175 scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
157 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); | 176 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); |
158 recording_source->Rerecord(); | 177 recording_source->Rerecord(); |
159 | 178 |
160 scoped_refptr<DisplayListRasterSource> raster = | 179 scoped_refptr<DisplayListRasterSource> raster = |
161 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 180 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
162 recording_source.get(), false); | 181 recording_source.get(), false); |
163 DisplayListRasterSource::SolidColorAnalysis analysis; | |
164 EXPECT_FALSE(analysis.is_solid_color); | |
165 | 182 |
166 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 400, 400), 1.f, &analysis); | 183 SkColor color = SK_ColorTRANSPARENT; |
| 184 bool is_solid_color = |
| 185 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 400, 400), 1.f, &color); |
167 | 186 |
168 EXPECT_TRUE(analysis.is_solid_color); | 187 EXPECT_TRUE(is_solid_color); |
169 EXPECT_EQ(analysis.solid_color, SkColorSetARGB(0, 0, 0, 0)); | 188 EXPECT_EQ(color, SkColorSetARGB(0, 0, 0, 0)); |
170 } | 189 } |
171 | 190 |
172 TEST(DisplayListRasterSourceTest, PixelRefIteratorDiscardableRefsOneTile) { | 191 TEST(DisplayListRasterSourceTest, PixelRefIteratorDiscardableRefsOneTile) { |
173 gfx::Size layer_bounds(512, 512); | 192 gfx::Size layer_bounds(512, 512); |
174 | 193 |
175 scoped_ptr<FakeDisplayListRecordingSource> recording_source = | 194 scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
176 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); | 195 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); |
177 | 196 |
178 skia::RefPtr<SkImage> discardable_image[2][2]; | 197 skia::RefPtr<SkImage> discardable_image[2][2]; |
179 discardable_image[0][0] = CreateDiscardableImage(gfx::Size(32, 32)); | 198 discardable_image[0][0] = CreateDiscardableImage(gfx::Size(32, 32)); |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 scoped_refptr<DisplayListRasterSource> raster = | 546 scoped_refptr<DisplayListRasterSource> raster = |
528 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 547 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
529 recording_source.get(), false); | 548 recording_source.get(), false); |
530 size_t total_memory_usage = raster->GetPictureMemoryUsage(); | 549 size_t total_memory_usage = raster->GetPictureMemoryUsage(); |
531 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); | 550 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); |
532 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); | 551 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); |
533 } | 552 } |
534 | 553 |
535 } // namespace | 554 } // namespace |
536 } // namespace cc | 555 } // namespace cc |
OLD | NEW |