1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "cc/resources/picture_pile_impl.h" 6 7 #include "cc/debug/lap_timer.h" 8 #include "cc/test/fake_picture_pile_impl.h" 9 #include "cc/test/fake_rendering_stats_instrumentation.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/perf/perf_test.h" 12 13 namespace cc { 14 namespace { 15 16 const int kTimeLimitMillis = 2000; 17 const int kWarmupRuns = 5; 18 const int kTimeCheckInterval = 10; 19 20 const int kTileSize = 100; 21 const int kLayerSize = 1000; 22 23 class PicturePileImplPerfTest : public testing::Test { 24 public: 25 PicturePileImplPerfTest() 26 : timer_(kWarmupRuns, 27 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 28 kTimeCheckInterval) {} 29 30 void RunAnalyzeTest(const std::string& test_name, float contents_scale) { 31 scoped_refptr<PicturePileImpl> pile = FakePicturePileImpl::CreateFilledPile( 32 gfx::Size(kTileSize, kTileSize), gfx::Size(kLayerSize, kLayerSize)); 33 // Content rect that will align with top-left tile at scale 1.0. 34 gfx::Rect content_rect(0, 0, kTileSize, kTileSize); 35 36 PicturePileImpl::Analysis analysis; 37 timer_.Reset(); 38 do { 39 pile->AnalyzeInRect(content_rect, contents_scale, &analysis); 40 timer_.NextLap(); 41 } while (!timer_.HasTimeLimitExpired()); 42 43 perf_test::PrintResult( 44 "analyze", "", test_name, timer_.LapsPerSecond(), "runs/s", true); 45 } 46 47 void RunRasterTest(const std::string& test_name, float contents_scale) { 48 scoped_refptr<PicturePileImpl> pile = FakePicturePileImpl::CreateFilledPile( 49 gfx::Size(kTileSize, kTileSize), gfx::Size(kLayerSize, kLayerSize)); 50 // Content rect that will align with top-left tile at scale 1.0. 51 gfx::Rect content_rect(0, 0, kTileSize, kTileSize); 52 53 SkBitmap bitmap; 54 bitmap.allocN32Pixels(1, 1); 55 SkCanvas canvas(bitmap); 56 57 FakeRenderingStatsInstrumentation rendering_stats_instrumentation; 58 timer_.Reset(); 59 do { 60 pile->RasterToBitmap(&canvas, 61 content_rect, 62 contents_scale, 63 &rendering_stats_instrumentation); 64 timer_.NextLap(); 65 } while (!timer_.HasTimeLimitExpired()); 66 67 perf_test::PrintResult( 68 "raster", "", test_name, timer_.LapsPerSecond(), "runs/s", true); 69 } 70 71 private: 72 LapTimer timer_; 73 }; 74 75 TEST_F(PicturePileImplPerfTest, Analyze) { 76 RunAnalyzeTest("1", 1.0f); 77 RunAnalyzeTest("4", 0.5f); 78 RunAnalyzeTest("100", 0.1f); 79 } 80 81 TEST_F(PicturePileImplPerfTest, Raster) { 82 RunRasterTest("1", 1.0f); 83 RunRasterTest("4", 0.5f); 84 RunRasterTest("100", 0.1f); 85 } 86 87 } // namespace 88 } // namespace cc 89