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

Side by Side Diff: chrome/test/perf/frame_rate/frame_rate_tests.cc

Issue 7982007: add "did it run on GPU" check to frame_rate_tests.cc using AutomationProxy tracing feature (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more cleanup Created 9 years, 1 month 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 | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('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 (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
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698