OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <map> | 5 #include <map> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
11 #include "base/test/test_timeouts.h" | 11 #include "base/test/test_timeouts.h" |
| 12 #include "base/test/trace_event_analyzer.h" |
12 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
13 #include "chrome/common/chrome_paths.h" | 14 #include "chrome/common/chrome_paths.h" |
14 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
| 16 #include "chrome/test/automation/automation_proxy.h" |
15 #include "chrome/test/automation/tab_proxy.h" | 17 #include "chrome/test/automation/tab_proxy.h" |
16 #include "chrome/test/ui/javascript_test_util.h" | 18 #include "chrome/test/ui/javascript_test_util.h" |
17 #include "chrome/test/ui/ui_perf_test.h" | 19 #include "chrome/test/ui/ui_perf_test.h" |
18 #include "net/base/net_util.h" | 20 #include "net/base/net_util.h" |
| 21 #include "ui/gfx/gl/gl_implementation.h" |
19 #include "ui/gfx/gl/gl_switches.h" | 22 #include "ui/gfx/gl/gl_switches.h" |
20 | 23 |
21 namespace { | 24 namespace { |
22 | 25 |
23 enum FrameRateTestFlags { | 26 enum FrameRateTestFlags { |
24 kRequiresGpu = 1 << 0, // only execute test if --enable-gpu | 27 kUseGpu = 1 << 0, // Only execute test if --enable-gpu, and verify |
25 kDisableGpu = 1 << 1, // run test without gpu acceleration | 28 // that test ran on GPU. This is required for |
26 kMakeBodyComposited = 1 << 2, // force the test to use the compositor | 29 // tests that run on GPU. |
27 kDisableVsync = 1 << 3, // do not lock animation on vertical refresh | 30 kForceGpuComposited = 1 << 1, // Force the test to use the compositor. |
28 kUseReferenceBuild = 1 << 4, // run test using the reference chrome build | 31 kDisableVsync = 1 << 2, // Do not limit framerate to vertical refresh. |
29 kInternal = 1 << 5, // Test uses internal test data | 32 // when on GPU, nor to 60hz when not on GPU. |
30 kHasRedirect = 1 << 6, // Test page contains an HTML redirect | 33 kUseReferenceBuild = 1 << 3, // Run test using the reference chrome build. |
| 34 kInternal = 1 << 4, // Test uses internal test data. |
| 35 kHasRedirect = 1 << 5, // Test page contains an HTML redirect. |
31 }; | 36 }; |
32 | 37 |
33 std::string GetSuffixForTestFlags(int flags) { | |
34 std::string suffix; | |
35 if (flags & kMakeBodyComposited) | |
36 suffix += "_comp"; | |
37 if (flags & kDisableVsync) | |
38 suffix += "_novsync"; | |
39 if (flags & kDisableGpu) | |
40 suffix += "_nogpu"; | |
41 if (flags & kUseReferenceBuild) | |
42 suffix += "_ref"; | |
43 return suffix; | |
44 } | |
45 | |
46 class FrameRateTest | 38 class FrameRateTest |
47 : public UIPerfTest | 39 : public UIPerfTest |
48 , public ::testing::WithParamInterface<int> { | 40 , public ::testing::WithParamInterface<int> { |
49 public: | 41 public: |
50 FrameRateTest() { | 42 FrameRateTest() { |
51 show_window_ = true; | 43 show_window_ = true; |
52 dom_automation_enabled_ = true; | 44 dom_automation_enabled_ = true; |
53 } | 45 } |
54 | 46 |
| 47 bool HasFlag(FrameRateTestFlags flag) const { |
| 48 return (GetParam() & flag) == flag; |
| 49 } |
| 50 |
| 51 bool IsGpuAvailable() const { |
| 52 return CommandLine::ForCurrentProcess()->HasSwitch("enable-gpu"); |
| 53 } |
| 54 |
| 55 std::string GetSuffixForTestFlags() { |
| 56 std::string suffix; |
| 57 if (HasFlag(kForceGpuComposited)) |
| 58 suffix += "_comp"; |
| 59 if (HasFlag(kUseGpu)) |
| 60 suffix += "_gpu"; |
| 61 if (HasFlag(kDisableVsync)) |
| 62 suffix += "_novsync"; |
| 63 if (HasFlag(kUseReferenceBuild)) |
| 64 suffix += "_ref"; |
| 65 return suffix; |
| 66 } |
| 67 |
55 virtual FilePath GetDataPath(const std::string& name) { | 68 virtual FilePath GetDataPath(const std::string& name) { |
56 // Make sure the test data is checked out. | 69 // Make sure the test data is checked out. |
57 FilePath test_path; | 70 FilePath test_path; |
58 PathService::Get(chrome::DIR_TEST_DATA, &test_path); | 71 PathService::Get(chrome::DIR_TEST_DATA, &test_path); |
59 test_path = test_path.Append(FILE_PATH_LITERAL("perf")); | 72 test_path = test_path.Append(FILE_PATH_LITERAL("perf")); |
60 test_path = test_path.Append(FILE_PATH_LITERAL("frame_rate")); | 73 test_path = test_path.Append(FILE_PATH_LITERAL("frame_rate")); |
61 if (GetParam() & kInternal) { | 74 if (HasFlag(kInternal)) { |
62 test_path = test_path.Append(FILE_PATH_LITERAL("private")); | 75 test_path = test_path.Append(FILE_PATH_LITERAL("private")); |
63 } else { | 76 } else { |
64 test_path = test_path.Append(FILE_PATH_LITERAL("content")); | 77 test_path = test_path.Append(FILE_PATH_LITERAL("content")); |
65 } | 78 } |
66 test_path = test_path.AppendASCII(name); | 79 test_path = test_path.AppendASCII(name); |
67 return test_path; | 80 return test_path; |
68 } | 81 } |
69 | 82 |
70 virtual void SetUp() { | 83 virtual void SetUp() { |
71 if (GetParam() & kUseReferenceBuild) { | 84 if (HasFlag(kUseReferenceBuild)) |
72 UseReferenceBuild(); | 85 UseReferenceBuild(); |
73 } | |
74 | 86 |
75 // UI tests boot up render views starting from about:blank. This causes | 87 // UI tests boot up render views starting from about:blank. This causes |
76 // the renderer to start up thinking it cannot use the GPU. To work | 88 // the renderer to start up thinking it cannot use the GPU. To work |
77 // around that, and allow the frame rate test to use the GPU, we must | 89 // around that, and allow the frame rate test to use the GPU, we must |
78 // pass kAllowWebUICompositing. | 90 // pass kAllowWebUICompositing. |
79 launch_arguments_.AppendSwitch(switches::kAllowWebUICompositing); | 91 launch_arguments_.AppendSwitch(switches::kAllowWebUICompositing); |
80 | 92 |
81 // Some of the tests may launch http requests through JSON or AJAX | 93 // Some of the tests may launch http requests through JSON or AJAX |
82 // which causes a security error (cross domain request) when the page | 94 // which causes a security error (cross domain request) when the page |
83 // is loaded from the local file system ( file:// ). The following switch | 95 // is loaded from the local file system ( file:// ). The following switch |
84 // fixes that error. | 96 // fixes that error. |
85 launch_arguments_.AppendSwitch(switches::kAllowFileAccessFromFiles); | 97 launch_arguments_.AppendSwitch(switches::kAllowFileAccessFromFiles); |
86 | 98 |
87 if (GetParam() & kDisableGpu) { | 99 if (!HasFlag(kUseGpu)) { |
88 launch_arguments_.AppendSwitch(switches::kDisableAcceleratedCompositing); | 100 launch_arguments_.AppendSwitch(switches::kDisableAcceleratedCompositing); |
89 launch_arguments_.AppendSwitch(switches::kDisableExperimentalWebGL); | 101 launch_arguments_.AppendSwitch(switches::kDisableExperimentalWebGL); |
90 } else { | 102 } else { |
91 // This switch is required for enabling the accelerated 2d canvas on | 103 // This switch is required for enabling the accelerated 2d canvas on |
92 // Chrome versions prior to Chrome 15, which may be the case for the | 104 // Chrome versions prior to Chrome 15, which may be the case for the |
93 // reference build. | 105 // reference build. |
94 launch_arguments_.AppendSwitch(switches::kEnableAccelerated2dCanvas); | 106 launch_arguments_.AppendSwitch(switches::kEnableAccelerated2dCanvas); |
95 } | 107 } |
96 | 108 |
97 if (GetParam() & kDisableVsync) { | 109 if (HasFlag(kDisableVsync)) |
98 launch_arguments_.AppendSwitch(switches::kDisableGpuVsync); | 110 launch_arguments_.AppendSwitch(switches::kDisableGpuVsync); |
99 } | |
100 | 111 |
101 UIPerfTest::SetUp(); | 112 UIPerfTest::SetUp(); |
102 } | 113 } |
103 | 114 |
| 115 bool DidRunOnGpu(const std::string& json_events) { |
| 116 using namespace trace_analyzer; |
| 117 |
| 118 // Check trace for GPU accleration. |
| 119 scoped_ptr<TraceAnalyzer> analyzer(TraceAnalyzer::Create(json_events)); |
| 120 |
| 121 gfx::GLImplementation gl_impl = gfx::kGLImplementationNone; |
| 122 const TraceEvent* gpu_event = analyzer->FindOneEvent( |
| 123 Query(EVENT_NAME) == Query::String("GLES2DecoderImpl::Initialize") && |
| 124 Query(EVENT_HAS_NUMBER_ARG, "GLImpl")); |
| 125 if (gpu_event) |
| 126 gl_impl = static_cast<gfx::GLImplementation>( |
| 127 gpu_event->GetKnownArgAsInt("GLImpl")); |
| 128 return (gl_impl == gfx::kGLImplementationDesktopGL || |
| 129 gl_impl == gfx::kGLImplementationEGLGLES2); |
| 130 } |
| 131 |
104 void RunTest(const std::string& name) { | 132 void RunTest(const std::string& name) { |
105 if ((GetParam() & kRequiresGpu) && | 133 if (HasFlag(kUseGpu) && !IsGpuAvailable()) { |
106 !CommandLine::ForCurrentProcess()->HasSwitch("enable-gpu")) { | |
107 printf("Test skipped: requires gpu\n"); | 134 printf("Test skipped: requires gpu\n"); |
108 return; | 135 return; |
109 } | 136 } |
| 137 |
| 138 // Verify flag combinations. |
| 139 ASSERT_TRUE(HasFlag(kUseGpu) || !HasFlag(kForceGpuComposited)); |
| 140 ASSERT_TRUE(!HasFlag(kUseGpu) || IsGpuAvailable()); |
| 141 |
110 FilePath test_path = GetDataPath(name); | 142 FilePath test_path = GetDataPath(name); |
111 ASSERT_TRUE(file_util::DirectoryExists(test_path)) | 143 ASSERT_TRUE(file_util::DirectoryExists(test_path)) |
112 << "Missing test directory: " << test_path.value(); | 144 << "Missing test directory: " << test_path.value(); |
113 | 145 |
114 test_path = test_path.Append(FILE_PATH_LITERAL("test.html")); | 146 test_path = test_path.Append(FILE_PATH_LITERAL("test.html")); |
115 | 147 |
116 scoped_refptr<TabProxy> tab(GetActiveTab()); | 148 scoped_refptr<TabProxy> tab(GetActiveTab()); |
117 ASSERT_TRUE(tab.get()); | 149 ASSERT_TRUE(tab.get()); |
118 | 150 |
119 if (GetParam() & kHasRedirect) { | 151 // TODO(jbates): remove this check when ref builds are updated. |
| 152 if (!HasFlag(kUseReferenceBuild)) |
| 153 ASSERT_TRUE(automation()->BeginTracing("test_gpu")); |
| 154 |
| 155 if (HasFlag(kHasRedirect)) { |
120 // If the test file is known to contain an html redirect, we must block | 156 // If the test file is known to contain an html redirect, we must block |
121 // until the second navigation is complete and reacquire the active tab | 157 // until the second navigation is complete and reacquire the active tab |
122 // in order to avoid a race condition. | 158 // in order to avoid a race condition. |
123 // If the following assertion is triggered due to a timeout, it is | 159 // If the following assertion is triggered due to a timeout, it is |
124 // possible that the current test does not re-direct and therefore should | 160 // possible that the current test does not re-direct and therefore should |
125 // not have the kHasRedirect flag turned on. | 161 // not have the kHasRedirect flag turned on. |
126 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, | 162 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
127 tab->NavigateToURLBlockUntilNavigationsComplete( | 163 tab->NavigateToURLBlockUntilNavigationsComplete( |
128 net::FilePathToFileURL(test_path), 2)); | 164 net::FilePathToFileURL(test_path), 2)); |
129 tab = GetActiveTab(); | 165 tab = GetActiveTab(); |
130 ASSERT_TRUE(tab.get()); | 166 ASSERT_TRUE(tab.get()); |
131 } else { | 167 } else { |
132 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, | 168 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
133 tab->NavigateToURL(net::FilePathToFileURL(test_path))); | 169 tab->NavigateToURL(net::FilePathToFileURL(test_path))); |
134 } | 170 } |
135 | 171 |
136 // Block until initialization completes | 172 // Block until initialization completes |
137 // If the following assertion fails intermittently, it could be due to a | 173 // If the following assertion fails intermittently, it could be due to a |
138 // race condition caused by an html redirect. If that is the case, verify | 174 // race condition caused by an html redirect. If that is the case, verify |
139 // that flag kHasRedirect is enabled for the current test. | 175 // that flag kHasRedirect is enabled for the current test. |
140 ASSERT_TRUE(WaitUntilJavaScriptCondition( | 176 ASSERT_TRUE(WaitUntilJavaScriptCondition( |
141 tab, L"", L"window.domAutomationController.send(__initialized);", | 177 tab, L"", L"window.domAutomationController.send(__initialized);", |
142 TestTimeouts::large_test_timeout_ms())); | 178 TestTimeouts::large_test_timeout_ms())); |
143 | 179 |
144 if (GetParam() & kMakeBodyComposited) { | 180 if (HasFlag(kForceGpuComposited)) { |
145 ASSERT_TRUE(tab->NavigateToURLAsync( | 181 ASSERT_TRUE(tab->NavigateToURLAsync( |
146 GURL("javascript:__make_body_composited();"))); | 182 GURL("javascript:__make_body_composited();"))); |
147 } | 183 } |
148 | 184 |
149 // Start the tests. | 185 // Start the tests. |
150 ASSERT_TRUE(tab->NavigateToURLAsync(GURL("javascript:__start_all();"))); | 186 ASSERT_TRUE(tab->NavigateToURLAsync(GURL("javascript:__start_all();"))); |
151 | 187 |
152 // Block until the tests completes. | 188 // Block until the tests completes. |
153 ASSERT_TRUE(WaitUntilJavaScriptCondition( | 189 ASSERT_TRUE(WaitUntilJavaScriptCondition( |
154 tab, L"", L"window.domAutomationController.send(!__running_all);", | 190 tab, L"", L"window.domAutomationController.send(!__running_all);", |
155 TestTimeouts::large_test_timeout_ms())); | 191 TestTimeouts::large_test_timeout_ms())); |
156 | 192 |
| 193 // TODO(jbates): remove this check when ref builds are updated. |
| 194 if (!HasFlag(kUseReferenceBuild)) { |
| 195 std::string json_events; |
| 196 ASSERT_TRUE(automation()->EndTracing(&json_events)); |
| 197 |
| 198 bool did_run_on_gpu = DidRunOnGpu(json_events); |
| 199 bool expect_gpu = HasFlag(kUseGpu); |
| 200 EXPECT_EQ(expect_gpu, did_run_on_gpu); |
| 201 } |
| 202 |
157 // Read out the results. | 203 // Read out the results. |
158 std::wstring json; | 204 std::wstring json; |
159 ASSERT_TRUE(tab->ExecuteAndExtractString( | 205 ASSERT_TRUE(tab->ExecuteAndExtractString( |
160 L"", | 206 L"", |
161 L"window.domAutomationController.send(" | 207 L"window.domAutomationController.send(" |
162 L"JSON.stringify(__calc_results_total()));", | 208 L"JSON.stringify(__calc_results_total()));", |
163 &json)); | 209 &json)); |
164 | 210 |
165 std::map<std::string, std::string> results; | 211 std::map<std::string, std::string> results; |
166 ASSERT_TRUE(JsonDictionaryToMap(WideToUTF8(json), &results)); | 212 ASSERT_TRUE(JsonDictionaryToMap(WideToUTF8(json), &results)); |
167 | 213 |
168 ASSERT_TRUE(results.find("mean") != results.end()); | 214 ASSERT_TRUE(results.find("mean") != results.end()); |
169 ASSERT_TRUE(results.find("sigma") != results.end()); | 215 ASSERT_TRUE(results.find("sigma") != results.end()); |
170 ASSERT_TRUE(results.find("gestures") != results.end()); | 216 ASSERT_TRUE(results.find("gestures") != results.end()); |
171 ASSERT_TRUE(results.find("means") != results.end()); | 217 ASSERT_TRUE(results.find("means") != results.end()); |
172 ASSERT_TRUE(results.find("sigmas") != results.end()); | 218 ASSERT_TRUE(results.find("sigmas") != results.end()); |
173 | 219 |
174 std::string trace_name = "fps"; | 220 std::string trace_name = "fps" + GetSuffixForTestFlags(); |
175 trace_name += GetSuffixForTestFlags(GetParam()); | |
176 printf("GESTURES %s: %s= [%s] [%s] [%s]\n", name.c_str(), | 221 printf("GESTURES %s: %s= [%s] [%s] [%s]\n", name.c_str(), |
177 trace_name.c_str(), | 222 trace_name.c_str(), |
178 results["gestures"].c_str(), | 223 results["gestures"].c_str(), |
179 results["means"].c_str(), | 224 results["means"].c_str(), |
180 results["sigmas"].c_str()); | 225 results["sigmas"].c_str()); |
181 | 226 |
182 std::string mean_and_error = results["mean"] + "," + results["sigma"]; | 227 std::string mean_and_error = results["mean"] + "," + results["sigma"]; |
183 PrintResultMeanAndError(name, "", trace_name, mean_and_error, | 228 PrintResultMeanAndError(name, "", trace_name, mean_and_error, |
184 "frames-per-second", true); | 229 "frames-per-second", true); |
185 } | 230 } |
186 }; | 231 }; |
187 | 232 |
188 // Must use a different class name to avoid test instantiation conflicts | 233 // Must use a different class name to avoid test instantiation conflicts |
189 // with FrameRateTest. An alias is good enough. The alias names must match | 234 // with FrameRateTest. An alias is good enough. The alias names must match |
190 // the pattern FrameRate*Test* for them to get picked up by the test bots. | 235 // the pattern FrameRate*Test* for them to get picked up by the test bots. |
191 typedef FrameRateTest FrameRateCompositingTest; | 236 typedef FrameRateTest FrameRateCompositingTest; |
192 | 237 |
193 // Tests that trigger compositing with a -webkit-translateZ(0) | 238 // Tests that trigger compositing with a -webkit-translateZ(0) |
194 #define FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(content) \ | 239 #define FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(content) \ |
195 TEST_P(FrameRateCompositingTest, content) { \ | 240 TEST_P(FrameRateCompositingTest, content) { \ |
196 RunTest(#content); \ | 241 RunTest(#content); \ |
197 } | 242 } |
198 | 243 |
199 INSTANTIATE_TEST_CASE_P(, FrameRateCompositingTest, ::testing::Values( | 244 INSTANTIATE_TEST_CASE_P(, FrameRateCompositingTest, ::testing::Values( |
200 0, | 245 0, |
201 kMakeBodyComposited, | 246 kUseGpu | kForceGpuComposited, |
202 kUseReferenceBuild, | 247 kUseReferenceBuild, |
203 kUseReferenceBuild | kMakeBodyComposited)); | 248 kUseReferenceBuild | kUseGpu | kForceGpuComposited)); |
204 | 249 |
205 FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(blank); | 250 FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(blank); |
206 FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(googleblog); | 251 FRAME_RATE_TEST_WITH_AND_WITHOUT_ACCELERATED_COMPOSITING(googleblog); |
207 | 252 |
208 typedef FrameRateTest FrameRateNoVsyncCanvasInternalTest; | 253 typedef FrameRateTest FrameRateNoVsyncCanvasInternalTest; |
209 | 254 |
210 // Tests for animated 2D canvas content with and without disabling vsync | 255 // Tests for animated 2D canvas content with and without disabling vsync |
211 #define INTERNAL_FRAME_RATE_TEST_CANVAS_WITH_AND_WITHOUT_NOVSYNC(content) \ | 256 #define INTERNAL_FRAME_RATE_TEST_CANVAS_WITH_AND_WITHOUT_NOVSYNC(content) \ |
212 TEST_P(FrameRateNoVsyncCanvasInternalTest, content) { \ | 257 TEST_P(FrameRateNoVsyncCanvasInternalTest, content) { \ |
213 RunTest(#content); \ | 258 RunTest(#content); \ |
214 } \ | 259 } |
215 | 260 |
216 INSTANTIATE_TEST_CASE_P(, FrameRateNoVsyncCanvasInternalTest, ::testing::Values( | 261 INSTANTIATE_TEST_CASE_P(, FrameRateNoVsyncCanvasInternalTest, ::testing::Values( |
217 kInternal | kHasRedirect | kRequiresGpu, | 262 kInternal | kHasRedirect, |
218 kInternal | kHasRedirect | kDisableVsync | | 263 kInternal | kHasRedirect | kUseGpu, |
219 kRequiresGpu, | 264 kInternal | kHasRedirect | kUseGpu | kDisableVsync, |
220 kInternal | kHasRedirect | kDisableGpu, | 265 kUseReferenceBuild | kInternal | kHasRedirect, |
221 kInternal | kHasRedirect | kDisableGpu | | 266 kUseReferenceBuild | kInternal | kHasRedirect | kUseGpu, |
222 kUseReferenceBuild, | 267 kUseReferenceBuild | kInternal | kHasRedirect | kUseGpu | kDisableVsync)); |
223 kInternal | kHasRedirect | kUseReferenceBuild | | |
224 kRequiresGpu, | |
225 kInternal | kHasRedirect | kDisableVsync | | |
226 kRequiresGpu | kUseReferenceBuild)); | |
227 | 268 |
228 INTERNAL_FRAME_RATE_TEST_CANVAS_WITH_AND_WITHOUT_NOVSYNC(fishbowl) | 269 INTERNAL_FRAME_RATE_TEST_CANVAS_WITH_AND_WITHOUT_NOVSYNC(fishbowl) |
229 | 270 |
230 typedef FrameRateTest FrameRateGpuCanvasInternalTest; | 271 typedef FrameRateTest FrameRateGpuCanvasInternalTest; |
231 | 272 |
232 // Tests for animated 2D canvas content to be tested only with GPU | 273 // Tests for animated 2D canvas content to be tested only with GPU |
233 // acceleration. | 274 // acceleration. |
234 // tests are run with and without Vsync | 275 // tests are run with and without Vsync |
235 #define INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(content) \ | 276 #define INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(content) \ |
236 TEST_P(FrameRateGpuCanvasInternalTest, content) { \ | 277 TEST_P(FrameRateGpuCanvasInternalTest, content) { \ |
237 RunTest(#content); \ | 278 RunTest(#content); \ |
238 } \ | 279 } |
239 | 280 |
240 INSTANTIATE_TEST_CASE_P(, FrameRateGpuCanvasInternalTest, ::testing::Values( | 281 INSTANTIATE_TEST_CASE_P(, FrameRateGpuCanvasInternalTest, ::testing::Values( |
241 kInternal | kHasRedirect | kRequiresGpu, | 282 kInternal | kHasRedirect | kUseGpu, |
242 kInternal | kHasRedirect | kDisableVsync | | 283 kInternal | kHasRedirect | kUseGpu | kDisableVsync, |
243 kRequiresGpu, | 284 kUseReferenceBuild | kInternal | kHasRedirect | kUseGpu, |
244 kInternal | kHasRedirect | kUseReferenceBuild | | 285 kUseReferenceBuild | kInternal | kHasRedirect | kUseGpu | kDisableVsync)); |
245 kRequiresGpu, | |
246 kInternal | kHasRedirect | kDisableVsync | | |
247 kRequiresGpu | kUseReferenceBuild)); | |
248 | 286 |
249 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(fireflies) | 287 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(fireflies) |
250 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(FishIE) | 288 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(FishIE) |
251 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(speedreading) | 289 INTERNAL_FRAME_RATE_TEST_CANVAS_GPU(speedreading) |
252 | 290 |
253 } // namespace | 291 } // namespace |
OLD | NEW |