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

Side by Side Diff: chrome/test/perf/rendering/latency_tests.cc

Issue 10829015: Add compositor thread mode to latency tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/test/data/perf/latency_suite.html ('k') | 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 (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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/test/data/perf/latency_suite.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698