diff options
Diffstat (limited to 'chromium/cc/resources/picture_layer_tiling_perftest.cc')
-rw-r--r-- | chromium/cc/resources/picture_layer_tiling_perftest.cc | 159 |
1 files changed, 81 insertions, 78 deletions
diff --git a/chromium/cc/resources/picture_layer_tiling_perftest.cc b/chromium/cc/resources/picture_layer_tiling_perftest.cc index 7a9b8dff4b4..1e698b9e0ec 100644 --- a/chromium/cc/resources/picture_layer_tiling_perftest.cc +++ b/chromium/cc/resources/picture_layer_tiling_perftest.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "cc/debug/lap_timer.h" #include "cc/resources/picture_layer_tiling.h" #include "cc/test/fake_picture_layer_tiling_client.h" @@ -18,10 +19,14 @@ static const int kTimeCheckInterval = 10; class PictureLayerTilingPerfTest : public testing::Test { public: - PictureLayerTilingPerfTest() : num_runs_(0) {} + PictureLayerTilingPerfTest() + : timer_(kWarmupRuns, + base::TimeDelta::FromMilliseconds(kTimeLimitMillis), + kTimeCheckInterval) {} virtual void SetUp() OVERRIDE { picture_layer_tiling_client_.SetTileSize(gfx::Size(256, 256)); + picture_layer_tiling_client_.set_max_tiles_for_interest_area(250); picture_layer_tiling_ = PictureLayerTiling::Create( 1, gfx::Size(256 * 50, 256 * 50), &picture_layer_tiling_client_); picture_layer_tiling_->CreateAllTilesForTesting(); @@ -31,70 +36,38 @@ class PictureLayerTilingPerfTest : public testing::Test { picture_layer_tiling_.reset(NULL); } - void EndTest() { - elapsed_ = base::TimeTicks::HighResNow() - start_time_; - } - - bool DidRun() { - ++num_runs_; - if (num_runs_ == kWarmupRuns) - start_time_ = base::TimeTicks::HighResNow(); - - if (!start_time_.is_null() && (num_runs_ % kTimeCheckInterval) == 0) { - base::TimeDelta elapsed = base::TimeTicks::HighResNow() - start_time_; - if (elapsed >= base::TimeDelta::FromMilliseconds(kTimeLimitMillis)) { - elapsed_ = elapsed; - return false; - } - } - return true; - } - void RunInvalidateTest(const std::string& test_name, const Region& region) { - start_time_ = base::TimeTicks(); - num_runs_ = 0; + timer_.Reset(); do { picture_layer_tiling_->Invalidate(region); - } while (DidRun()); + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); - perf_test::PrintResult("invalidation", "", test_name, - num_runs_ / elapsed_.InSecondsF(), "runs/s", true); + perf_test::PrintResult( + "invalidation", "", test_name, timer_.LapsPerSecond(), "runs/s", true); } - void RunUpdateTilePrioritiesStationaryTest( - const std::string& test_name, - const gfx::Transform& transform) { - start_time_ = base::TimeTicks(); - num_runs_ = 0; + void RunUpdateTilePrioritiesStationaryTest(const std::string& test_name, + const gfx::Transform& transform) { + gfx::Rect viewport_rect(0, 0, 1024, 768); - gfx::Size layer_bounds(50 * 256, 50 * 256); + timer_.Reset(); do { picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, - layer_bounds, - gfx::Rect(layer_bounds), - gfx::Rect(layer_bounds), - layer_bounds, - layer_bounds, - 1.f, - 1.f, - transform, - transform, - num_runs_ + 1, - 250); - } while (DidRun()); - - perf_test::PrintResult("update_tile_priorities_stationary", "", test_name, - num_runs_ / elapsed_.InSecondsF(), "runs/s", true); + ACTIVE_TREE, viewport_rect, 1.f, timer_.NumLaps() + 1); + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + perf_test::PrintResult("update_tile_priorities_stationary", + "", + test_name, + timer_.LapsPerSecond(), + "runs/s", + true); } - void RunUpdateTilePrioritiesScrollingTest( - const std::string& test_name, - const gfx::Transform& transform) { - start_time_ = base::TimeTicks(); - num_runs_ = 0; - - gfx::Size layer_bounds(50 * 256, 50 * 256); + void RunUpdateTilePrioritiesScrollingTest(const std::string& test_name, + const gfx::Transform& transform) { gfx::Size viewport_size(1024, 768); gfx::Rect viewport_rect(viewport_size); int xoffsets[] = {10, 0, -10, 0}; @@ -102,44 +75,66 @@ class PictureLayerTilingPerfTest : public testing::Test { int offsetIndex = 0; int offsetCount = 0; const int maxOffsetCount = 1000; + + timer_.Reset(); do { picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, - viewport_size, - viewport_rect, - gfx::Rect(layer_bounds), - layer_bounds, - layer_bounds, - 1.f, - 1.f, - transform, - transform, - num_runs_ + 1, - 250); - - viewport_rect = gfx::Rect( - viewport_rect.x() + xoffsets[offsetIndex], - viewport_rect.y() + yoffsets[offsetIndex], - viewport_rect.width(), - viewport_rect.height()); + ACTIVE_TREE, viewport_rect, 1.f, timer_.NumLaps() + 1); + + viewport_rect = gfx::Rect(viewport_rect.x() + xoffsets[offsetIndex], + viewport_rect.y() + yoffsets[offsetIndex], + viewport_rect.width(), + viewport_rect.height()); if (++offsetCount > maxOffsetCount) { offsetCount = 0; offsetIndex = (offsetIndex + 1) % 4; } - } while (DidRun()); + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + perf_test::PrintResult("update_tile_priorities_scrolling", + "", + test_name, + timer_.LapsPerSecond(), + "runs/s", + true); + } - perf_test::PrintResult("update_tile_priorities_scrolling", "", test_name, - num_runs_ / elapsed_.InSecondsF(), "runs/s", true); + void RunTilingRasterTileIteratorTest(const std::string& test_name, + int num_tiles, + const gfx::Rect& viewport) { + gfx::Size bounds(10000, 10000); + picture_layer_tiling_ = + PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); + picture_layer_tiling_->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.0f, 1.0); + + timer_.Reset(); + do { + int count = num_tiles; + for (PictureLayerTiling::TilingRasterTileIterator it( + picture_layer_tiling_.get(), ACTIVE_TREE); + it && count; + ++it) { + --count; + } + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + perf_test::PrintResult("tiling_raster_tile_iterator", + "", + test_name, + timer_.LapsPerSecond(), + "runs/s", + true); } private: FakePictureLayerTilingClient picture_layer_tiling_client_; scoped_ptr<PictureLayerTiling> picture_layer_tiling_; - base::TimeTicks start_time_; - base::TimeDelta elapsed_; - int num_runs_; + LapTimer timer_; }; TEST_F(PictureLayerTilingPerfTest, Invalidate) { @@ -160,6 +155,7 @@ TEST_F(PictureLayerTilingPerfTest, DISABLED_UpdateTilePriorities) { TEST_F(PictureLayerTilingPerfTest, UpdateTilePriorities) { #endif // defined(OS_ANDROID) gfx::Transform transform; + RunUpdateTilePrioritiesStationaryTest("no_transform", transform); RunUpdateTilePrioritiesScrollingTest("no_transform", transform); @@ -172,6 +168,13 @@ TEST_F(PictureLayerTilingPerfTest, UpdateTilePriorities) { RunUpdateTilePrioritiesScrollingTest("perspective", transform); } +TEST_F(PictureLayerTilingPerfTest, TilingRasterTileIterator) { + RunTilingRasterTileIteratorTest("32_100x100", 32, gfx::Rect(0, 0, 100, 100)); + RunTilingRasterTileIteratorTest("32_500x500", 32, gfx::Rect(0, 0, 500, 500)); + RunTilingRasterTileIteratorTest("64_100x100", 64, gfx::Rect(0, 0, 100, 100)); + RunTilingRasterTileIteratorTest("64_500x500", 64, gfx::Rect(0, 0, 500, 500)); +} + } // namespace } // namespace cc |