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