| 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 |