Index: cc/trees/layer_tree_host_perftest.cc |
diff --git a/cc/trees/layer_tree_host_perftest.cc b/cc/trees/layer_tree_host_perftest.cc |
deleted file mode 100644 |
index c8e2a8c02c1ee5760000ffd3e3b7eaa5c3f3482f..0000000000000000000000000000000000000000 |
--- a/cc/trees/layer_tree_host_perftest.cc |
+++ /dev/null |
@@ -1,347 +0,0 @@ |
-// Copyright 2012 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/trees/layer_tree_host.h" |
- |
-#include <sstream> |
- |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/path_service.h" |
-#include "base/strings/string_piece.h" |
-#include "base/time/time.h" |
-#include "cc/debug/lap_timer.h" |
-#include "cc/layers/content_layer.h" |
-#include "cc/layers/nine_patch_layer.h" |
-#include "cc/layers/solid_color_layer.h" |
-#include "cc/layers/texture_layer.h" |
-#include "cc/resources/single_release_callback.h" |
-#include "cc/resources/texture_mailbox.h" |
-#include "cc/test/fake_content_layer_client.h" |
-#include "cc/test/layer_tree_json_parser.h" |
-#include "cc/test/layer_tree_test.h" |
-#include "cc/test/paths.h" |
-#include "cc/trees/layer_tree_impl.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 LayerTreeHostPerfTest : public LayerTreeTest { |
- public: |
- LayerTreeHostPerfTest() |
- : draw_timer_(kWarmupRuns, |
- base::TimeDelta::FromMilliseconds(kTimeLimitMillis), |
- kTimeCheckInterval), |
- commit_timer_(0, base::TimeDelta(), 1), |
- full_damage_each_frame_(false), |
- begin_frame_driven_drawing_(false), |
- measure_commit_cost_(false) { |
- } |
- |
- void InitializeSettings(LayerTreeSettings* settings) override { |
- settings->throttle_frame_production = false; |
- } |
- |
- void BeginTest() override { |
- BuildTree(); |
- PostSetNeedsCommitToMainThread(); |
- } |
- |
- void BeginMainFrame(const BeginFrameArgs& args) override { |
- if (begin_frame_driven_drawing_ && !TestEnded()) { |
- layer_tree_host()->SetNeedsAnimate(); |
- layer_tree_host()->SetNextCommitForcesRedraw(); |
- } |
- } |
- |
- void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { |
- if (measure_commit_cost_) |
- commit_timer_.Start(); |
- } |
- |
- void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
- if (measure_commit_cost_ && draw_timer_.IsWarmedUp()) { |
- commit_timer_.NextLap(); |
- } |
- } |
- |
- void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
- if (TestEnded() || CleanUpStarted()) |
- return; |
- draw_timer_.NextLap(); |
- if (draw_timer_.HasTimeLimitExpired()) { |
- CleanUpAndEndTest(impl); |
- return; |
- } |
- if (!begin_frame_driven_drawing_) |
- impl->SetNeedsRedraw(); |
- if (full_damage_each_frame_) |
- impl->SetFullRootLayerDamage(); |
- } |
- |
- virtual void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) { EndTest(); } |
- |
- virtual bool CleanUpStarted() { return false; } |
- |
- virtual void BuildTree() {} |
- |
- void AfterTest() override { |
- CHECK(!test_name_.empty()) << "Must SetTestName() before AfterTest()."; |
- perf_test::PrintResult("layer_tree_host_frame_time", "", test_name_, |
- 1000 * draw_timer_.MsPerLap(), "us", true); |
- if (measure_commit_cost_) { |
- perf_test::PrintResult("layer_tree_host_commit_time", "", test_name_, |
- 1000 * commit_timer_.MsPerLap(), "us", true); |
- } |
- } |
- |
- protected: |
- LapTimer draw_timer_; |
- LapTimer commit_timer_; |
- |
- std::string test_name_; |
- FakeContentLayerClient fake_content_layer_client_; |
- bool full_damage_each_frame_; |
- bool begin_frame_driven_drawing_; |
- |
- bool measure_commit_cost_; |
-}; |
- |
- |
-class LayerTreeHostPerfTestJsonReader : public LayerTreeHostPerfTest { |
- public: |
- LayerTreeHostPerfTestJsonReader() |
- : LayerTreeHostPerfTest() { |
- } |
- |
- void SetTestName(const std::string& name) { |
- test_name_ = name; |
- } |
- |
- void ReadTestFile(const std::string& name) { |
- base::FilePath test_data_dir; |
- ASSERT_TRUE(PathService::Get(CCPaths::DIR_TEST_DATA, &test_data_dir)); |
- base::FilePath json_file = test_data_dir.AppendASCII(name + ".json"); |
- ASSERT_TRUE(base::ReadFileToString(json_file, &json_)); |
- } |
- |
- void BuildTree() override { |
- gfx::Size viewport = gfx::Size(720, 1038); |
- layer_tree_host()->SetViewportSize(viewport); |
- scoped_refptr<Layer> root = ParseTreeFromJson(json_, |
- &fake_content_layer_client_); |
- ASSERT_TRUE(root.get()); |
- layer_tree_host()->SetRootLayer(root); |
- } |
- |
- private: |
- std::string json_; |
-}; |
- |
-// Simulates a tab switcher scene with two stacks of 10 tabs each. |
-TEST_F(LayerTreeHostPerfTestJsonReader, TenTenSingleThread) { |
- SetTestName("10_10_single_thread"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTest(false, false, false); |
-} |
- |
-TEST_F(LayerTreeHostPerfTestJsonReader, TenTenThreadedImplSide) { |
- SetTestName("10_10_threaded_impl_side"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTestWithImplSidePainting(); |
-} |
- |
-// Simulates a tab switcher scene with two stacks of 10 tabs each. |
-TEST_F(LayerTreeHostPerfTestJsonReader, |
- TenTenSingleThread_FullDamageEachFrame) { |
- full_damage_each_frame_ = true; |
- SetTestName("10_10_single_thread_full_damage_each_frame"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTest(false, false, false); |
-} |
- |
-TEST_F(LayerTreeHostPerfTestJsonReader, |
- TenTenThreadedImplSide_FullDamageEachFrame) { |
- full_damage_each_frame_ = true; |
- SetTestName("10_10_threaded_impl_side_full_damage_each_frame"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTestWithImplSidePainting(); |
-} |
- |
-// Invalidates a leaf layer in the tree on the main thread after every commit. |
-class LayerTreeHostPerfTestLeafInvalidates |
- : public LayerTreeHostPerfTestJsonReader { |
- public: |
- void BuildTree() override { |
- LayerTreeHostPerfTestJsonReader::BuildTree(); |
- |
- // Find a leaf layer. |
- for (layer_to_invalidate_ = layer_tree_host()->root_layer(); |
- layer_to_invalidate_->children().size(); |
- layer_to_invalidate_ = layer_to_invalidate_->children()[0].get()) { |
- } |
- } |
- |
- void DidCommitAndDrawFrame() override { |
- if (TestEnded()) |
- return; |
- |
- layer_to_invalidate_->SetOpacity( |
- layer_to_invalidate_->opacity() != 1.f ? 1.f : 0.5f); |
- } |
- |
- protected: |
- Layer* layer_to_invalidate_; |
-}; |
- |
-// Simulates a tab switcher scene with two stacks of 10 tabs each. Invalidate a |
-// property on a leaf layer in the tree every commit. |
-TEST_F(LayerTreeHostPerfTestLeafInvalidates, TenTenSingleThread) { |
- SetTestName("10_10_single_thread_leaf_invalidates"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTest(false, false, false); |
-} |
- |
-TEST_F(LayerTreeHostPerfTestLeafInvalidates, TenTenThreadedImplSide) { |
- SetTestName("10_10_threaded_impl_side_leaf_invalidates"); |
- ReadTestFile("10_10_layer_tree"); |
- RunTestWithImplSidePainting(); |
-} |
- |
-// Simulates main-thread scrolling on each frame. |
-class ScrollingLayerTreePerfTest : public LayerTreeHostPerfTestJsonReader { |
- public: |
- ScrollingLayerTreePerfTest() |
- : LayerTreeHostPerfTestJsonReader() { |
- } |
- |
- void BuildTree() override { |
- LayerTreeHostPerfTestJsonReader::BuildTree(); |
- scrollable_ = layer_tree_host()->root_layer()->children()[1]; |
- ASSERT_TRUE(scrollable_.get()); |
- } |
- |
- void Layout() override { |
- if (TestEnded()) |
- return; |
- static const gfx::Vector2d delta = gfx::Vector2d(0, 10); |
- scrollable_->SetScrollOffset( |
- gfx::ScrollOffsetWithDelta(scrollable_->scroll_offset(), delta)); |
- } |
- |
- private: |
- scoped_refptr<Layer> scrollable_; |
-}; |
- |
-TEST_F(ScrollingLayerTreePerfTest, LongScrollablePageSingleThread) { |
- SetTestName("long_scrollable_page"); |
- ReadTestFile("long_scrollable_page"); |
- // TODO(vollick): Remove verify_property_trees setting after |
- // crbug.com/444219 is fixed. |
- bool old_verify_property_trees = verify_property_trees(); |
- set_verify_property_trees(false); |
- RunTest(false, false, false); |
- set_verify_property_trees(old_verify_property_trees); |
-} |
- |
-TEST_F(ScrollingLayerTreePerfTest, LongScrollablePageThreadedImplSide) { |
- SetTestName("long_scrollable_page_threaded_impl_side"); |
- ReadTestFile("long_scrollable_page"); |
- // TODO(vollick): Remove verify_property_trees setting after |
- // crbug.com/444219 is fixed. |
- bool old_verify_property_trees = verify_property_trees(); |
- set_verify_property_trees(false); |
- RunTestWithImplSidePainting(); |
- set_verify_property_trees(old_verify_property_trees); |
-} |
- |
-static void EmptyReleaseCallback(uint32 sync_point, bool lost_resource) {} |
- |
-// Simulates main-thread scrolling on each frame. |
-class BrowserCompositorInvalidateLayerTreePerfTest |
- : public LayerTreeHostPerfTestJsonReader { |
- public: |
- BrowserCompositorInvalidateLayerTreePerfTest() |
- : LayerTreeHostPerfTestJsonReader(), |
- next_sync_point_(1), |
- clean_up_started_(false) {} |
- |
- void BuildTree() override { |
- LayerTreeHostPerfTestJsonReader::BuildTree(); |
- tab_contents_ = |
- static_cast<TextureLayer*>( |
- layer_tree_host()->root_layer()->children()[0]-> |
- children()[0]-> |
- children()[0]-> |
- children()[0].get()); |
- ASSERT_TRUE(tab_contents_.get()); |
- } |
- |
- void WillCommit() override { |
- if (CleanUpStarted()) |
- return; |
- gpu::Mailbox gpu_mailbox; |
- std::ostringstream name_stream; |
- name_stream << "name" << next_sync_point_; |
- gpu_mailbox.SetName( |
- reinterpret_cast<const int8*>(name_stream.str().c_str())); |
- scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( |
- base::Bind(&EmptyReleaseCallback)); |
- TextureMailbox mailbox(gpu_mailbox, GL_TEXTURE_2D, next_sync_point_); |
- next_sync_point_++; |
- |
- tab_contents_->SetTextureMailbox(mailbox, callback.Pass()); |
- } |
- |
- void DidCommit() override { |
- if (CleanUpStarted()) |
- return; |
- layer_tree_host()->SetNeedsCommit(); |
- } |
- |
- void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) override { |
- clean_up_started_ = true; |
- MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&BrowserCompositorInvalidateLayerTreePerfTest:: |
- CleanUpAndEndTestOnMainThread, |
- base::Unretained(this))); |
- } |
- |
- void CleanUpAndEndTestOnMainThread() { |
- tab_contents_->SetTextureMailbox(TextureMailbox(), nullptr); |
- EndTest(); |
- } |
- |
- bool CleanUpStarted() override { return clean_up_started_; } |
- |
- private: |
- scoped_refptr<TextureLayer> tab_contents_; |
- unsigned next_sync_point_; |
- bool clean_up_started_; |
-}; |
- |
-TEST_F(BrowserCompositorInvalidateLayerTreePerfTest, DenseBrowserUI) { |
- measure_commit_cost_ = true; |
- SetTestName("dense_layer_tree"); |
- ReadTestFile("dense_layer_tree"); |
- RunTestWithImplSidePainting(); |
-} |
- |
-// Simulates a page with several large, transformed and animated layers. |
-TEST_F(LayerTreeHostPerfTestJsonReader, HeavyPageThreadedImplSide) { |
- begin_frame_driven_drawing_ = true; |
- measure_commit_cost_ = true; |
- SetTestName("heavy_page"); |
- ReadTestFile("heavy_layer_tree"); |
- RunTestWithImplSidePainting(); |
-} |
- |
-} // namespace |
-} // namespace cc |