diff options
Diffstat (limited to 'chromium/cc/layers/picture_layer_impl_perftest.cc')
-rw-r--r-- | chromium/cc/layers/picture_layer_impl_perftest.cc | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/chromium/cc/layers/picture_layer_impl_perftest.cc b/chromium/cc/layers/picture_layer_impl_perftest.cc new file mode 100644 index 00000000000..26280c10de8 --- /dev/null +++ b/chromium/cc/layers/picture_layer_impl_perftest.cc @@ -0,0 +1,114 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "cc/layers/picture_layer_impl.h" + +#include "cc/debug/lap_timer.h" +#include "cc/test/fake_impl_proxy.h" +#include "cc/test/fake_layer_tree_host_impl.h" +#include "cc/test/fake_output_surface.h" +#include "cc/test/fake_picture_layer_impl.h" +#include "cc/test/fake_picture_pile_impl.h" +#include "cc/test/impl_side_painting_settings.h" +#include "cc/test/test_shared_bitmap_manager.h" +#include "cc/trees/layer_tree_impl.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/perf/perf_test.h" + +namespace cc { +namespace { + +static const int kTimeLimitMillis = 2000; +static const int kWarmupRuns = 5; +static const int kTimeCheckInterval = 10; + +class PictureLayerImplPerfTest : public testing::Test { + public: + PictureLayerImplPerfTest() + : proxy_(base::MessageLoopProxy::current()), + host_impl_(ImplSidePaintingSettings(), + &proxy_, + &shared_bitmap_manager_), + timer_(kWarmupRuns, + base::TimeDelta::FromMilliseconds(kTimeLimitMillis), + kTimeCheckInterval) {} + + virtual void SetUp() OVERRIDE { + host_impl_.InitializeRenderer( + FakeOutputSurface::Create3d().PassAs<OutputSurface>()); + } + + void SetupPendingTree(const gfx::Size& layer_bounds, + const gfx::Size& tile_size) { + scoped_refptr<FakePicturePileImpl> pile = + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); + host_impl_.CreatePendingTree(); + LayerTreeImpl* pending_tree = host_impl_.pending_tree(); + pending_tree->DetachLayerTree(); + + scoped_ptr<FakePictureLayerImpl> pending_layer = + FakePictureLayerImpl::CreateWithPile(pending_tree, 7, pile); + pending_layer->SetDrawsContent(true); + pending_tree->SetRootLayer(pending_layer.PassAs<LayerImpl>()); + + pending_layer_ = static_cast<FakePictureLayerImpl*>( + host_impl_.pending_tree()->LayerById(7)); + pending_layer_->DoPostCommitInitializationIfNeeded(); + } + + void RunLayerRasterTileIteratorTest(const std::string& test_name, + int num_tiles, + const gfx::Size& viewport_size) { + host_impl_.SetViewportSize(viewport_size); + host_impl_.pending_tree()->UpdateDrawProperties(); + + timer_.Reset(); + do { + int count = num_tiles; + for (PictureLayerImpl::LayerRasterTileIterator it(pending_layer_, false); + it && count; + ++it) { + --count; + } + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + perf_test::PrintResult("layer_raster_tile_iterator", + "", + test_name, + timer_.LapsPerSecond(), + "runs/s", + true); + } + + protected: + TestSharedBitmapManager shared_bitmap_manager_; + FakeImplProxy proxy_; + FakeLayerTreeHostImpl host_impl_; + FakePictureLayerImpl* pending_layer_; + LapTimer timer_; + + private: + DISALLOW_COPY_AND_ASSIGN(PictureLayerImplPerfTest); +}; + +TEST_F(PictureLayerImplPerfTest, LayerRasterTileIterator) { + SetupPendingTree(gfx::Size(10000, 10000), gfx::Size(256, 256)); + + float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; + + pending_layer_->AddTiling(low_res_factor); + pending_layer_->AddTiling(0.3f); + pending_layer_->AddTiling(0.7f); + pending_layer_->AddTiling(1.0f); + pending_layer_->AddTiling(2.0f); + + RunLayerRasterTileIteratorTest("32_100x100", 32, gfx::Size(100, 100)); + RunLayerRasterTileIteratorTest("32_500x500", 32, gfx::Size(500, 500)); + RunLayerRasterTileIteratorTest("64_100x100", 64, gfx::Size(100, 100)); + RunLayerRasterTileIteratorTest("64_500x500", 64, gfx::Size(500, 500)); +} + +} // namespace +} // namespace cc |