Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Side by Side Diff: cc/trees/occlusion_tracker_perftest.cc

Issue 165413002: cc: Add an occlusion perf test with more than 1 opaque layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: perftest-morelayers: c Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/occlusion_tracker.h" 5 #include "cc/trees/occlusion_tracker.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "cc/layers/layer_iterator.h" 8 #include "cc/layers/layer_iterator.h"
9 #include "cc/layers/solid_color_layer_impl.h" 9 #include "cc/layers/solid_color_layer_impl.h"
10 #include "cc/test/fake_layer_tree_host_impl_client.h" 10 #include "cc/test/fake_layer_tree_host_impl_client.h"
11 #include "cc/test/fake_output_surface.h" 11 #include "cc/test/fake_output_surface.h"
12 #include "cc/test/fake_proxy.h" 12 #include "cc/test/fake_proxy.h"
13 #include "cc/test/fake_rendering_stats_instrumentation.h" 13 #include "cc/test/fake_rendering_stats_instrumentation.h"
14 #include "cc/test/lap_timer.h" 14 #include "cc/test/lap_timer.h"
15 #include "cc/trees/layer_tree_host_impl.h" 15 #include "cc/trees/layer_tree_host_impl.h"
16 #include "cc/trees/layer_tree_impl.h" 16 #include "cc/trees/layer_tree_impl.h"
17 #include "cc/trees/single_thread_proxy.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/perf/perf_test.h" 19 #include "testing/perf/perf_test.h"
19 20
20 namespace cc { 21 namespace cc {
21 namespace { 22 namespace {
22 23
23 static const int kTimeLimitMillis = 2000; 24 static const int kTimeLimitMillis = 2000;
24 static const int kWarmupRuns = 5; 25 static const int kWarmupRuns = 5;
25 static const int kTimeCheckInterval = 10; 26 static const int kTimeCheckInterval = 10;
26 27
27 class OcclusionTrackerPerfTest : public testing::Test { 28 class OcclusionTrackerPerfTest : public testing::Test {
28 public: 29 public:
29 OcclusionTrackerPerfTest() 30 OcclusionTrackerPerfTest()
30 : timer_(kWarmupRuns, 31 : timer_(kWarmupRuns,
31 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 32 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
32 kTimeCheckInterval) {} 33 kTimeCheckInterval),
34 impl_(&proxy_) {}
33 void CreateHost() { 35 void CreateHost() {
34 LayerTreeSettings settings; 36 LayerTreeSettings settings;
35 host_impl_ = LayerTreeHostImpl::Create( 37 host_impl_ = LayerTreeHostImpl::Create(
36 settings, &client_, &proxy_, &stats_, NULL, 1); 38 settings, &client_, &proxy_, &stats_, NULL, 1);
37 host_impl_->InitializeRenderer( 39 host_impl_->InitializeRenderer(
38 FakeOutputSurface::Create3d().PassAs<OutputSurface>()); 40 FakeOutputSurface::Create3d().PassAs<OutputSurface>());
39 41
40 scoped_ptr<LayerImpl> root_layer = LayerImpl::Create(active_tree(), 1); 42 scoped_ptr<LayerImpl> root_layer = LayerImpl::Create(active_tree(), 1);
41 active_tree()->SetRootLayer(root_layer.Pass()); 43 active_tree()->SetRootLayer(root_layer.Pass());
42 } 44 }
(...skipping 10 matching lines...) Expand all
53 1000 * timer_.MsPerLap(), 55 1000 * timer_.MsPerLap(),
54 "us", 56 "us",
55 true); 57 true);
56 } 58 }
57 59
58 protected: 60 protected:
59 LapTimer timer_; 61 LapTimer timer_;
60 std::string test_name_; 62 std::string test_name_;
61 FakeLayerTreeHostImplClient client_; 63 FakeLayerTreeHostImplClient client_;
62 FakeProxy proxy_; 64 FakeProxy proxy_;
65 DebugScopedSetImplThread impl_;
63 FakeRenderingStatsInstrumentation stats_; 66 FakeRenderingStatsInstrumentation stats_;
64 scoped_ptr<LayerTreeHostImpl> host_impl_; 67 scoped_ptr<LayerTreeHostImpl> host_impl_;
65 }; 68 };
66 69
67 // Simulates a page with several large, transformed and animated layers.
68 TEST_F(OcclusionTrackerPerfTest, UnoccludedContentRect_FullyOccluded) { 70 TEST_F(OcclusionTrackerPerfTest, UnoccludedContentRect_FullyOccluded) {
69 SetTestName("unoccluded_content_rect_fully_occluded"); 71 SetTestName("unoccluded_content_rect_fully_occluded");
70 72
71 gfx::Rect viewport_rect(768, 1038); 73 gfx::Rect viewport_rect(768, 1038);
72 OcclusionTrackerBase<LayerImpl, LayerImpl::RenderSurfaceType> tracker( 74 OcclusionTrackerBase<LayerImpl, LayerImpl::RenderSurfaceType> tracker(
73 viewport_rect, false); 75 viewport_rect, false);
74 76
75 CreateHost(); 77 CreateHost();
76 host_impl_->SetViewportSize(viewport_rect.size()); 78 host_impl_->SetViewportSize(viewport_rect.size());
77 79
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 ++begin; 128 ++begin;
127 LayerIteratorPosition<LayerImpl> next = begin; 129 LayerIteratorPosition<LayerImpl> next = begin;
128 EXPECT_EQ(active_tree()->root_layer(), next.current_layer); 130 EXPECT_EQ(active_tree()->root_layer(), next.current_layer);
129 131
130 ++begin; 132 ++begin;
131 EXPECT_EQ(end, begin); 133 EXPECT_EQ(end, begin);
132 134
133 PrintResults(); 135 PrintResults();
134 } 136 }
135 137
138 TEST_F(OcclusionTrackerPerfTest, UnoccludedContentRect_10OpaqueLayers) {
139 static const int kNumOpaqueLayers = 10;
140 SetTestName("unoccluded_content_rect_10_opaque_layers");
141
142 gfx::Rect viewport_rect(768, 1038);
143 OcclusionTrackerBase<LayerImpl, LayerImpl::RenderSurfaceType> tracker(
144 viewport_rect, false);
145
146 CreateHost();
147 host_impl_->SetViewportSize(viewport_rect.size());
148
149 for (int i = 0; i < kNumOpaqueLayers; ++i) {
150 scoped_ptr<SolidColorLayerImpl> opaque_layer =
151 SolidColorLayerImpl::Create(active_tree(), 2 + i);
152 opaque_layer->SetBackgroundColor(SK_ColorRED);
153 opaque_layer->SetContentsOpaque(true);
154 opaque_layer->SetDrawsContent(true);
155 opaque_layer->SetBounds(
156 gfx::Size(viewport_rect.width() / 2, viewport_rect.height() / 2));
157 opaque_layer->SetContentBounds(
158 gfx::Size(viewport_rect.width() / 2, viewport_rect.height() / 2));
159 opaque_layer->SetPosition(gfx::Point(i, i));
160 active_tree()->root_layer()->AddChild(opaque_layer.PassAs<LayerImpl>());
161 }
162
163 active_tree()->UpdateDrawProperties();
164 const LayerImplList& rsll = active_tree()->RenderSurfaceLayerList();
165 ASSERT_EQ(1u, rsll.size());
166 EXPECT_EQ(static_cast<size_t>(kNumOpaqueLayers),
167 rsll[0]->render_surface()->layer_list().size());
168
169 LayerIterator<LayerImpl> begin = LayerIterator<LayerImpl>::Begin(&rsll);
170 LayerIterator<LayerImpl> end = LayerIterator<LayerImpl>::End(&rsll);
171
172 // The opaque_layers add occlusion.
173 for (int i = 0; i < kNumOpaqueLayers - 1; ++i) {
174 LayerIteratorPosition<LayerImpl> pos = begin;
175 tracker.EnterLayer(pos);
176 tracker.LeaveLayer(pos);
177 ++begin;
178 }
179 LayerIteratorPosition<LayerImpl> pos = begin;
180 tracker.EnterLayer(pos);
181 tracker.LeaveLayer(pos);
182
183 gfx::Transform transform_to_target;
184 transform_to_target.Translate(0, 96);
185 bool impl_draw_transform_is_unknown = false;
186
187 do {
188 for (int x = 0; x < viewport_rect.width(); x += 256) {
189 for (int y = 0; y < viewport_rect.height(); y += 256) {
190 gfx::Rect query_content_rect(x, y, 256, 256);
191 gfx::Rect unoccluded =
192 tracker.UnoccludedContentRect(pos.target_render_surface_layer,
193 query_content_rect,
194 transform_to_target,
195 impl_draw_transform_is_unknown);
196 }
197 }
198
199 timer_.NextLap();
200 } while (!timer_.HasTimeLimitExpired());
201
202 ++begin;
203 LayerIteratorPosition<LayerImpl> next = begin;
204 EXPECT_EQ(active_tree()->root_layer(), next.current_layer);
205
206 ++begin;
207 EXPECT_EQ(end, begin);
208
209 PrintResults();
210 }
211
136 } // namespace 212 } // namespace
137 } // namespace cc 213 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698