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.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 
     76 TEST_F(PicturePileImplPerfTest, Analyze) {
     77   RunAnalyzeTest("1", 1.0f);
     78   RunAnalyzeTest("4", 0.5f);
     79   RunAnalyzeTest("100", 0.1f);
     80 }
     81 
     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