blob: c0b1e3254d2cde564e12419521a610dcfdaa4dbe [file] [log] [blame]
[email protected]8428be22013-10-23 07:37:441// Copyright 2013 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
avi02a4d172015-12-21 06:14:365#include <stddef.h>
6
vmpstr36d6abff2015-11-14 01:37:117#include <deque>
danakj60bc3bc2016-04-09 00:24:488#include <memory>
[email protected]8428be22013-10-23 07:37:449#include <sstream>
10
[email protected]8428be22013-10-23 07:37:4411#include "base/files/file_path.h"
thestig90a09082014-09-10 07:59:4612#include "base/files/file_util.h"
[email protected]8428be22013-10-23 07:37:4413#include "base/path_service.h"
14#include "base/strings/string_piece.h"
15#include "base/threading/thread.h"
16#include "base/time/time.h"
chrishtr82b5d9502017-03-20 18:25:3317#include "cc/base/lap_timer.h"
[email protected]8428be22013-10-23 07:37:4418#include "cc/layers/layer.h"
19#include "cc/test/fake_content_layer_client.h"
20#include "cc/test/fake_layer_tree_host_client.h"
[email protected]8428be22013-10-23 07:37:4421#include "cc/test/layer_tree_json_parser.h"
22#include "cc/test/layer_tree_test.h"
23#include "cc/test/paths.h"
danakj60bc3bc2016-04-09 00:24:4824#include "cc/trees/layer_tree_host_common.h"
[email protected]8428be22013-10-23 07:37:4425#include "cc/trees/layer_tree_impl.h"
26#include "testing/perf/perf_test.h"
27
28namespace cc {
29namespace {
30
31static const int kTimeLimitMillis = 2000;
32static const int kWarmupRuns = 5;
33static const int kTimeCheckInterval = 10;
34
35class LayerTreeHostCommonPerfTest : public LayerTreeTest {
36 public:
37 LayerTreeHostCommonPerfTest()
38 : timer_(kWarmupRuns,
39 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
40 kTimeCheckInterval) {}
41
42 void ReadTestFile(const std::string& name) {
43 base::FilePath test_data_dir;
[email protected]e51444a2013-12-10 23:05:0144 ASSERT_TRUE(PathService::Get(CCPaths::DIR_TEST_DATA, &test_data_dir));
[email protected]8428be22013-10-23 07:37:4445 base::FilePath json_file = test_data_dir.AppendASCII(name + ".json");
46 ASSERT_TRUE(base::ReadFileToString(json_file, &json_));
47 }
48
dcheng716bedf2014-10-21 09:51:0849 void SetupTree() override {
[email protected]8428be22013-10-23 07:37:4450 gfx::Size viewport = gfx::Size(720, 1038);
khushalsagarb69ba9452017-01-27 22:20:0751 layer_tree_host()->SetViewportSize(viewport);
[email protected]8428be22013-10-23 07:37:4452 scoped_refptr<Layer> root =
53 ParseTreeFromJson(json_, &content_layer_client_);
54 ASSERT_TRUE(root.get());
khushalsagarb69ba9452017-01-27 22:20:0755 layer_tree_host()->SetRootLayer(root);
chrishtr01539b802015-11-24 08:11:3256 content_layer_client_.set_bounds(viewport);
[email protected]8428be22013-10-23 07:37:4457 }
58
59 void SetTestName(const std::string& name) { test_name_ = name; }
60
dcheng716bedf2014-10-21 09:51:0861 void AfterTest() override {
[email protected]8428be22013-10-23 07:37:4462 CHECK(!test_name_.empty()) << "Must SetTestName() before TearDown().";
[email protected]8428be22013-10-23 07:37:4463 perf_test::PrintResult("calc_draw_props_time",
64 "",
65 test_name_,
66 1000 * timer_.MsPerLap(),
67 "us",
68 true);
69 }
70
71 protected:
72 FakeContentLayerClient content_layer_client_;
73 LapTimer timer_;
74 std::string test_name_;
75 std::string json_;
76};
77
Dana Jansensab277762015-06-12 23:52:5578class CalcDrawPropsTest : public LayerTreeHostCommonPerfTest {
[email protected]8428be22013-10-23 07:37:4479 public:
danakj0943a112016-08-11 00:33:4680 void RunCalcDrawProps() { RunTest(CompositorMode::SINGLE_THREADED); }
[email protected]8428be22013-10-23 07:37:4481
dcheng716bedf2014-10-21 09:51:0882 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
[email protected]8428be22013-10-23 07:37:4483
dcheng716bedf2014-10-21 09:51:0884 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
[email protected]8428be22013-10-23 07:37:4485 timer_.Reset();
86 LayerTreeImpl* active_tree = host_impl->active_tree();
87
88 do {
[email protected]8428be22013-10-23 07:37:4489 int max_texture_size = 8096;
danakjdc24211f22017-05-09 18:58:2590 DoCalcDrawPropertiesImpl(max_texture_size, active_tree, host_impl);
[email protected]8428be22013-10-23 07:37:4491
92 timer_.NextLap();
93 } while (!timer_.HasTimeLimitExpired());
94
95 EndTest();
96 }
[email protected]bebb1a82014-06-06 05:03:5497
danakjdc24211f22017-05-09 18:58:2598 void DoCalcDrawPropertiesImpl(int max_texture_size,
[email protected]bebb1a82014-06-06 05:03:5499 LayerTreeImpl* active_tree,
100 LayerTreeHostImpl* host_impl) {
ajumab784ef42017-04-28 23:01:52101 RenderSurfaceList update_list;
[email protected]bebb1a82014-06-06 05:03:54102 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
danakj914d3012017-05-05 18:08:34103 active_tree->root_layer_for_testing(),
104 active_tree->DeviceViewport().size(), host_impl->DrawTransform(),
105 active_tree->device_scale_factor(),
aelias58eec0812014-12-04 01:04:40106 active_tree->current_page_scale_factor(),
ccameronb9aec4502014-12-05 19:31:00107 active_tree->InnerViewportContainerLayer(),
ajuma6b46da22015-06-25 21:53:02108 active_tree->InnerViewportScrollLayer(),
109 active_tree->OuterViewportScrollLayer(),
ccameronb9aec4502014-12-05 19:31:00110 active_tree->elastic_overscroll()->Current(active_tree->IsActiveTree()),
aeliasc26b50b72015-07-14 20:18:25111 active_tree->OverscrollElasticityLayer(), max_texture_size,
[email protected]bebb1a82014-06-06 05:03:54112 host_impl->settings().layer_transforms_should_scale_layer_contents,
ajuma0adb5902016-04-28 16:32:38113 &update_list, active_tree->property_trees());
[email protected]bebb1a82014-06-06 05:03:54114 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
115 }
116};
117
Dana Jansensab277762015-06-12 23:52:55118TEST_F(CalcDrawPropsTest, TenTen) {
[email protected]8428be22013-10-23 07:37:44119 SetTestName("10_10");
120 ReadTestFile("10_10_layer_tree");
121 RunCalcDrawProps();
122}
123
Dana Jansensab277762015-06-12 23:52:55124TEST_F(CalcDrawPropsTest, HeavyPage) {
[email protected]8428be22013-10-23 07:37:44125 SetTestName("heavy_page");
126 ReadTestFile("heavy_layer_tree");
127 RunCalcDrawProps();
128}
129
Dana Jansensab277762015-06-12 23:52:55130TEST_F(CalcDrawPropsTest, TouchRegionLight) {
[email protected]9d161d22013-10-29 20:54:10131 SetTestName("touch_region_light");
132 ReadTestFile("touch_region_light");
133 RunCalcDrawProps();
134}
135
Dana Jansensab277762015-06-12 23:52:55136TEST_F(CalcDrawPropsTest, TouchRegionHeavy) {
[email protected]9d161d22013-10-29 20:54:10137 SetTestName("touch_region_heavy");
138 ReadTestFile("touch_region_heavy");
139 RunCalcDrawProps();
140}
141
[email protected]8428be22013-10-23 07:37:44142} // namespace
143} // namespace cc