OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 using trace_analyzer::FindClosest; | 73 using trace_analyzer::FindClosest; |
74 using trace_analyzer::FindLastOf; | 74 using trace_analyzer::FindLastOf; |
75 using trace_analyzer::RateStats; | 75 using trace_analyzer::RateStats; |
76 using trace_analyzer::Query; | 76 using trace_analyzer::Query; |
77 using trace_analyzer::TraceAnalyzer; | 77 using trace_analyzer::TraceAnalyzer; |
78 using trace_analyzer::TraceEvent; | 78 using trace_analyzer::TraceEvent; |
79 using trace_analyzer::TraceEventVector; | 79 using trace_analyzer::TraceEventVector; |
80 | 80 |
81 enum LatencyTestMode { | 81 enum LatencyTestMode { |
82 kWebGL, | 82 kWebGL, |
| 83 kWebGLThread, |
83 kSoftware | 84 kSoftware |
84 }; | 85 }; |
85 | 86 |
86 enum LatencyTestFlags { | 87 enum LatencyTestFlags { |
87 kInputHeavy = 1 << 0, | 88 kInputHeavy = 1 << 0, |
88 kInputDirty = 1 << 1, | 89 kInputDirty = 1 << 1, |
89 kRafHeavy = 1 << 2, | 90 kRafHeavy = 1 << 2, |
90 kPaintHeavy = 1 << 3 | 91 kPaintHeavy = 1 << 3 |
91 }; | 92 }; |
92 | 93 |
93 const int kWebGLCanvasWidth = 10; | 94 const int kWebGLCanvasWidth = 10; |
94 const int kNumFrames = 80; | 95 const int kNumFrames = 80; |
95 const int kInputsPerFrame = 16; | 96 const int kInputsPerFrame = 16; |
96 // Magic number to identify certain glClear events. | 97 // Magic number to identify certain glClear events. |
97 const int kClearColorGreen = 137; | 98 const int kClearColorGreen = 137; |
98 const int kMouseY = 5; | 99 const int kMouseY = 5; |
99 | 100 |
100 // Don't analyze begin frames that may be inaccurate. Latencies can be as high | 101 // Don't analyze begin frames that may be inaccurate. Latencies can be as high |
101 // as 5 frames or so, so skip the first 6 frames to get more accurate results. | 102 // as 5 frames or so, so skip the first 6 frames to get more accurate results. |
102 const int kIgnoreBeginFrames = 6; | 103 const int kIgnoreBeginFrames = 6; |
103 // Don't analyze end frames that may be inaccurate. | 104 // Don't analyze end frames that may be inaccurate. |
104 const int kIgnoreEndFrames = 4; | 105 const int kIgnoreEndFrames = 4; |
105 // Minimum frames to produce an answer. | 106 // Minimum frames to produce an answer. |
106 const int kMinimumFramesForAnalysis = 5; | 107 const int kMinimumFramesForAnalysis = 5; |
107 | 108 |
108 class LatencyTest | 109 class LatencyTest |
109 : public BrowserPerfTest, | 110 : public BrowserPerfTest, |
110 public ::testing::WithParamInterface<int> { | 111 public ::testing::WithParamInterface<int> { |
111 public: | 112 public: |
112 LatencyTest() : | 113 explicit LatencyTest(LatencyTestMode mode) : |
113 query_instant_(Query::EventPhase() == | 114 query_instant_(Query::EventPhase() == |
114 Query::Phase(TRACE_EVENT_PHASE_INSTANT)), | 115 Query::Phase(TRACE_EVENT_PHASE_INSTANT)), |
115 // These queries are initialized in RunTest. | 116 // These queries are initialized in RunTest. |
116 query_begin_swaps_(Query::Bool(false)), | 117 query_begin_swaps_(Query::Bool(false)), |
117 query_end_swaps_(Query::Bool(false)), | 118 query_end_swaps_(Query::Bool(false)), |
118 query_inputs_(Query::Bool(false)), | 119 query_inputs_(Query::Bool(false)), |
119 query_blits_(Query::Bool(false)), | 120 query_blits_(Query::Bool(false)), |
120 query_clears_(Query::Bool(false)), | 121 query_clears_(Query::Bool(false)), |
121 mouse_x_(0), | 122 mouse_x_(0), |
122 tab_width_(0), | 123 tab_width_(0), |
123 mode_(kWebGL), | 124 mode_(mode), |
124 delay_time_us_(0), | 125 delay_time_us_(0), |
125 num_frames_(0), | 126 num_frames_(0), |
126 verbose_(false), | 127 verbose_(false), |
127 test_flags_(0) {} | 128 test_flags_(0), |
| 129 use_gpu_(mode == kWebGL || mode == kWebGLThread) {} |
128 | 130 |
129 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; | 131 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; |
130 | 132 |
131 std::vector<int> GetAllBehaviors(); | 133 std::vector<int> GetAllBehaviors(); |
132 | 134 |
133 // Run test with specified |mode| and |behaviors|. | 135 // Run test with specified |behaviors|. |
134 // |mode| can be webgl or software. | |
135 // |behaviors| is a list of combinations of LatencyTestFlags. | 136 // |behaviors| is a list of combinations of LatencyTestFlags. |
136 void RunTest(LatencyTestMode mode, const std::vector<int>& behaviors); | 137 void RunTest(const std::vector<int>& behaviors); |
137 | 138 |
138 private: | 139 private: |
139 void RunTestInternal(const std::string& test_url, | 140 void RunTestInternal(const std::string& test_url, |
140 bool send_inputs, | 141 bool send_inputs, |
141 int input_delay_us); | 142 int input_delay_us); |
142 | 143 |
143 double CalculateLatency(); | 144 double CalculateLatency(); |
144 | 145 |
145 std::string GetModeString() { | 146 std::string GetModeString() { |
146 switch (mode_) { | 147 switch (mode_) { |
147 case kWebGL: | 148 case kWebGL: |
148 return "webgl"; | 149 return "webgl"; |
| 150 case kWebGLThread: |
| 151 return "webgl_thread"; |
149 case kSoftware: | 152 case kSoftware: |
150 return "software"; | 153 return "software"; |
151 default: | 154 default: |
152 NOTREACHED() << "invalid mode"; | 155 NOTREACHED() << "invalid mode"; |
153 return ""; | 156 return ""; |
154 } | 157 } |
155 } | 158 } |
156 | 159 |
157 std::string GetTraceName(int flags); | 160 std::string GetTraceName(int flags); |
158 | 161 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 int num_frames_; | 216 int num_frames_; |
214 | 217 |
215 // Map from test flags combination to the calculated mean latency. | 218 // Map from test flags combination to the calculated mean latency. |
216 std::map<int, double> latencies_; | 219 std::map<int, double> latencies_; |
217 | 220 |
218 // Whether to print more verbose output. | 221 // Whether to print more verbose output. |
219 bool verbose_; | 222 bool verbose_; |
220 | 223 |
221 // Current test flags combination, determining the behavior of the test. | 224 // Current test flags combination, determining the behavior of the test. |
222 int test_flags_; | 225 int test_flags_; |
| 226 |
| 227 bool use_gpu_; |
223 }; | 228 }; |
224 | 229 |
225 void LatencyTest::SetUpCommandLine(CommandLine* command_line) { | 230 void LatencyTest::SetUpCommandLine(CommandLine* command_line) { |
226 BrowserPerfTest::SetUpCommandLine(command_line); | 231 BrowserPerfTest::SetUpCommandLine(command_line); |
227 if (CommandLine::ForCurrentProcess()-> | 232 if (mode_ == kWebGLThread) { |
228 HasSwitch(switches::kEnableThreadedCompositing)) { | 233 ASSERT_TRUE(use_gpu_); |
229 command_line->AppendSwitch(switches::kEnableThreadedCompositing); | 234 command_line->AppendSwitch(switches::kEnableThreadedCompositing); |
| 235 } else { |
| 236 command_line->AppendSwitch(switches::kDisableThreadedCompositing); |
230 } | 237 } |
| 238 if (!use_gpu_) |
| 239 command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); |
231 command_line->AppendSwitch(switches::kDisableBackgroundNetworking); | 240 command_line->AppendSwitch(switches::kDisableBackgroundNetworking); |
232 } | 241 } |
233 | 242 |
234 std::vector<int> LatencyTest::GetAllBehaviors() { | 243 std::vector<int> LatencyTest::GetAllBehaviors() { |
235 std::vector<int> behaviors; | 244 std::vector<int> behaviors; |
236 int max_behaviors = kInputHeavy | kInputDirty | kRafHeavy | kPaintHeavy; | 245 int max_behaviors = kInputHeavy | kInputDirty | kRafHeavy | kPaintHeavy; |
237 for (int i = 0; i <= max_behaviors; ++i) | 246 for (int i = 0; i <= max_behaviors; ++i) |
238 behaviors.push_back(i); | 247 behaviors.push_back(i); |
239 return behaviors; | 248 return behaviors; |
240 } | 249 } |
241 | 250 |
242 void LatencyTest::RunTest(LatencyTestMode mode, | 251 void LatencyTest::RunTest(const std::vector<int>& behaviors) { |
243 const std::vector<int>& behaviors) { | |
244 mode_ = mode; | |
245 verbose_ = (logging::GetVlogLevel("latency_tests") > 0); | 252 verbose_ = (logging::GetVlogLevel("latency_tests") > 0); |
246 | 253 |
247 // Linux Intel uses mesa driver, where multisampling is not supported. | 254 // Linux Intel uses mesa driver, where multisampling is not supported. |
248 // Multisampling is also not supported on virtualized mac os. | 255 // Multisampling is also not supported on virtualized mac os. |
249 // The latency test uses the multisampling blit trace event to determine when | 256 // The latency test uses the multisampling blit trace event to determine when |
250 // the compositor is consuming the webgl context, so it currently doesn't work | 257 // the compositor is consuming the webgl context, so it currently doesn't work |
251 // without multisampling. Since the Latency test does not depend much on the | 258 // without multisampling. Since the Latency test does not depend much on the |
252 // GPU, let's just skip testing on Intel since the data is redundant with | 259 // GPU, let's just skip testing on Intel since the data is redundant with |
253 // other non-Intel bots. | 260 // other non-Intel bots. |
254 GPUTestBotConfig test_bot; | 261 GPUTestBotConfig test_bot; |
255 test_bot.LoadCurrentConfig(NULL); | 262 test_bot.LoadCurrentConfig(NULL); |
256 const std::vector<uint32>& gpu_vendor = test_bot.gpu_vendor(); | 263 const std::vector<uint32>& gpu_vendor = test_bot.gpu_vendor(); |
257 #if defined(OS_LINUX) | 264 #if defined(OS_LINUX) |
258 if (gpu_vendor.size() == 1 && gpu_vendor[0] == 0x8086) | 265 if (gpu_vendor.size() == 1 && gpu_vendor[0] == 0x8086) |
259 return; | 266 return; |
260 #endif // defined(OS_LINUX) | 267 #endif // defined(OS_LINUX) |
261 #if defined(OS_MACOSX) | 268 #if defined(OS_MACOSX) |
262 if (gpu_vendor.size() == 1 && gpu_vendor[0] == 0x15AD) | 269 if (gpu_vendor.size() == 1 && gpu_vendor[0] == 0x15AD) |
263 return; | 270 return; |
264 #endif // defined(OS_MACOSX) | 271 #endif // defined(OS_MACOSX) |
265 | 272 |
266 #if defined(OS_WIN) | 273 #if defined(OS_WIN) |
267 // Latency test doesn't work on WinXP. crbug.com/128066 | 274 // Latency test doesn't work on WinXP. crbug.com/128066 |
268 if (base::win::OSInfo::GetInstance()->version() == base::win::VERSION_XP) | 275 if (base::win::OSInfo::GetInstance()->version() == base::win::VERSION_XP) |
269 return; | 276 return; |
270 #endif | 277 #endif |
271 | 278 |
272 // Construct queries for searching trace events via TraceAnalyzer. | 279 // Construct queries for searching trace events via TraceAnalyzer. |
273 if (mode_ == kWebGL) { | 280 if (use_gpu_) { |
274 query_begin_swaps_ = query_instant_ && | 281 query_begin_swaps_ = query_instant_ && |
275 Query::EventName() == Query::String("SwapBuffersLatency") && | 282 Query::EventName() == Query::String("SwapBuffersLatency") && |
276 Query::EventArg("width") != Query::Int(kWebGLCanvasWidth); | 283 Query::EventArg("width") != Query::Int(kWebGLCanvasWidth); |
277 query_end_swaps_ = query_instant_ && | 284 query_end_swaps_ = query_instant_ && |
278 Query::EventName() == Query::String("CompositorSwapBuffersComplete"); | 285 Query::EventName() == Query::String("CompositorSwapBuffersComplete"); |
279 } else if (mode_ == kSoftware) { | 286 } else if (mode_ == kSoftware) { |
280 // Software updates need to have x=0 and y=0 to contain the input color. | 287 // Software updates need to have x=0 and y=0 to contain the input color. |
281 query_begin_swaps_ = query_instant_ && | 288 query_begin_swaps_ = query_instant_ && |
282 Query::EventName() == Query::String("UpdateRect") && | 289 Query::EventName() == Query::String("UpdateRect") && |
283 Query::EventArg("x+y") == Query::Int(0); | 290 Query::EventArg("x+y") == Query::Int(0); |
284 query_end_swaps_ = query_instant_ && | 291 query_end_swaps_ = query_instant_ && |
285 Query::EventName() == Query::String("UpdateRectComplete") && | 292 Query::EventName() == Query::String("UpdateRectComplete") && |
286 Query::EventArg("x+y") == Query::Int(0); | 293 Query::EventArg("x+y") == Query::Int(0); |
287 } | 294 } |
288 query_inputs_ = query_instant_ && | 295 query_inputs_ = query_instant_ && |
289 Query::EventName() == Query::String("MouseEventBegin"); | 296 Query::EventName() == Query::String("MouseEventBegin"); |
290 query_blits_ = query_instant_ && | 297 query_blits_ = query_instant_ && |
291 Query::EventName() == Query::String("DoBlit") && | 298 Query::EventName() == Query::String("DoBlit") && |
292 Query::EventArg("width") == Query::Int(kWebGLCanvasWidth); | 299 Query::EventArg("width") == Query::Int(kWebGLCanvasWidth); |
293 query_clears_ = query_instant_ && | 300 query_clears_ = query_instant_ && |
294 Query::EventName() == Query::String("DoClear") && | 301 Query::EventName() == Query::String("DoClear") && |
295 Query::EventArg("green") == Query::Int(kClearColorGreen); | 302 Query::EventArg("green") == Query::Int(kClearColorGreen); |
296 Query query_width_swaps = query_begin_swaps_; | 303 Query query_width_swaps = Query::Bool(false); |
297 if (mode_ == kSoftware) { | 304 if (use_gpu_) { |
| 305 query_width_swaps = query_begin_swaps_; |
| 306 } else if (mode_ == kSoftware) { |
298 query_width_swaps = query_instant_ && | 307 query_width_swaps = query_instant_ && |
299 Query::EventName() == Query::String("UpdateRectWidth") && | 308 Query::EventName() == Query::String("UpdateRectWidth") && |
300 Query::EventArg("width") > Query::Int(kWebGLCanvasWidth); | 309 Query::EventArg("width") > Query::Int(kWebGLCanvasWidth); |
301 } | 310 } |
302 | 311 |
303 // Set path to test html. | 312 // Set path to test html. |
304 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path_)); | 313 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path_)); |
305 test_path_ = test_path_.Append(FILE_PATH_LITERAL("perf")); | 314 test_path_ = test_path_.Append(FILE_PATH_LITERAL("perf")); |
306 test_path_ = test_path_.Append(FILE_PATH_LITERAL("latency_suite.html")); | 315 test_path_ = test_path_.Append(FILE_PATH_LITERAL("latency_suite.html")); |
307 ASSERT_TRUE(file_util::PathExists(test_path_)) | 316 ASSERT_TRUE(file_util::PathExists(test_path_)) |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 std::string json_events; | 424 std::string json_events; |
416 ASSERT_TRUE(tracing::EndTracing(&json_events)); | 425 ASSERT_TRUE(tracing::EndTracing(&json_events)); |
417 | 426 |
418 analyzer_.reset(TraceAnalyzer::Create(json_events)); | 427 analyzer_.reset(TraceAnalyzer::Create(json_events)); |
419 analyzer_->AssociateBeginEndEvents(); | 428 analyzer_->AssociateBeginEndEvents(); |
420 analyzer_->MergeAssociatedEventArgs(); | 429 analyzer_->MergeAssociatedEventArgs(); |
421 } | 430 } |
422 | 431 |
423 double LatencyTest::CalculateLatency() { | 432 double LatencyTest::CalculateLatency() { |
424 TraceEventVector events; | 433 TraceEventVector events; |
425 if (mode_ == kWebGL) { | 434 if (use_gpu_) { |
426 // Search for three types of events in WebGL mode: | 435 // Search for three types of events in WebGL mode: |
427 // - onscreen swaps. | 436 // - onscreen swaps. |
428 // - DoClear calls that contain the mouse x coordinate. | 437 // - DoClear calls that contain the mouse x coordinate. |
429 // - mouse events. | 438 // - mouse events. |
430 analyzer_->FindEvents(query_begin_swaps_ || query_end_swaps_ || | 439 analyzer_->FindEvents(query_begin_swaps_ || query_end_swaps_ || |
431 query_inputs_ || query_blits_ || query_clears_, | 440 query_inputs_ || query_blits_ || query_clears_, |
432 &events); | 441 &events); |
433 } else if (mode_ == kSoftware) { | 442 } else if (mode_ == kSoftware) { |
434 analyzer_->FindEvents(query_begin_swaps_ || query_end_swaps_ || | 443 analyzer_->FindEvents(query_begin_swaps_ || query_end_swaps_ || |
435 query_inputs_, &events); | 444 query_inputs_, &events); |
(...skipping 17 matching lines...) Expand all Loading... |
453 ++swap_count; | 462 ++swap_count; |
454 // Don't analyze first few swaps, because they are filling the rendering | 463 // Don't analyze first few swaps, because they are filling the rendering |
455 // pipeline and may be unstable. | 464 // pipeline and may be unstable. |
456 if (swap_count > kIgnoreBeginFrames) { | 465 if (swap_count > kIgnoreBeginFrames) { |
457 // First, find the beginning of this swap. | 466 // First, find the beginning of this swap. |
458 size_t begin_swap_pos = 0; | 467 size_t begin_swap_pos = 0; |
459 EXPECT_TRUE(FindLastOf(events, query_begin_swaps_, end_swap_pos, | 468 EXPECT_TRUE(FindLastOf(events, query_begin_swaps_, end_swap_pos, |
460 &begin_swap_pos)); | 469 &begin_swap_pos)); |
461 | 470 |
462 int mouse_x = 0; | 471 int mouse_x = 0; |
463 if (mode_ == kWebGL) { | 472 if (use_gpu_) { |
464 // Trace backwards through the events to find the input event that | 473 // Trace backwards through the events to find the input event that |
465 // matches the glClear that was presented by this SwapBuffers. | 474 // matches the glClear that was presented by this SwapBuffers. |
466 | 475 |
467 // Step 1: Find the last blit (which will be the WebGL blit). | 476 // Step 1: Find the last blit (which will be the WebGL blit). |
468 size_t blit_pos = 0; | 477 size_t blit_pos = 0; |
469 EXPECT_TRUE(FindLastOf(events, query_blits_, begin_swap_pos, | 478 EXPECT_TRUE(FindLastOf(events, query_blits_, begin_swap_pos, |
470 &blit_pos)); | 479 &blit_pos)); |
471 // Skip this SwapBuffers if the blit has already been consumed by a | 480 // Skip this SwapBuffers if the blit has already been consumed by a |
472 // previous SwapBuffers. This means the current frame did not receive | 481 // previous SwapBuffers. This means the current frame did not receive |
473 // an update from WebGL. | 482 // an update from WebGL. |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 printf("|\nframe %03d: ", swap_count + 1); | 641 printf("|\nframe %03d: ", swap_count + 1); |
633 } else if (is_software && events[i]->name == "UpdateRect") { | 642 } else if (is_software && events[i]->name == "UpdateRect") { |
634 ++swap_count; | 643 ++swap_count; |
635 printf("(%d)|\nframe %03d: ", | 644 printf("(%d)|\nframe %03d: ", |
636 events[i]->GetKnownArgAsInt("color"), swap_count + 1); | 645 events[i]->GetKnownArgAsInt("color"), swap_count + 1); |
637 } | 646 } |
638 } | 647 } |
639 printf("\n"); | 648 printf("\n"); |
640 } | 649 } |
641 | 650 |
| 651 // For running tests on GPU: |
| 652 class LatencyTestWebGL : public LatencyTest { |
| 653 public: |
| 654 LatencyTestWebGL() : LatencyTest(kWebGL) {} |
| 655 }; |
| 656 |
| 657 // For running tests on GPU with the compositor thread: |
| 658 class LatencyTestWebGLThread : public LatencyTest { |
| 659 public: |
| 660 LatencyTestWebGLThread() : LatencyTest(kWebGLThread) {} |
| 661 }; |
| 662 |
| 663 // For running tests on Software: |
| 664 class LatencyTestSW : public LatencyTest { |
| 665 public: |
| 666 LatencyTestSW() : LatencyTest(kSoftware) {} |
| 667 }; |
| 668 |
642 //////////////////////////////////////////////////////////////////////////////// | 669 //////////////////////////////////////////////////////////////////////////////// |
643 /// Tests | 670 /// Tests |
644 | 671 |
645 using ::testing::Values; | 672 using ::testing::Values; |
646 | 673 |
647 // For manual testing only, run all input latency tests and print summary. | 674 // For manual testing only, run all input latency tests and print summary. |
648 IN_PROC_BROWSER_TEST_F(LatencyTest, DISABLED_LatencyWebGLAll) { | 675 IN_PROC_BROWSER_TEST_F(LatencyTestWebGL, DISABLED_LatencyWebGLAll) { |
649 RunTest(kWebGL, GetAllBehaviors()); | 676 RunTest(GetAllBehaviors()); |
650 } | 677 } |
651 | 678 |
652 // For manual testing only, run all input latency tests and print summary. | 679 // For manual testing only, run all input latency tests and print summary. |
653 IN_PROC_BROWSER_TEST_F(LatencyTest, DISABLED_LatencySoftwareAll) { | 680 IN_PROC_BROWSER_TEST_F(LatencyTestWebGLThread, DISABLED_LatencyWebGLThreadAll) { |
654 RunTest(kSoftware, GetAllBehaviors()); | 681 RunTest(GetAllBehaviors()); |
655 } | 682 } |
656 | 683 |
657 IN_PROC_BROWSER_TEST_P(LatencyTest, LatencySoftware) { | 684 // For manual testing only, run all input latency tests and print summary. |
658 RunTest(kSoftware, std::vector<int>(1, GetParam())); | 685 IN_PROC_BROWSER_TEST_F(LatencyTestSW, DISABLED_LatencySoftwareAll) { |
| 686 RunTest(GetAllBehaviors()); |
659 } | 687 } |
660 | 688 |
661 IN_PROC_BROWSER_TEST_P(LatencyTest, LatencyWebGL) { | 689 IN_PROC_BROWSER_TEST_P(LatencyTestWebGL, LatencyWebGL) { |
662 RunTest(kWebGL, std::vector<int>(1, GetParam())); | 690 RunTest(std::vector<int>(1, GetParam())); |
663 } | 691 } |
664 | 692 |
665 INSTANTIATE_TEST_CASE_P(, LatencyTest, ::testing::Values( | 693 IN_PROC_BROWSER_TEST_P(LatencyTestWebGLThread, LatencyWebGLThread) { |
666 0, | 694 RunTest(std::vector<int>(1, GetParam())); |
667 kInputHeavy, | 695 } |
668 kInputHeavy | kInputDirty | kRafHeavy, | 696 |
669 kInputHeavy | kInputDirty | kRafHeavy | kPaintHeavy, | 697 IN_PROC_BROWSER_TEST_P(LatencyTestSW, LatencySoftware) { |
670 kInputDirty | kPaintHeavy, | 698 RunTest(std::vector<int>(1, GetParam())); |
671 kInputDirty | kRafHeavy | kPaintHeavy | 699 } |
672 )); | 700 |
| 701 #define LATENCY_SUITE_MODES() ::testing::Values( \ |
| 702 0, \ |
| 703 kInputHeavy, \ |
| 704 kInputHeavy | kInputDirty | kRafHeavy, \ |
| 705 kInputHeavy | kInputDirty | kRafHeavy | kPaintHeavy, \ |
| 706 kInputDirty | kPaintHeavy, \ |
| 707 kInputDirty | kRafHeavy | kPaintHeavy) |
| 708 |
| 709 INSTANTIATE_TEST_CASE_P(, LatencyTestWebGL, LATENCY_SUITE_MODES()); |
| 710 INSTANTIATE_TEST_CASE_P(, LatencyTestWebGLThread, LATENCY_SUITE_MODES()); |
| 711 INSTANTIATE_TEST_CASE_P(, LatencyTestSW, LATENCY_SUITE_MODES()); |
673 | 712 |
674 } // namespace | 713 } // namespace |
OLD | NEW |