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 3// found in the LICENSE file. 4 5#include "base/memory/scoped_ptr.h" 6#include "gpu/config/gpu_info.h" 7#include "gpu/config/gpu_info_collector.h" 8#include "testing/gmock/include/gmock/gmock.h" 9#include "testing/gtest/include/gtest/gtest.h" 10#include "ui/gl/gl_mock.h" 11 12using ::gfx::MockGLInterface; 13using ::testing::Return; 14 15namespace gpu { 16 17class GPUInfoCollectorTest : public testing::Test { 18 public: 19 GPUInfoCollectorTest() {} 20 virtual ~GPUInfoCollectorTest() { } 21 22 virtual void SetUp() { 23 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 24 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 25#if defined(OS_WIN) 26 const uint32 vendor_id = 0x10de; 27 const uint32 device_id = 0x0658; 28 const char* driver_vendor = ""; // not implemented 29 const char* driver_version = ""; 30 const char* shader_version = "1.40"; 31 const char* gl_renderer = "Quadro FX 380/PCI/SSE2"; 32 const char* gl_vendor = "NVIDIA Corporation"; 33 const char* gl_version = "3.1.0"; 34 const char* gl_shading_language_version = "1.40 NVIDIA via Cg compiler"; 35 const char* gl_extensions = 36 "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 37 "GL_EXT_read_format_bgra"; 38#elif defined(OS_MACOSX) 39 const uint32 vendor_id = 0x10de; 40 const uint32 device_id = 0x0640; 41 const char* driver_vendor = ""; // not implemented 42 const char* driver_version = "1.6.18"; 43 const char* shader_version = "1.20"; 44 const char* gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine"; 45 const char* gl_vendor = "NVIDIA Corporation"; 46 const char* gl_version = "2.1 NVIDIA-1.6.18"; 47 const char* gl_shading_language_version = "1.20 "; 48 const char* gl_extensions = 49 "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 50 "GL_EXT_read_format_bgra"; 51#else // defined (OS_LINUX) 52 const uint32 vendor_id = 0x10de; 53 const uint32 device_id = 0x0658; 54 const char* driver_vendor = "NVIDIA"; 55 const char* driver_version = "195.36.24"; 56 const char* shader_version = "1.50"; 57 const char* gl_renderer = "Quadro FX 380/PCI/SSE2"; 58 const char* gl_vendor = "NVIDIA Corporation"; 59 const char* gl_version = "3.2.0 NVIDIA 195.36.24"; 60 const char* gl_shading_language_version = "1.50 NVIDIA via Cg compiler"; 61 const char* gl_extensions = 62 "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 63 "GL_EXT_read_format_bgra"; 64#endif 65 test_values_.gpu.vendor_id = vendor_id; 66 test_values_.gpu.device_id = device_id; 67 test_values_.driver_vendor = driver_vendor; 68 test_values_.driver_version =driver_version; 69 test_values_.pixel_shader_version = shader_version; 70 test_values_.vertex_shader_version = shader_version; 71 test_values_.gl_renderer = gl_renderer; 72 test_values_.gl_vendor = gl_vendor; 73 test_values_.gl_version = gl_version; 74 test_values_.gl_extensions = gl_extensions; 75 test_values_.can_lose_context = false; 76 77 EXPECT_CALL(*gl_, GetString(GL_EXTENSIONS)) 78 .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 79 gl_extensions))); 80 EXPECT_CALL(*gl_, GetString(GL_SHADING_LANGUAGE_VERSION)) 81 .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 82 gl_shading_language_version))); 83 EXPECT_CALL(*gl_, GetString(GL_VERSION)) 84 .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 85 gl_version))); 86 EXPECT_CALL(*gl_, GetString(GL_VENDOR)) 87 .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 88 gl_vendor))); 89 EXPECT_CALL(*gl_, GetString(GL_RENDERER)) 90 .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 91 gl_renderer))); 92 } 93 94 virtual void TearDown() { 95 ::gfx::MockGLInterface::SetGLInterface(NULL); 96 gl_.reset(); 97 } 98 99 public: 100 // Use StrictMock to make 100% sure we know how GL will be called. 101 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 102 GPUInfo test_values_; 103}; 104 105// TODO(rlp): Test the vendor and device id collection if deemed necessary as 106// it involves several complicated mocks for each platform. 107 108// TODO(kbr): re-enable these tests; see http://crbug.com/100285 . 109 110TEST_F(GPUInfoCollectorTest, DISABLED_DriverVendorGL) { 111 GPUInfo gpu_info; 112 CollectGraphicsInfoGL(&gpu_info); 113 EXPECT_EQ(test_values_.driver_vendor, 114 gpu_info.driver_vendor); 115} 116 117// Skip Windows because the driver version is obtained from bot registry. 118#if !defined(OS_WIN) 119TEST_F(GPUInfoCollectorTest, DISABLED_DriverVersionGL) { 120 GPUInfo gpu_info; 121 CollectGraphicsInfoGL(&gpu_info); 122 EXPECT_EQ(test_values_.driver_version, 123 gpu_info.driver_version); 124} 125#endif 126 127TEST_F(GPUInfoCollectorTest, DISABLED_PixelShaderVersionGL) { 128 GPUInfo gpu_info; 129 CollectGraphicsInfoGL(&gpu_info); 130 EXPECT_EQ(test_values_.pixel_shader_version, 131 gpu_info.pixel_shader_version); 132} 133 134TEST_F(GPUInfoCollectorTest, DISABLED_VertexShaderVersionGL) { 135 GPUInfo gpu_info; 136 CollectGraphicsInfoGL(&gpu_info); 137 EXPECT_EQ(test_values_.vertex_shader_version, 138 gpu_info.vertex_shader_version); 139} 140 141TEST_F(GPUInfoCollectorTest, DISABLED_GLVersionGL) { 142 GPUInfo gpu_info; 143 CollectGraphicsInfoGL(&gpu_info); 144 EXPECT_EQ(test_values_.gl_version, gpu_info.gl_version); 145} 146 147TEST_F(GPUInfoCollectorTest, DISABLED_GLRendererGL) { 148 GPUInfo gpu_info; 149 CollectGraphicsInfoGL(&gpu_info); 150 EXPECT_EQ(test_values_.gl_renderer, gpu_info.gl_renderer); 151} 152 153TEST_F(GPUInfoCollectorTest, DISABLED_GLVendorGL) { 154 GPUInfo gpu_info; 155 CollectGraphicsInfoGL(&gpu_info); 156 EXPECT_EQ(test_values_.gl_vendor, gpu_info.gl_vendor); 157} 158 159TEST_F(GPUInfoCollectorTest, DISABLED_GLExtensionsGL) { 160 GPUInfo gpu_info; 161 CollectGraphicsInfoGL(&gpu_info); 162 EXPECT_EQ(test_values_.gl_extensions, gpu_info.gl_extensions); 163} 164 165} // namespace gpu 166 167