| 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; | 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 Loading... |
| 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 |
| OLD | NEW |