| Index: cc/resources/picture_layer_tiling_perftest.cc
|
| diff --git a/cc/resources/picture_layer_tiling_perftest.cc b/cc/resources/picture_layer_tiling_perftest.cc
|
| index 00d991a86023f569b1bfa5ccc7f5d1d069915689..575e13e5d6984ac67394ffddd461bc2f6b165fb3 100644
|
| --- a/cc/resources/picture_layer_tiling_perftest.cc
|
| +++ b/cc/resources/picture_layer_tiling_perftest.cc
|
| @@ -4,7 +4,13 @@
|
|
|
| #include "cc/debug/lap_timer.h"
|
| #include "cc/resources/picture_layer_tiling.h"
|
| +#include "cc/resources/resource_provider.h"
|
| +#include "cc/resources/scoped_resource.h"
|
| +#include "cc/test/fake_output_surface.h"
|
| +#include "cc/test/fake_output_surface_client.h"
|
| #include "cc/test/fake_picture_layer_tiling_client.h"
|
| +#include "cc/test/test_context_provider.h"
|
| +#include "cc/test/test_shared_bitmap_manager.h"
|
|
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/perf/perf_test.h"
|
| @@ -22,7 +28,19 @@ class PictureLayerTilingPerfTest : public testing::Test {
|
| PictureLayerTilingPerfTest()
|
| : timer_(kWarmupRuns,
|
| base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
|
| - kTimeCheckInterval) {}
|
| + kTimeCheckInterval),
|
| + context_provider_(TestContextProvider::Create()) {
|
| + output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
|
| + CHECK(output_surface_->BindToClient(&output_surface_client_));
|
| +
|
| + shared_bitmap_manager_.reset(new TestSharedBitmapManager());
|
| + resource_provider_ = ResourceProvider::Create(output_surface_.get(),
|
| + shared_bitmap_manager_.get(),
|
| + 0,
|
| + false,
|
| + 1,
|
| + false).Pass();
|
| + }
|
|
|
| virtual void SetUp() OVERRIDE {
|
| picture_layer_tiling_client_.SetTileSize(gfx::Size(256, 256));
|
| @@ -165,11 +183,105 @@ class PictureLayerTilingPerfTest : public testing::Test {
|
| true);
|
| }
|
|
|
| + void RunEvictionIteratorConstructTest(const std::string& test_name,
|
| + const gfx::Rect& viewport) {
|
| + gfx::Size bounds(viewport.size());
|
| + picture_layer_tiling_ =
|
| + PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_);
|
| + picture_layer_tiling_->UpdateTilePriorities(
|
| + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform());
|
| +
|
| + timer_.Reset();
|
| + TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES,
|
| + SMOOTHNESS_TAKES_PRIORITY,
|
| + NEW_CONTENT_TAKES_PRIORITY};
|
| + int priority_count = 0;
|
| + do {
|
| + PictureLayerTiling::TilingEvictionTileIterator it(
|
| + picture_layer_tiling_.get(), priorities[priority_count]);
|
| + priority_count = (priority_count + 1) % arraysize(priorities);
|
| + timer_.NextLap();
|
| + } while (!timer_.HasTimeLimitExpired());
|
| +
|
| + perf_test::PrintResult("tiling_eviction_tile_iterator_construct",
|
| + "",
|
| + test_name,
|
| + timer_.LapsPerSecond(),
|
| + "runs/s",
|
| + true);
|
| + }
|
| +
|
| + void RunEvictionIteratorConstructAndIterateTest(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, NULL, NULL, gfx::Transform());
|
| +
|
| + TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES,
|
| + SMOOTHNESS_TAKES_PRIORITY,
|
| + NEW_CONTENT_TAKES_PRIORITY};
|
| +
|
| + // Ensure all tiles have resources.
|
| + std::vector<Tile*> all_tiles = picture_layer_tiling_->AllTilesForTesting();
|
| + for (std::vector<Tile*>::iterator tile_it = all_tiles.begin();
|
| + tile_it != all_tiles.end();
|
| + ++tile_it) {
|
| + Tile* tile = *tile_it;
|
| + ManagedTileState::TileVersion& tile_version =
|
| + tile->GetTileVersionForTesting(tile->GetRasterModeForTesting());
|
| + tile_version.SetResourceForTesting(
|
| + ScopedResource::Create(resource_provider_.get()).Pass());
|
| + }
|
| +
|
| + int priority_count = 0;
|
| + timer_.Reset();
|
| + do {
|
| + int count = num_tiles;
|
| + PictureLayerTiling::TilingEvictionTileIterator it(
|
| + picture_layer_tiling_.get(), priorities[priority_count]);
|
| + while (count--) {
|
| + ASSERT_TRUE(it) << "count: " << count;
|
| + ASSERT_TRUE(*it != NULL) << "count: " << count;
|
| + ++it;
|
| + }
|
| + priority_count = (priority_count + 1) % arraysize(priorities);
|
| + timer_.NextLap();
|
| + } while (!timer_.HasTimeLimitExpired());
|
| +
|
| + // Remove all resources from tiles to make sure the tile version destructor
|
| + // doesn't complain.
|
| + for (std::vector<Tile*>::iterator tile_it = all_tiles.begin();
|
| + tile_it != all_tiles.end();
|
| + ++tile_it) {
|
| + Tile* tile = *tile_it;
|
| + ManagedTileState::TileVersion& tile_version =
|
| + tile->GetTileVersionForTesting(tile->GetRasterModeForTesting());
|
| + tile_version.SetResourceForTesting(scoped_ptr<ScopedResource>());
|
| + }
|
| +
|
| + perf_test::PrintResult(
|
| + "tiling_eviction_tile_iterator_construct_and_iterate",
|
| + "",
|
| + test_name,
|
| + timer_.LapsPerSecond(),
|
| + "runs/s",
|
| + true);
|
| + }
|
| +
|
| private:
|
| FakePictureLayerTilingClient picture_layer_tiling_client_;
|
| scoped_ptr<PictureLayerTiling> picture_layer_tiling_;
|
|
|
| LapTimer timer_;
|
| +
|
| + scoped_refptr<ContextProvider> context_provider_;
|
| + FakeOutputSurfaceClient output_surface_client_;
|
| + scoped_ptr<FakeOutputSurface> output_surface_;
|
| + scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
|
| + scoped_ptr<ResourceProvider> resource_provider_;
|
| };
|
|
|
| TEST_F(PictureLayerTilingPerfTest, Invalidate) {
|
| @@ -222,6 +334,27 @@ TEST_F(PictureLayerTilingPerfTest,
|
| "64_500x500", 64, gfx::Rect(0, 0, 500, 500));
|
| }
|
|
|
| +TEST_F(PictureLayerTilingPerfTest, TilingEvictionTileIteratorConstruct) {
|
| + RunEvictionIteratorConstructTest("0_0_100x100", gfx::Rect(0, 0, 100, 100));
|
| + RunEvictionIteratorConstructTest("50_0_100x100", gfx::Rect(50, 0, 100, 100));
|
| + RunEvictionIteratorConstructTest("100_0_100x100",
|
| + gfx::Rect(100, 0, 100, 100));
|
| + RunEvictionIteratorConstructTest("150_0_100x100",
|
| + gfx::Rect(150, 0, 100, 100));
|
| +}
|
| +
|
| +TEST_F(PictureLayerTilingPerfTest,
|
| + TilingEvictionTileIteratorConstructAndIterate) {
|
| + RunEvictionIteratorConstructAndIterateTest(
|
| + "32_100x100", 32, gfx::Rect(0, 0, 100, 100));
|
| + RunEvictionIteratorConstructAndIterateTest(
|
| + "32_500x500", 32, gfx::Rect(0, 0, 500, 500));
|
| + RunEvictionIteratorConstructAndIterateTest(
|
| + "64_100x100", 64, gfx::Rect(0, 0, 100, 100));
|
| + RunEvictionIteratorConstructAndIterateTest(
|
| + "64_500x500", 64, gfx::Rect(0, 0, 500, 500));
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace cc
|
|
|