| 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 2a6896ef9f4577d73bee19a26a894b45805c151a..dc5936d462760e00d62997455ca5f4d5b60c5dea 100644
 | 
| --- a/gpu/command_buffer/service/gpu_tracer_unittest.cc
 | 
| +++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc
 | 
| @@ -294,11 +294,13 @@ class BaseGpuTest : public GpuServiceTest {
 | 
|    }
 | 
|  
 | 
|    void ExpectOutputterMocks(MockOutputter* outputter,
 | 
| +                            bool tracing_device,
 | 
|                              const std::string& category,
 | 
|                              const std::string& name, int64 expect_start_time,
 | 
|                              int64 expect_end_time) {
 | 
|      ExpectOutputterBeginMocks(outputter, category, name);
 | 
| -    bool valid_timer = gpu_timing_client_->IsAvailable() &&
 | 
| +    bool valid_timer = tracing_device &&
 | 
| +                       gpu_timing_client_->IsAvailable() &&
 | 
|                         gpu_timing_client_->IsTimerOffsetAvailable();
 | 
|      ExpectOutputterEndMocks(outputter, category, name, expect_start_time,
 | 
|                              expect_end_time, valid_timer);
 | 
| @@ -331,7 +333,7 @@ class BaseGpuTraceTest : public BaseGpuTest {
 | 
|    explicit BaseGpuTraceTest(gfx::GPUTiming::TimerType test_timer_type)
 | 
|        : BaseGpuTest(test_timer_type) {}
 | 
|  
 | 
| -  void DoTraceTest() {
 | 
| +  void DoTraceTest(bool tracing_service, bool tracing_device) {
 | 
|      // Expected results
 | 
|      const std::string category_name("trace_category");
 | 
|      const std::string trace_name("trace_test");
 | 
| @@ -344,29 +346,34 @@ class BaseGpuTraceTest : public BaseGpuTest {
 | 
|      const int64 expect_end_time =
 | 
|          (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time;
 | 
|  
 | 
| -    ExpectTraceQueryMocks();
 | 
| -    ExpectOutputterMocks(outputter_ref_.get(), category_name, trace_name,
 | 
| -                         expect_start_time, expect_end_time);
 | 
| +    if (tracing_service)
 | 
| +      ExpectOutputterMocks(outputter_ref_.get(), tracing_device, category_name,
 | 
| +                           trace_name, expect_start_time, expect_end_time);
 | 
| +
 | 
| +    if (tracing_device)
 | 
| +      ExpectTraceQueryMocks();
 | 
|  
 | 
|      scoped_refptr<GPUTrace> trace = new GPUTrace(
 | 
|          outputter_ref_, gpu_timing_client_.get(),
 | 
| -        category_name, trace_name, true);
 | 
| +        category_name, trace_name, tracing_service, tracing_device);
 | 
|  
 | 
|      gl_fake_queries_.SetCurrentGLTime(start_timestamp);
 | 
|      g_fakeCPUTime = expect_start_time;
 | 
| -    trace->Start(true);
 | 
| +    trace->Start();
 | 
|  
 | 
|      // Shouldn't be available before End() call
 | 
|      gl_fake_queries_.SetCurrentGLTime(end_timestamp);
 | 
|      g_fakeCPUTime = expect_end_time;
 | 
| -    EXPECT_FALSE(trace->IsAvailable());
 | 
| +    if (tracing_device)
 | 
| +      EXPECT_FALSE(trace->IsAvailable());
 | 
|  
 | 
| -    trace->End(true);
 | 
| +    trace->End();
 | 
|  
 | 
|      // Shouldn't be available until the queries complete
 | 
|      gl_fake_queries_.SetCurrentGLTime(end_timestamp -
 | 
|                                        base::Time::kNanosecondsPerMicrosecond);
 | 
| -    EXPECT_FALSE(trace->IsAvailable());
 | 
| +    if (tracing_device)
 | 
| +      EXPECT_FALSE(trace->IsAvailable());
 | 
|  
 | 
|      // Now it should be available
 | 
|      gl_fake_queries_.SetCurrentGLTime(end_timestamp);
 | 
| @@ -393,12 +400,36 @@ class GpuDisjointTimerTraceTest : public BaseGpuTraceTest {
 | 
|        : BaseGpuTraceTest(gfx::GPUTiming::kTimerTypeDisjoint) {}
 | 
|  };
 | 
|  
 | 
| -TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTest) {
 | 
| -  DoTraceTest();
 | 
| +TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestOff) {
 | 
| +  DoTraceTest(false, false);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestServiceOnly) {
 | 
| +  DoTraceTest(true, false);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestDeviceOnly) {
 | 
| +  DoTraceTest(false, true);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuARBTimerTraceTest, ARBTimerTraceTestBothOn) {
 | 
| +  DoTraceTest(true, true);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestOff) {
 | 
| +  DoTraceTest(false, false);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestServiceOnly) {
 | 
| +  DoTraceTest(true, false);
 | 
| +}
 | 
| +
 | 
| +TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestDeviceOnly) {
 | 
| +  DoTraceTest(false, true);
 | 
|  }
 | 
|  
 | 
| -TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTest) {
 | 
| -  DoTraceTest();
 | 
| +TEST_F(GpuDisjointTimerTraceTest, DisjointTimerTraceTestBothOn) {
 | 
| +  DoTraceTest(true, true);
 | 
|  }
 | 
|  
 | 
|  // Test GPUTracer calls all the correct gl calls.
 | 
| 
 |