Index: ui/gl/test/egl_initialization_displays_unittest.cc |
diff --git a/ui/gl/test/egl_initialization_displays_unittest.cc b/ui/gl/test/egl_initialization_displays_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ddee20c5898a207a17146733c219e8a68cb5fa37 |
--- /dev/null |
+++ b/ui/gl/test/egl_initialization_displays_unittest.cc |
@@ -0,0 +1,133 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/gl/gl_surface_egl.h" |
+ |
+namespace { |
+ |
+TEST(EGLInitializationDisplaysTest, DisableD3D11) { |
+ scoped_ptr<base::CommandLine> command_line( |
+ new base::CommandLine(base::CommandLine::NO_PROGRAM)); |
+ |
+ std::vector<gfx::DisplayType> displays; |
+ |
+ // using --disable-d3d11 with the default --use-angle should never return |
+ // D3D11. |
+ command_line->AppendSwitch(switches::kDisableD3D11); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_EQ(std::find(displays.begin(), displays.end(), gfx::ANGLE_D3D11), |
+ displays.end()); |
+ |
+ // Specifically requesting D3D11 should always return it if the extension is |
+ // available |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationD3D11Name); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::ANGLE_D3D11), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+ |
+ // Specifically requesting D3D11 should not return D3D11 if the extension is |
+ // not available |
+ displays.clear(); |
+ GetEGLInitDisplays(false, true, command_line.get(), &displays); |
+ EXPECT_EQ(std::find(displays.begin(), displays.end(), gfx::ANGLE_D3D11), |
+ displays.end()); |
+} |
+ |
+TEST(EGLInitializationDisplaysTest, SwiftShader) { |
+ scoped_ptr<base::CommandLine> command_line( |
+ new base::CommandLine(base::CommandLine::NO_PROGRAM)); |
+ |
+ std::vector<gfx::DisplayType> displays; |
+ |
+ // If swiftshader is requested, only SWIFT_SHADER should be returned |
+ command_line->AppendSwitchASCII(switches::kUseGL, |
+ gfx::kGLImplementationSwiftShaderName); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::SWIFT_SHADER), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+ |
+ // Even if there are other flags, swiftshader should take prescedence |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationD3D11Name); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::SWIFT_SHADER), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+} |
+ |
+TEST(EGLInitializationDisplaysTest, DefaultRenderers) { |
+ scoped_ptr<base::CommandLine> command_line( |
+ new base::CommandLine(base::CommandLine::NO_PROGRAM)); |
+ |
+ // Default without --use-angle flag |
+ std::vector<gfx::DisplayType> default_no_flag_displays; |
+ GetEGLInitDisplays(true, true, command_line.get(), &default_no_flag_displays); |
+ EXPECT_FALSE(default_no_flag_displays.empty()); |
+ |
+ // Default with --use-angle flag |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationDefaultName); |
+ std::vector<gfx::DisplayType> default_with_flag_displays; |
+ GetEGLInitDisplays(true, true, command_line.get(), |
+ &default_with_flag_displays); |
+ EXPECT_FALSE(default_with_flag_displays.empty()); |
+ |
+ // Make sure the same results are returned |
+ EXPECT_EQ(default_no_flag_displays, default_with_flag_displays); |
+} |
+ |
+TEST(EGLInitializationDisplaysTest, NonDefaultRenderers) { |
+ scoped_ptr<base::CommandLine> command_line( |
+ new base::CommandLine(base::CommandLine::NO_PROGRAM)); |
+ |
+ std::vector<gfx::DisplayType> displays; |
+ |
+ // WARP |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationWARPName); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::ANGLE_WARP), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+ |
+ // OpenGL |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationOpenGLName); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::ANGLE_OPENGL), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+ |
+ // OpenGLES |
+ command_line->AppendSwitchASCII(switches::kUseANGLE, |
+ gfx::kANGLEImplementationOpenGLESName); |
+ displays.clear(); |
+ GetEGLInitDisplays(true, true, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::ANGLE_OPENGLES), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+} |
+ |
+TEST(EGLInitializationDisplaysTest, NoExtensions) { |
+ scoped_ptr<base::CommandLine> command_line( |
+ new base::CommandLine(base::CommandLine::NO_PROGRAM)); |
+ |
+ // With no angle platform extensions, only DEFAULT should be available |
+ std::vector<gfx::DisplayType> displays; |
+ GetEGLInitDisplays(false, false, command_line.get(), &displays); |
+ EXPECT_NE(std::find(displays.begin(), displays.end(), gfx::DEFAULT), |
+ displays.end()); |
+ EXPECT_EQ(displays.size(), 1u); |
+} |
+ |
+} // namespace |