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

Unified Diff: gpu/command_buffer/service/gpu_tracer_unittest.cc

Issue 940633004: Added disjoint context class which manages disjoints within gpu timing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added releases and DCHECK in gpu_timing Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
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 ba61ba38d8f2420403b0d144f2dddea548983d37..cd3f5dfe91725779e598fd5377a20afc21d9d481 100644
--- a/gpu/command_buffer/service/gpu_tracer_unittest.cc
+++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc
@@ -150,10 +150,8 @@ class GlFakeQueries {
class GPUTracerTester : public GPUTracer {
public:
- explicit GPUTracerTester(gles2::GLES2Decoder* decoder)
- : GPUTracer(decoder), tracing_enabled_(0) {
- gpu_timing_.SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
-
+ GPUTracerTester(gles2::GLES2Decoder* decoder, GPUTiming* gpu_timing)
+ : GPUTracer(decoder, gpu_timing), tracing_enabled_(0) {
// Force tracing to be dependent on our mock variable here.
gpu_trace_srv_category = &tracing_enabled_;
gpu_trace_dev_category = &tracing_enabled_;
@@ -191,8 +189,6 @@ class BaseGpuTest : public GpuServiceTest {
public:
explicit BaseGpuTest(GPUTiming::TimerType test_timer_type)
: test_timer_type_(test_timer_type) {
- gpu_timing_.SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
- gpu_timing_.SetTimerTypeForTesting(test_timer_type);
}
protected:
@@ -209,6 +205,8 @@ class BaseGpuTest : public GpuServiceTest {
extensions = "GL_ARB_timer_query GL_ARB_occlusion_query";
}
GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
+ gpu_timing_.Initialize(GetGLContext());
+ gpu_timing_.SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
gl_fake_queries_.Reset();
outputter_ref_ = new MockOutputter();
@@ -229,15 +227,13 @@ class BaseGpuTest : public GpuServiceTest {
Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueriesARB));
EXPECT_CALL(*gl_, GetQueryObjectivARB(_, GL_QUERY_RESULT_AVAILABLE,
- NotNull()))
+ NotNull()))
.WillRepeatedly(
Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectivARB));
- if (GetTimerType() == GPUTiming::kTimerTypeDisjoint) {
- EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, _))
+ EXPECT_CALL(*gl_, GetInteger64v(GL_TIMESTAMP, _))
.WillRepeatedly(
Invoke(&gl_fake_queries_, &GlFakeQueries::GetInteger64v));
- }
EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP)).Times(AtLeast(2))
.WillRepeatedly(
@@ -347,9 +343,6 @@ class BaseGpuTraceTest : public BaseGpuTest {
scoped_refptr<GPUTrace> trace = new GPUTrace(
outputter_ref_, &gpu_timing_, category_name, trace_name, true);
- gpu_timing_.SetOffsetForTesting(
- offset_time, test_timer_type_ == GPUTiming::kTimerTypeARB);
-
gl_fake_queries_.SetCurrentGLTime(start_timestamp);
g_fakeCPUTime = expect_start_time;
trace->Start(true);
@@ -406,8 +399,7 @@ class BaseGpuTracerTest : public BaseGpuTest {
ExpectTracerOffsetQueryMocks();
MockGLES2Decoder decoder;
- EXPECT_CALL(decoder, GetGLContext()).WillOnce(Return(GetGLContext()));
- GPUTracerTester tracer(&decoder);
+ GPUTracerTester tracer(&decoder, &gpu_timing_);
tracer.SetTracingEnabled(true);
tracer.SetOutputter(outputter_ref_);
@@ -437,8 +429,7 @@ class BaseGpuTracerTest : public BaseGpuTest {
(end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time;
MockGLES2Decoder decoder;
- EXPECT_CALL(decoder, GetGLContext()).WillOnce(Return(GetGLContext()));
- GPUTracerTester tracer(&decoder);
+ GPUTracerTester tracer(&decoder, &gpu_timing_);
tracer.SetTracingEnabled(true);
tracer.SetOutputter(outputter_ref_);
@@ -522,8 +513,7 @@ class BaseGpuTracerTest : public BaseGpuTest {
(end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time;
MockGLES2Decoder decoder;
- EXPECT_CALL(decoder, GetGLContext()).WillOnce(Return(GetGLContext()));
- GPUTracerTester tracer(&decoder);
+ GPUTracerTester tracer(&decoder, &gpu_timing_);
tracer.SetTracingEnabled(true);
tracer.SetOutputter(outputter_ref_);
@@ -541,7 +531,14 @@ class BaseGpuTracerTest : public BaseGpuTest {
gl_fake_queries_.SetCurrentGLTime(end_timestamp);
g_fakeCPUTime = expect_end_time;
+
+ // Create a disjoint context to test disjoint behavior. This should not
+ // interfere with the tracer's disjoint context.
+ int disjoint_id = gpu_timing_.CreateDisjointContextID();
+
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id));
gl_fake_queries_.SetDisjoint();
+ ASSERT_TRUE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id));
ExpectOutputterEndMocks(outputter_ref_.get(), category_name, trace_name,
expect_start_time, expect_end_time, false);
@@ -602,11 +599,10 @@ class GPUTracerTest : public GpuServiceTest {
void SetUp() override {
g_fakeCPUTime = 0;
GpuServiceTest::SetUpWithGLVersion("3.2", "");
+ gpu_timing_.Initialize(GetGLContext());
+ gpu_timing_.SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
decoder_.reset(new MockGLES2Decoder());
- EXPECT_CALL(*decoder_, GetGLContext())
- .Times(AtMost(1))
- .WillRepeatedly(Return(GetGLContext()));
- tracer_tester_.reset(new GPUTracerTester(decoder_.get()));
+ tracer_tester_.reset(new GPUTracerTester(decoder_.get(), &gpu_timing_));
}
void TearDown() override {
@@ -614,6 +610,7 @@ class GPUTracerTest : public GpuServiceTest {
decoder_ = nullptr;
GpuServiceTest::TearDown();
}
+ GPUTiming gpu_timing_;
scoped_ptr<MockGLES2Decoder> decoder_;
scoped_ptr<GPUTracerTester> tracer_tester_;
};
@@ -644,6 +641,34 @@ TEST_F(GPUTracerTest, TraceDuringDecodeTest) {
ASSERT_TRUE(tracer_tester_->EndDecoding());
}
+TEST_F(GpuDisjointTimerTracerTest, MultipleDisjointContexts) {
+ EXPECT_CALL(*gl_, GetIntegerv(GL_GPU_DISJOINT_EXT, _)).Times(AtLeast(1))
+ .WillRepeatedly(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::GetIntegerv));
+
+ int disjoint_id1 = gpu_timing_.CreateDisjointContextID();
+ int disjoint_id2 = gpu_timing_.CreateDisjointContextID();
+
+ // Test both contexts are initialized as no errors.
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id1));
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id2));
+
+ // Issue a disjoint.
+ gl_fake_queries_.SetDisjoint();
+
+ ASSERT_TRUE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id1));
+ ASSERT_TRUE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id2));
+
+ // Test new context gets the disjoint value as if no other contexts reset it.
+ int disjoint_id3 = gpu_timing_.CreateDisjointContextID();
+ ASSERT_TRUE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id3));
+
+ // Test all 3 are all reset.
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id1));
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id2));
+ ASSERT_FALSE(gpu_timing_.CheckAndResetTimerErrors(disjoint_id3));
+}
+
} // namespace
} // namespace gles2
} // namespace gpu

Powered by Google App Engine
This is Rietveld 408576698