Index: gpu/command_buffer/service/gpu_tracer_unittest.cc |
diff --git a/gpu/command_buffer/service/gpu_tracer_unittest.cc b/gpu/command_buffer/service/gpu_tracer_unittest.cc |
index ccf4d6da3cf15a6fb0182c65aa4901e0e68392e5..10c2d4d580ab8ac57c81f94e1e9dfe24e6285eec 100644 |
--- a/gpu/command_buffer/service/gpu_tracer_unittest.cc |
+++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc |
@@ -30,9 +30,9 @@ class MockOutputter : public Outputter { |
~MockOutputter() {} |
}; |
-class GlFakeQueries { |
+class GlFakeTraceQueries { |
public: |
- GlFakeQueries() {} |
+ GlFakeTraceQueries() {} |
void Reset() { |
current_time_ = 0; |
@@ -101,9 +101,9 @@ class GlFakeQueries { |
std::map<GLuint, GLint64> query_timestamp_; |
}; |
-class BaseGpuTracerTest : public GpuServiceTest { |
+class BaseGpuTraceTest : public GpuServiceTest { |
public: |
- BaseGpuTracerTest() {} |
+ BaseGpuTraceTest() {} |
/////////////////////////////////////////////////////////////////////////// |
@@ -169,58 +169,154 @@ class BaseGpuTracerTest : public GpuServiceTest { |
} |
virtual void SetupTimerQueryMocks() { |
- // Delegate query APIs used by GPUTrace to a GlFakeQueries |
+ // Delegate query APIs used by GPUTrace to a GlFakeTraceQueries |
EXPECT_CALL(*gl_, GenQueriesARB(_, NotNull())).Times(AtLeast(1)).WillOnce( |
- Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB)); |
+ Invoke(&gl_fake_queries_, &GlFakeTraceQueries::GenQueriesARB)); |
EXPECT_CALL(*gl_, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, NotNull())) |
.Times(AtLeast(2)) |
.WillRepeatedly( |
- Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectiv)); |
+ Invoke(&gl_fake_queries_, &GlFakeTraceQueries::GetQueryObjectiv)); |
EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)) |
.Times(AtLeast(2)) |
.WillRepeatedly( |
- Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter)); |
+ Invoke(&gl_fake_queries_, &GlFakeTraceQueries::QueryCounter)); |
EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull())) |
.Times(AtLeast(2)) |
.WillRepeatedly( |
- Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectui64v)); |
+ Invoke(&gl_fake_queries_, |
+ &GlFakeTraceQueries::GetQueryObjectui64v)); |
EXPECT_CALL(*gl_, DeleteQueriesARB(2, NotNull())) |
.Times(AtLeast(1)) |
.WillRepeatedly( |
- Invoke(&gl_fake_queries_, &GlFakeQueries::DeleteQueriesARB)); |
+ Invoke(&gl_fake_queries_, &GlFakeTraceQueries::DeleteQueriesARB)); |
} |
virtual GpuTracerType GetTracerType() = 0; |
- GlFakeQueries gl_fake_queries_; |
+ GlFakeTraceQueries gl_fake_queries_; |
}; |
-class GpuARBTimerTracerTest : public BaseGpuTracerTest { |
+class GpuARBTimerTraceTest : public BaseGpuTraceTest { |
protected: |
GpuTracerType GetTracerType() override { return kTracerTypeARBTimer; } |
}; |
-class GpuDisjointTimerTracerTest : public BaseGpuTracerTest { |
+class GpuDisjointTimerTraceTest : public BaseGpuTraceTest { |
protected: |
GpuTracerType GetTracerType() override { return kTracerTypeDisjointTimer; } |
}; |
-TEST_F(GpuARBTimerTracerTest, GPUTrace) { |
+TEST_F(GpuARBTimerTraceTest, ARBTimerTest) { |
// Test basic timer query functionality |
- { |
- DoTraceTest(); |
- } |
+ DoTraceTest(); |
} |
-TEST_F(GpuDisjointTimerTracerTest, GPUTrace) { |
+TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTest) { |
// Test basic timer query functionality |
- { |
- DoTraceTest(); |
+ DoTraceTest(); |
+} |
+ |
+// Test GPU Tracer |
+class MockGPUTracer : public GPUTracer { |
vmiura
2014/12/19 00:30:15
This is not really a "Mock", I guess.
I think you
|
+ public: |
+ MockGPUTracer() |
+ : GPUTracer(NULL), |
+ tracing_enabled_(0) { |
+ // Do not have the Mock GPU Tracer issue any GL calls. |
+ tracer_type_ = kTracerTypeInvalid; |
+ |
+ // Force tracing to be dependent on our mock variable here. |
+ gpu_trace_srv_category = &tracing_enabled_; |
+ gpu_trace_dev_category = &tracing_enabled_; |
+ } |
+ |
+ ~MockGPUTracer() { |
+ } |
+ |
+ void SetTracingEnabled(bool enabled) { |
+ tracing_enabled_ = enabled ? 1 : 0; |
} |
+ |
+ protected: |
+ unsigned char tracing_enabled_; |
+}; |
+ |
+TEST(GpuTracerTest, IsTracingTest) { |
+ MockGPUTracer mock_tracer; |
+ EXPECT_FALSE(mock_tracer.IsTracing()); |
+ mock_tracer.SetTracingEnabled(true); |
+ EXPECT_TRUE(mock_tracer.IsTracing()); |
+} |
+ |
+TEST(GpuTracerTest, DecodeTest) { |
+ MockGPUTracer mock_tracer; |
+ ASSERT_TRUE(mock_tracer.BeginDecoding()); |
+ EXPECT_FALSE(mock_tracer.BeginDecoding()); |
+ ASSERT_TRUE(mock_tracer.EndDecoding()); |
+ EXPECT_FALSE(mock_tracer.EndDecoding()); |
+} |
+ |
+TEST(GpuTracerTest, TraceDuringDecodeTest) { |
+ MockGPUTracer mock_tracer; |
+ const std::string category_name("trace_category"); |
+ const std::string trace_name("trace_test"); |
+ |
+ EXPECT_FALSE(mock_tracer.Begin(category_name, trace_name, kTraceGroupMarker)); |
+ |
+ ASSERT_TRUE(mock_tracer.BeginDecoding()); |
+ EXPECT_TRUE(mock_tracer.Begin(category_name, trace_name, kTraceGroupMarker)); |
+ ASSERT_TRUE(mock_tracer.EndDecoding()); |
+} |
+ |
+TEST(GpuTracerTest, TraceSourceTest) { |
+ MockGPUTracer mock_tracer; |
+ ASSERT_TRUE(mock_tracer.BeginDecoding()); |
+ |
+ // Begin a trace for all each source type. |
+ const std::string group_category("group_category"); |
+ const std::string group_name("group_test"); |
+ ASSERT_TRUE(mock_tracer.Begin(group_category, group_name, kTraceGroupMarker)); |
+ |
+ const std::string chromium_category("chromium_category"); |
+ const std::string chromium_name("chromium_test"); |
+ ASSERT_TRUE(mock_tracer.Begin(chromium_category, chromium_name, |
+ kTraceCHROMIUM)); |
+ |
+ const std::string decoder_category("decoder_category"); |
+ const std::string decoder_name("decoder_test"); |
+ ASSERT_TRUE(mock_tracer.Begin(decoder_category, decoder_name, kTraceDecoder)); |
+ |
+ // Each source type should have it's own current category/name. |
+ EXPECT_EQ(group_category, mock_tracer.CurrentCategory(kTraceGroupMarker)); |
+ EXPECT_EQ(group_name, mock_tracer.CurrentName(kTraceGroupMarker)); |
+ |
+ EXPECT_EQ(chromium_category, mock_tracer.CurrentCategory(kTraceCHROMIUM)); |
+ EXPECT_EQ(chromium_name, mock_tracer.CurrentName(kTraceCHROMIUM)); |
+ |
+ EXPECT_EQ(decoder_category, mock_tracer.CurrentCategory(kTraceDecoder)); |
+ EXPECT_EQ(decoder_name, mock_tracer.CurrentName(kTraceDecoder)); |
+ |
+ // End each source trace. |
+ ASSERT_TRUE(mock_tracer.End(kTraceGroupMarker)); |
+ ASSERT_TRUE(mock_tracer.End(kTraceCHROMIUM)); |
+ ASSERT_TRUE(mock_tracer.End(kTraceDecoder)); |
+ |
+ // Should be nothing tracing now |
+ const std::string empty_string; |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentCategory(kTraceGroupMarker)); |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentName(kTraceGroupMarker)); |
+ |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentCategory(kTraceCHROMIUM)); |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentName(kTraceCHROMIUM)); |
+ |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentCategory(kTraceDecoder)); |
+ EXPECT_EQ(empty_string, mock_tracer.CurrentName(kTraceDecoder)); |
+ |
+ ASSERT_TRUE(mock_tracer.EndDecoding()); |
} |
} // namespace gles2 |