• 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.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
55     bitmap.allocPixels();
56     SkCanvas canvas(bitmap);
57 
58     FakeRenderingStatsInstrumentation rendering_stats_instrumentation;
59     timer_.Reset();
60     do {
61       pile->RasterToBitmap(&canvas,
62                            content_rect,
63                            contents_scale,
64                            &rendering_stats_instrumentation);
65       timer_.NextLap();
66     } while (!timer_.HasTimeLimitExpired());
67 
68     perf_test::PrintResult(
69         "raster", "", test_name, timer_.LapsPerSecond(), "runs/s", true);
70   }
71 
72  private:
73   LapTimer timer_;
74 };
75 
TEST_F(PicturePileImplPerfTest,Analyze)76 TEST_F(PicturePileImplPerfTest, Analyze) {
77   RunAnalyzeTest("1", 1.0f);
78   RunAnalyzeTest("4", 0.5f);
79   RunAnalyzeTest("100", 0.1f);
80 }
81 
TEST_F(PicturePileImplPerfTest,Raster)82 TEST_F(PicturePileImplPerfTest, Raster) {
83   RunRasterTest("1", 1.0f);
84   RunRasterTest("4", 0.5f);
85   RunRasterTest("100", 0.1f);
86 }
87 
88 }  // namespace
89 }  // namespace cc
90