• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
PicturePileImplPerfTest()25   PicturePileImplPerfTest()
26       : timer_(kWarmupRuns,
27                base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
28                kTimeCheckInterval) {}
29 
RunAnalyzeTest(const std::string & test_name,float contents_scale)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 
RunRasterTest(const std::string & test_name,float contents_scale)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 
TEST_F(PicturePileImplPerfTest,Analyze)75 TEST_F(PicturePileImplPerfTest, Analyze) {
76   RunAnalyzeTest("1", 1.0f);
77   RunAnalyzeTest("4", 0.5f);
78   RunAnalyzeTest("100", 0.1f);
79 }
80 
TEST_F(PicturePileImplPerfTest,Raster)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