Home | History | Annotate | Download | only in resources
      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