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