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

Side by Side Diff: cc/ipc/cc_serialization_perftest.cc

Issue 2136593002: CompositorFrame: Implement ParamTraits versus StructTraits deserialization test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/serialization.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <utility> 5 #include <utility>
6 6
7 #include "base/test/launcher/unit_test_launcher.h" 7 #include "base/test/launcher/unit_test_launcher.h"
8 #include "base/test/test_suite.h" 8 #include "base/test/test_suite.h"
9 #include "cc/ipc/cc_param_traits.h" 9 #include "cc/ipc/cc_param_traits.h"
10 #include "cc/ipc/compositor_frame.mojom.h" 10 #include "cc/ipc/compositor_frame.mojom.h"
(...skipping 19 matching lines...) Expand all
30 30
31 namespace cc { 31 namespace cc {
32 namespace { 32 namespace {
33 33
34 static const int kTimeLimitMillis = 2000; 34 static const int kTimeLimitMillis = 2000;
35 static const int kNumWarmupRuns = 20; 35 static const int kNumWarmupRuns = 20;
36 static const int kTimeCheckInterval = 10; 36 static const int kTimeCheckInterval = 10;
37 37
38 class CCSerializationPerfTest : public testing::Test { 38 class CCSerializationPerfTest : public testing::Test {
39 protected: 39 protected:
40 static void RunTestParamTraits(const std::string& test_name, 40 static bool ReadMessage(const IPC::Message* msg, CompositorFrame* frame) {
41 const CompositorFrame& frame) { 41 base::PickleIterator iter(*msg);
42 return IPC::ParamTraits<CompositorFrame>::Read(msg, &iter, frame);
43 }
44
45 static void RunDeserializationTestParamTraits(const std::string& test_name,
46 const CompositorFrame& frame) {
47 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
48 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
49 for (int i = 0; i < kNumWarmupRuns; ++i) {
50 CompositorFrame compositor_frame;
51 ReadMessage(&msg, &compositor_frame);
52 }
53
54 base::TimeTicks start = base::TimeTicks::Now();
55 base::TimeTicks end =
56 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis);
57 base::TimeDelta min_time;
58 size_t count = 0;
59 while (start < end) {
60 for (int i = 0; i < kTimeCheckInterval; ++i) {
61 ++count;
62 CompositorFrame compositor_frame;
63 ReadMessage(&msg, &compositor_frame);
64 }
65
66 base::TimeTicks now = base::TimeTicks::Now();
67 if (now - start < min_time || min_time.is_zero())
68 min_time = now - start;
69 start = base::TimeTicks::Now();
70 }
71
72 perf_test::PrintResult(
73 "ParamTraits deserialization: min_frame_deserialization_time", "",
74 test_name, min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us",
75 true);
76 perf_test::PrintResult("ParamTraits deserialization: num runs in 2 seconds",
77 "", test_name, count, "", true);
78 }
79
80 static void RunSerializationTestParamTraits(const std::string& test_name,
81 const CompositorFrame& frame) {
42 for (int i = 0; i < kNumWarmupRuns; ++i) { 82 for (int i = 0; i < kNumWarmupRuns; ++i) {
43 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); 83 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
44 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame); 84 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
45 } 85 }
46 86
47 base::TimeTicks start = base::TimeTicks::Now(); 87 base::TimeTicks start = base::TimeTicks::Now();
48 base::TimeTicks end = 88 base::TimeTicks end =
49 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis); 89 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis);
50 base::TimeDelta min_time; 90 base::TimeDelta min_time;
51 size_t count = 0; 91 size_t count = 0;
52 while (start < end) { 92 while (start < end) {
53 for (int i = 0; i < kTimeCheckInterval; ++i) { 93 for (int i = 0; i < kTimeCheckInterval; ++i) {
54 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); 94 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
55 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame); 95 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
56 ++count; 96 ++count;
57 } 97 }
58 98
59 base::TimeTicks now = base::TimeTicks::Now(); 99 base::TimeTicks now = base::TimeTicks::Now();
60 if (now - start < min_time || min_time.is_zero()) 100 if (now - start < min_time || min_time.is_zero())
61 min_time = now - start; 101 min_time = now - start;
62 start = base::TimeTicks::Now(); 102 start = base::TimeTicks::Now();
63 } 103 }
64 104
65 perf_test::PrintResult( 105 perf_test::PrintResult(
66 "ParamTraits: min_frame_serialization_time", "", test_name, 106 "ParamTraits serialization: min_frame_serialization_time", "",
67 min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us", true); 107 test_name, min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us",
68 perf_test::PrintResult("ParamTraits: num runs in 2 seconds", "", test_name, 108 true);
69 count, "", true); 109 perf_test::PrintResult("ParamTraits serialization: num runs in 2 seconds",
110 "", test_name, count, "", true);
70 } 111 }
71 112
72 static void RunTestStructTraits(const std::string& test_name, 113 static void RunDeserializationTestStructTraits(const std::string& test_name,
73 const CompositorFrame& frame) { 114 const CompositorFrame& frame) {
115 mojo::Array<uint8_t> data = mojom::CompositorFrame::Serialize(&frame);
116 DCHECK_GT(data.size(), 0u);
117 for (int i = 0; i < kNumWarmupRuns; ++i) {
118 CompositorFrame compositor_frame;
119 mojom::CompositorFrame::Deserialize(data, &compositor_frame);
120 }
121
122 base::TimeTicks start = base::TimeTicks::Now();
123 base::TimeTicks end =
124 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis);
125 base::TimeDelta min_time;
126 size_t count = 0;
127 while (start < end) {
128 for (int i = 0; i < kTimeCheckInterval; ++i) {
129 CompositorFrame compositor_frame;
130 mojom::CompositorFrame::Deserialize(data, &compositor_frame);
131 ++count;
132 }
133
134 base::TimeTicks now = base::TimeTicks::Now();
135 if (now - start < min_time || min_time.is_zero())
136 min_time = now - start;
137 start = base::TimeTicks::Now();
138 }
139
140 perf_test::PrintResult(
141 "StructTraits deserialization min_frame_deserialization_time", "",
142 test_name, min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us",
143 true);
144 perf_test::PrintResult(
145 "StructTraits deserialization: num runs in 2 seconds", "", test_name,
146 count, "", true);
147 }
148
149 static void RunSerializationTestStructTraits(const std::string& test_name,
150 const CompositorFrame& frame) {
74 for (int i = 0; i < kNumWarmupRuns; ++i) { 151 for (int i = 0; i < kNumWarmupRuns; ++i) {
75 mojo::Array<uint8_t> data = mojom::CompositorFrame::Serialize(&frame); 152 mojo::Array<uint8_t> data = mojom::CompositorFrame::Serialize(&frame);
76 DCHECK_GT(data.size(), 0u); 153 DCHECK_GT(data.size(), 0u);
77 } 154 }
78 155
79 base::TimeTicks start = base::TimeTicks::Now(); 156 base::TimeTicks start = base::TimeTicks::Now();
80 base::TimeTicks end = 157 base::TimeTicks end =
81 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis); 158 start + base::TimeDelta::FromMilliseconds(kTimeLimitMillis);
82 base::TimeDelta min_time; 159 base::TimeDelta min_time;
83 size_t count = 0; 160 size_t count = 0;
84 while (start < end) { 161 while (start < end) {
85 for (int i = 0; i < kTimeCheckInterval; ++i) { 162 for (int i = 0; i < kTimeCheckInterval; ++i) {
86 mojo::Array<uint8_t> data = mojom::CompositorFrame::Serialize(&frame); 163 mojo::Array<uint8_t> data = mojom::CompositorFrame::Serialize(&frame);
87 DCHECK_GT(data.size(), 0u); 164 DCHECK_GT(data.size(), 0u);
88 ++count; 165 ++count;
89 } 166 }
90 167
91 base::TimeTicks now = base::TimeTicks::Now(); 168 base::TimeTicks now = base::TimeTicks::Now();
92 if (now - start < min_time || min_time.is_zero()) 169 if (now - start < min_time || min_time.is_zero())
93 min_time = now - start; 170 min_time = now - start;
94 start = base::TimeTicks::Now(); 171 start = base::TimeTicks::Now();
95 } 172 }
96 173
97 perf_test::PrintResult( 174 perf_test::PrintResult(
98 "StructTraits min_frame_serialization_time", "", test_name, 175 "StructTraits serialization min_frame_serialization_time", "",
99 min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us", true); 176 test_name, min_time.InMillisecondsF() / kTimeCheckInterval * 1000, "us",
100 perf_test::PrintResult("StructTraits: num runs in 2 seconds", "", test_name, 177 true);
101 count, "", true); 178 perf_test::PrintResult("StructTraits serialization: num runs in 2 seconds",
179 "", test_name, count, "", true);
102 } 180 }
103 181
104 static void RunTest(const std::string& test_name, CompositorFrame frame) { 182 static void RunTest(const std::string& test_name, CompositorFrame frame) {
105 RunTestStructTraits(test_name, frame); 183 RunSerializationTestStructTraits(test_name, frame);
106 RunTestParamTraits(test_name, frame); 184 RunDeserializationTestStructTraits(test_name, frame);
185 RunSerializationTestParamTraits(test_name, frame);
186 RunDeserializationTestParamTraits(test_name, frame);
107 } 187 }
108 }; 188 };
109 189
110 TEST_F(CCSerializationPerfTest, DelegatedFrame_ManyQuads_1_4000) { 190 TEST_F(CCSerializationPerfTest, DelegatedFrame_ManyQuads_1_4000) {
111 CompositorFrame frame; 191 CompositorFrame frame;
112 192
113 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); 193 std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
114 render_pass->CreateAndAppendSharedQuadState(); 194 render_pass->CreateAndAppendSharedQuadState();
115 for (int i = 0; i < 4000; ++i) { 195 for (int i = 0; i < 4000; ++i) {
116 const gfx::Rect bounds(100, 100, 100, 100); 196 const gfx::Rect bounds(100, 100, 100, 100);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } 288 }
209 frame.delegated_frame_data->render_pass_list.push_back( 289 frame.delegated_frame_data->render_pass_list.push_back(
210 std::move(render_pass)); 290 std::move(render_pass));
211 } 291 }
212 292
213 RunTest("DelegatedFrame_ManyRenderPasses_10000_100", std::move(frame)); 293 RunTest("DelegatedFrame_ManyRenderPasses_10000_100", std::move(frame));
214 } 294 }
215 295
216 } // namespace 296 } // namespace
217 } // namespace cc 297 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698