Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(485)

Side by Side Diff: cc/playback/display_list_raster_source_unittest.cc

Issue 1531013004: cc: Do solid color analysis before scheduling tiles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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; 182 DisplayListRasterSource::SolidColorAnalysis analysis;
164 EXPECT_FALSE(analysis.is_solid_color); 183 EXPECT_FALSE(analysis.is_solid_color);
165 184
166 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 400, 400), 1.f, &analysis); 185 SkColor color = SK_ColorTRANSPARENT;
186 bool is_solid_color =
187 raster->PerformSolidColorAnalysis(gfx::Rect(0, 0, 400, 400), 1.f, &color);
167 188
168 EXPECT_TRUE(analysis.is_solid_color); 189 EXPECT_TRUE(is_solid_color);
169 EXPECT_EQ(analysis.solid_color, SkColorSetARGB(0, 0, 0, 0)); 190 EXPECT_EQ(color, SkColorSetARGB(0, 0, 0, 0));
170 } 191 }
171 192
172 TEST(DisplayListRasterSourceTest, PixelRefIteratorDiscardableRefsOneTile) { 193 TEST(DisplayListRasterSourceTest, PixelRefIteratorDiscardableRefsOneTile) {
173 gfx::Size layer_bounds(512, 512); 194 gfx::Size layer_bounds(512, 512);
174 195
175 scoped_ptr<FakeDisplayListRecordingSource> recording_source = 196 scoped_ptr<FakeDisplayListRecordingSource> recording_source =
176 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); 197 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds);
177 198
178 skia::RefPtr<SkImage> discardable_image[2][2]; 199 skia::RefPtr<SkImage> discardable_image[2][2];
179 discardable_image[0][0] = CreateDiscardableImage(gfx::Size(32, 32)); 200 discardable_image[0][0] = CreateDiscardableImage(gfx::Size(32, 32));
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 scoped_refptr<DisplayListRasterSource> raster = 548 scoped_refptr<DisplayListRasterSource> raster =
528 DisplayListRasterSource::CreateFromDisplayListRecordingSource( 549 DisplayListRasterSource::CreateFromDisplayListRecordingSource(
529 recording_source.get(), false); 550 recording_source.get(), false);
530 size_t total_memory_usage = raster->GetPictureMemoryUsage(); 551 size_t total_memory_usage = raster->GetPictureMemoryUsage();
531 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); 552 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes);
532 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); 553 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes);
533 } 554 }
534 555
535 } // namespace 556 } // namespace
536 } // namespace cc 557 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698