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

Side by Side Diff: chrome/test/gpu/gpu_feature_browsertest.cc

Issue 9580021: Add test for RAF-spinning with no damage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: marking test flaky for initial commit to be safe Created 8 years, 9 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
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/test/trace_event_analyzer.h" 9 #include "base/test/trace_event_analyzer.h"
10 #include "base/version.h" 10 #include "base/version.h"
11 #include "chrome/browser/gpu_blacklist.h" 11 #include "chrome/browser/gpu_blacklist.h"
12 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/common/chrome_paths.h" 13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
15 #include "chrome/test/base/in_process_browser_test.h" 15 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/test_launcher_utils.h" 16 #include "chrome/test/base/test_launcher_utils.h"
17 #include "chrome/test/base/tracing.h" 17 #include "chrome/test/base/tracing.h"
18 #include "chrome/test/base/ui_test_utils.h" 18 #include "chrome/test/base/ui_test_utils.h"
19 #include "content/public/browser/gpu_data_manager.h" 19 #include "content/public/browser/gpu_data_manager.h"
20 #include "content/public/common/content_switches.h" 20 #include "content/public/common/content_switches.h"
21 #include "content/test/gpu/gpu_test_config.h" 21 #include "content/test/gpu/gpu_test_config.h"
22 #include "net/base/net_util.h" 22 #include "net/base/net_util.h"
23 #include "ui/gfx/gl/gl_switches.h" 23 #include "ui/gfx/gl/gl_switches.h"
24 24
25 using content::GpuDataManager; 25 using content::GpuDataManager;
26 using content::GpuFeatureType; 26 using content::GpuFeatureType;
27 using trace_analyzer::Query;
28 using trace_analyzer::TraceAnalyzer;
29 using trace_analyzer::TraceEventVector;
27 30
28 namespace { 31 namespace {
29 32
30 typedef uint32 GpuResultFlags; 33 typedef uint32 GpuResultFlags;
31 #define EXPECT_NO_GPU_PROCESS GpuResultFlags(1<<0) 34 #define EXPECT_NO_GPU_PROCESS GpuResultFlags(1<<0)
32 // Expect a SwapBuffers to occur (see gles2_cmd_decoder.cc). 35 // Expect a SwapBuffers to occur (see gles2_cmd_decoder.cc).
33 #define EXPECT_GPU_SWAP_BUFFERS GpuResultFlags(1<<1) 36 #define EXPECT_GPU_SWAP_BUFFERS GpuResultFlags(1<<1)
34 37
35 class GpuFeatureTest : public InProcessBrowserTest { 38 class GpuFeatureTest : public InProcessBrowserTest {
36 public: 39 public:
37 GpuFeatureTest() : gpu_enabled_(false) {} 40 GpuFeatureTest() : trace_categories_("test_gpu"), gpu_enabled_(false) {}
38 41
39 virtual void SetUpInProcessBrowserTestFixture() { 42 virtual void SetUpInProcessBrowserTestFixture() {
40 FilePath test_dir; 43 FilePath test_dir;
41 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); 44 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir));
42 gpu_test_dir_ = test_dir.AppendASCII("gpu"); 45 gpu_test_dir_ = test_dir.AppendASCII("gpu");
43 } 46 }
44 47
45 virtual void SetUpCommandLine(CommandLine* command_line) { 48 virtual void SetUpCommandLine(CommandLine* command_line) {
46 // This enables DOM automation for tab contents. 49 // This enables DOM automation for tab contents.
47 EnableDOMAutomation(); 50 EnableDOMAutomation();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 void RunTest(const FilePath& url, GpuResultFlags expectations) { 107 void RunTest(const FilePath& url, GpuResultFlags expectations) {
105 #if defined(OS_LINUX) && !defined(NDEBUG) 108 #if defined(OS_LINUX) && !defined(NDEBUG)
106 // Bypass tests on GPU Linux Debug bots. 109 // Bypass tests on GPU Linux Debug bots.
107 if (gpu_enabled_) 110 if (gpu_enabled_)
108 return; 111 return;
109 #endif 112 #endif
110 113
111 using trace_analyzer::Query; 114 using trace_analyzer::Query;
112 using trace_analyzer::TraceAnalyzer; 115 using trace_analyzer::TraceAnalyzer;
113 116
114 ASSERT_TRUE(tracing::BeginTracing("test_gpu")); 117 ASSERT_TRUE(tracing::BeginTracing(trace_categories_));
115 118
116 // Have to use a new tab for the blacklist to work. 119 // Have to use a new tab for the blacklist to work.
117 RunTest(url, NULL, true); 120 RunTest(url, NULL, true);
118 121
119 std::string json_events; 122 ASSERT_TRUE(tracing::EndTracing(&trace_events_json_));
120 ASSERT_TRUE(tracing::EndTracing(&json_events));
121 123
122 scoped_ptr<TraceAnalyzer> analyzer(TraceAnalyzer::Create(json_events)); 124 analyzer_.reset(TraceAnalyzer::Create(trace_events_json_));
123 analyzer->AssociateBeginEndEvents(); 125 analyzer_->AssociateBeginEndEvents();
124 trace_analyzer::TraceEventVector events; 126 TraceEventVector events;
125 127
126 // This measurement is flaky, because the GPU process is sometimes 128 // This measurement is flaky, because the GPU process is sometimes
127 // started before the test (always with force-compositing-mode on CrOS). 129 // started before the test (always with force-compositing-mode on CrOS).
128 if (expectations & EXPECT_NO_GPU_PROCESS) { 130 if (expectations & EXPECT_NO_GPU_PROCESS) {
129 EXPECT_EQ(0u, analyzer->FindEvents( 131 EXPECT_EQ(0u, analyzer_->FindEvents(
130 Query::MatchBeginName("OnGraphicsInfoCollected"), &events)); 132 Query::MatchBeginName("OnGraphicsInfoCollected"), &events));
131 } 133 }
132 134
133 // Check for swap buffers if expected: 135 // Check for swap buffers if expected:
134 if (expectations & EXPECT_GPU_SWAP_BUFFERS) { 136 if (expectations & EXPECT_GPU_SWAP_BUFFERS) {
135 EXPECT_GT(analyzer->FindEvents(Query::EventName() == 137 EXPECT_GT(analyzer_->FindEvents(Query::EventName() ==
136 Query::String("SwapBuffers"), &events), 138 Query::String("SwapBuffers"), &events),
137 size_t(0)); 139 size_t(0));
138 } 140 }
139 } 141 }
140 142
141 protected: 143 protected:
142 FilePath gpu_test_dir_; 144 FilePath gpu_test_dir_;
145 scoped_ptr<TraceAnalyzer> analyzer_;
146 std::string trace_categories_;
147 std::string trace_events_json_;
143 bool gpu_enabled_; 148 bool gpu_enabled_;
144 }; 149 };
145 150
146 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingAllowed) { 151 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingAllowed) {
147 GpuFeatureType type = GpuDataManager::GetInstance()->GetGpuFeatureType(); 152 GpuFeatureType type = GpuDataManager::GetInstance()->GetGpuFeatureType();
148 EXPECT_EQ(type, 0); 153 EXPECT_EQ(type, 0);
149 154
150 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); 155 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
151 RunTest(url, EXPECT_GPU_SWAP_BUFFERS); 156 RunTest(url, EXPECT_GPU_SWAP_BUFFERS);
152 } 157 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 GpuFeatureTest::SetUpCommandLine(command_line); 369 GpuFeatureTest::SetUpCommandLine(command_line);
365 command_line->AppendSwitch(switches::kEnableThreadedCompositing); 370 command_line->AppendSwitch(switches::kEnableThreadedCompositing);
366 } 371 }
367 }; 372 };
368 373
369 IN_PROC_BROWSER_TEST_F(ThreadedCompositorTest, DISABLED_ThreadedCompositor) { 374 IN_PROC_BROWSER_TEST_F(ThreadedCompositorTest, DISABLED_ThreadedCompositor) {
370 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); 375 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
371 RunTest(url, EXPECT_GPU_SWAP_BUFFERS); 376 RunTest(url, EXPECT_GPU_SWAP_BUFFERS);
372 } 377 }
373 378
379 // TODO(jbates) unmark FLAKY once it's verified to not be flaky.
380 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, FLAKY_RafNoDamage) {
381 trace_categories_ = "-test_*";
382 const FilePath url(FILE_PATH_LITERAL("feature_raf_no_damage.html"));
383 RunTest(url, GpuResultFlags(0));
384
385 TraceEventVector events;
386 size_t num_events = analyzer_->FindEvents(
387 Query::MatchBeginName("___RafWithNoDamage___"), &events);
388
389 trace_analyzer::RateStats stats;
390 trace_analyzer::RateStatsOptions stats_options;
391 stats_options.trim_min = stats_options.trim_max = num_events / 10;
392 EXPECT_TRUE(trace_analyzer::GetRateStats(events, &stats, &stats_options));
393
394 LOG(INFO) << "Number of RAFs: " << num_events <<
395 " Mean: " << stats.mean_us <<
396 " Min: " << stats.min_us <<
397 " Max: " << stats.max_us <<
398 " StdDev: " << stats.standard_deviation_us;
399
400 // Expect that the average time between RAFs is more than 15ms. That will
401 // indicate that the renderer is not simply spinning on RAF.
402 EXPECT_GT(stats.mean_us, 15000.0);
403
404 if (stats.mean_us <= 15000.0) {
405 fprintf(stderr, "\n\nTRACE JSON:\n\n%s\n\n", trace_events_json_.c_str());
406 }
407 }
408
374 } // namespace anonymous 409 } // namespace anonymous
375 410
OLDNEW
« no previous file with comments | « chrome/test/data/gpu/feature_raf_no_damage.html ('k') | chrome/test/perf/rendering/latency_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698