Index: chrome/test/gpu/gpu_feature_browsertest.cc |
diff --git a/chrome/test/gpu/gpu_feature_browsertest.cc b/chrome/test/gpu/gpu_feature_browsertest.cc |
index 2b5d4a99ba729c6c9ab8b590a55d17c7a53f4708..32a2e515649d5fdbf3cb40174090877046b9b631 100644 |
--- a/chrome/test/gpu/gpu_feature_browsertest.cc |
+++ b/chrome/test/gpu/gpu_feature_browsertest.cc |
@@ -24,6 +24,9 @@ |
using content::GpuDataManager; |
using content::GpuFeatureType; |
+using trace_analyzer::Query; |
+using trace_analyzer::TraceAnalyzer; |
+using trace_analyzer::TraceEventVector; |
namespace { |
@@ -34,7 +37,7 @@ typedef uint32 GpuResultFlags; |
class GpuFeatureTest : public InProcessBrowserTest { |
public: |
- GpuFeatureTest() : gpu_enabled_(false) {} |
+ GpuFeatureTest() : trace_categories_("test_gpu"), gpu_enabled_(false) {} |
virtual void SetUpInProcessBrowserTestFixture() { |
FilePath test_dir; |
@@ -111,35 +114,37 @@ class GpuFeatureTest : public InProcessBrowserTest { |
using trace_analyzer::Query; |
using trace_analyzer::TraceAnalyzer; |
- ASSERT_TRUE(tracing::BeginTracing("test_gpu")); |
+ ASSERT_TRUE(tracing::BeginTracing(trace_categories_)); |
// Have to use a new tab for the blacklist to work. |
RunTest(url, NULL, true); |
- std::string json_events; |
- ASSERT_TRUE(tracing::EndTracing(&json_events)); |
+ ASSERT_TRUE(tracing::EndTracing(&trace_events_json_)); |
- scoped_ptr<TraceAnalyzer> analyzer(TraceAnalyzer::Create(json_events)); |
- analyzer->AssociateBeginEndEvents(); |
- trace_analyzer::TraceEventVector events; |
+ analyzer_.reset(TraceAnalyzer::Create(trace_events_json_)); |
+ analyzer_->AssociateBeginEndEvents(); |
+ TraceEventVector events; |
// This measurement is flaky, because the GPU process is sometimes |
// started before the test (always with force-compositing-mode on CrOS). |
if (expectations & EXPECT_NO_GPU_PROCESS) { |
- EXPECT_EQ(0u, analyzer->FindEvents( |
+ EXPECT_EQ(0u, analyzer_->FindEvents( |
Query::MatchBeginName("OnGraphicsInfoCollected"), &events)); |
} |
// Check for swap buffers if expected: |
if (expectations & EXPECT_GPU_SWAP_BUFFERS) { |
- EXPECT_GT(analyzer->FindEvents(Query::EventName() == |
- Query::String("SwapBuffers"), &events), |
+ EXPECT_GT(analyzer_->FindEvents(Query::EventName() == |
+ Query::String("SwapBuffers"), &events), |
size_t(0)); |
} |
} |
protected: |
FilePath gpu_test_dir_; |
+ scoped_ptr<TraceAnalyzer> analyzer_; |
+ std::string trace_categories_; |
+ std::string trace_events_json_; |
bool gpu_enabled_; |
}; |
@@ -371,5 +376,35 @@ IN_PROC_BROWSER_TEST_F(ThreadedCompositorTest, DISABLED_ThreadedCompositor) { |
RunTest(url, EXPECT_GPU_SWAP_BUFFERS); |
} |
+// TODO(jbates) unmark FLAKY once it's verified to not be flaky. |
+IN_PROC_BROWSER_TEST_F(GpuFeatureTest, FLAKY_RafNoDamage) { |
+ trace_categories_ = "-test_*"; |
+ const FilePath url(FILE_PATH_LITERAL("feature_raf_no_damage.html")); |
+ RunTest(url, GpuResultFlags(0)); |
+ |
+ TraceEventVector events; |
+ size_t num_events = analyzer_->FindEvents( |
+ Query::MatchBeginName("___RafWithNoDamage___"), &events); |
+ |
+ trace_analyzer::RateStats stats; |
+ trace_analyzer::RateStatsOptions stats_options; |
+ stats_options.trim_min = stats_options.trim_max = num_events / 10; |
+ EXPECT_TRUE(trace_analyzer::GetRateStats(events, &stats, &stats_options)); |
+ |
+ LOG(INFO) << "Number of RAFs: " << num_events << |
+ " Mean: " << stats.mean_us << |
+ " Min: " << stats.min_us << |
+ " Max: " << stats.max_us << |
+ " StdDev: " << stats.standard_deviation_us; |
+ |
+ // Expect that the average time between RAFs is more than 15ms. That will |
+ // indicate that the renderer is not simply spinning on RAF. |
+ EXPECT_GT(stats.mean_us, 15000.0); |
+ |
+ if (stats.mean_us <= 15000.0) { |
+ fprintf(stderr, "\n\nTRACE JSON:\n\n%s\n\n", trace_events_json_.c_str()); |
+ } |
+} |
+ |
} // namespace anonymous |