15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_info.h" 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_info_collector.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::gfx::MockGLInterface; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace gpu { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GPUInfoCollectorTest : public testing::Test { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GPUInfoCollectorTest() {} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~GPUInfoCollectorTest() { } 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 vendor_id = 0x10de; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 device_id = 0x0658; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_vendor = ""; // not implemented 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_version = ""; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* shader_version = "1.40"; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_renderer = "Quadro FX 380/PCI/SSE2"; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_vendor = "NVIDIA Corporation"; 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* gl_version = "3.1.0"; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_shading_language_version = "1.40 NVIDIA via Cg compiler"; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_extensions = 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_EXT_read_format_bgra"; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 vendor_id = 0x10de; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 device_id = 0x0640; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_vendor = ""; // not implemented 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_version = "1.6.18"; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* shader_version = "1.20"; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine"; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_vendor = "NVIDIA Corporation"; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* gl_version = "2.1 NVIDIA-1.6.18"; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_shading_language_version = "1.20 "; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_extensions = 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_EXT_read_format_bgra"; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // defined (OS_LINUX) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 vendor_id = 0x10de; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 device_id = 0x0658; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_vendor = "NVIDIA"; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* driver_version = "195.36.24"; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* shader_version = "1.50"; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_renderer = "Quadro FX 380/PCI/SSE2"; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_vendor = "NVIDIA Corporation"; 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* gl_version = "3.2.0 NVIDIA 195.36.24"; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_shading_language_version = "1.50 NVIDIA via Cg compiler"; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* gl_extensions = 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 " 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GL_EXT_read_format_bgra"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.gpu.vendor_id = vendor_id; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.gpu.device_id = device_id; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.driver_vendor = driver_vendor; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.driver_version =driver_version; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.pixel_shader_version = shader_version; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.vertex_shader_version = shader_version; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.gl_renderer = gl_renderer; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.gl_vendor = gl_vendor; 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test_values_.gl_version = gl_version; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.gl_extensions = gl_extensions; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_values_.can_lose_context = false; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetString(GL_EXTENSIONS)) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_extensions))); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetString(GL_SHADING_LANGUAGE_VERSION)) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_shading_language_version))); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetString(GL_VERSION)) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gl_version))); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetString(GL_VENDOR)) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_vendor))); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetString(GL_RENDERER)) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<const GLubyte*>( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_renderer))); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() { 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(NULL); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use StrictMock to make 100% sure we know how GL will be called. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo test_values_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(rlp): Test the vendor and device id collection if deemed necessary as 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it involves several complicated mocks for each platform. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(kbr): re-enable these tests; see http://crbug.com/100285 . 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_DriverVendorGL) { 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(test_values_.driver_vendor, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu_info.driver_vendor); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Skip Windows because the driver version is obtained from bot registry. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_WIN) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_DriverVersionGL) { 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(test_values_.driver_version, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu_info.driver_version); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_PixelShaderVersionGL) { 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(test_values_.pixel_shader_version, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu_info.pixel_shader_version); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_VertexShaderVersionGL) { 13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(test_values_.vertex_shader_version, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu_info.vertex_shader_version); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_GLVersionGL) { 14290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(test_values_.gl_version, gpu_info.gl_version); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_GLRendererGL) { 14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(test_values_.gl_renderer, gpu_info.gl_renderer); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_GLVendorGL) { 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(test_values_.gl_vendor, gpu_info.gl_vendor); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GPUInfoCollectorTest, DISABLED_GLExtensionsGL) { 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GPUInfo gpu_info; 16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CollectGraphicsInfoGL(&gpu_info); 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(test_values_.gl_extensions, gpu_info.gl_extensions); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace gpu 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 167