#include "ui/gl/gl_display_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gl {
class GLDisplayManagerEGLTest : public testing::Test {
public:
GLDisplayManagerEGLTest() = default;
~GLDisplayManagerEGLTest() override = default;
protected:
class ScopedGLDisplayManagerEGL {
public:
ScopedGLDisplayManagerEGL() = default;
ScopedGLDisplayManagerEGL(const ScopedGLDisplayManagerEGL&) = delete;
ScopedGLDisplayManagerEGL& operator=(const ScopedGLDisplayManagerEGL&) =
delete;
GLDisplayManagerEGL* operator->() { return &manager_; }
private:
GLDisplayManagerEGL manager_;
};
};
TEST_F(GLDisplayManagerEGLTest, SingleGPU) {
constexpr uint64_t kSingleGpu = 18;
ScopedGLDisplayManagerEGL manager;
manager->SetGpuPreference(GpuPreference::kDefault, kSingleGpu);
GLDisplayEGL* display = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_NE(nullptr, display);
EXPECT_EQ(kSingleGpu, display->system_device_id());
GLDisplayEGL* display_2 = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_EQ(display, display_2);
GLDisplayEGL* display_low_power =
manager->GetDisplay(GpuPreference::kLowPower);
EXPECT_EQ(display, display_low_power);
GLDisplayEGL* display_high_performance =
manager->GetDisplay(GpuPreference::kHighPerformance);
EXPECT_EQ(display, display_high_performance);
}
TEST_F(GLDisplayManagerEGLTest, DualGPUs) {
constexpr uint64_t kIntegratedGpu = 18;
constexpr uint64_t kDiscreteGpu = 76;
constexpr uint64_t kDefaultGpu = kIntegratedGpu;
ScopedGLDisplayManagerEGL manager;
manager->OverrideEGLDualGPURenderingSupportForTests(true);
manager->SetGpuPreference(GpuPreference::kDefault, kDefaultGpu);
manager->SetGpuPreference(GpuPreference::kLowPower, kIntegratedGpu);
manager->SetGpuPreference(GpuPreference::kHighPerformance, kDiscreteGpu);
GLDisplayEGL* display_low_power =
manager->GetDisplay(GpuPreference::kLowPower);
EXPECT_NE(nullptr, display_low_power);
EXPECT_EQ(kIntegratedGpu, display_low_power->system_device_id());
GLDisplayEGL* display_low_power_2 =
manager->GetDisplay(GpuPreference::kLowPower);
EXPECT_EQ(display_low_power, display_low_power_2);
GLDisplayEGL* display_high_performance =
manager->GetDisplay(GpuPreference::kHighPerformance);
EXPECT_NE(nullptr, display_high_performance);
EXPECT_EQ(kDiscreteGpu, display_high_performance->system_device_id());
GLDisplayEGL* display_default = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_EQ(display_low_power, display_default);
}
TEST_F(GLDisplayManagerEGLTest, RemoveDefaultGPU) {
constexpr uint64_t kIntegratedGpu = 18;
constexpr uint64_t kDiscreteGpu = 76;
constexpr uint64_t kDefaultGpu = kIntegratedGpu;
ScopedGLDisplayManagerEGL manager;
manager->OverrideEGLDualGPURenderingSupportForTests(true);
manager->SetGpuPreference(GpuPreference::kDefault, kDefaultGpu);
manager->SetGpuPreference(GpuPreference::kLowPower, kIntegratedGpu);
manager->SetGpuPreference(GpuPreference::kHighPerformance, kDiscreteGpu);
manager->RemoveGpuPreference(GpuPreference::kLowPower);
GLDisplayEGL* display_low_power =
manager->GetDisplay(GpuPreference::kLowPower);
EXPECT_NE(nullptr, display_low_power);
EXPECT_EQ(kDiscreteGpu, display_low_power->system_device_id());
GLDisplayEGL* display_high_performance =
manager->GetDisplay(GpuPreference::kHighPerformance);
EXPECT_NE(nullptr, display_high_performance);
EXPECT_EQ(kDiscreteGpu, display_high_performance->system_device_id());
GLDisplayEGL* display_default = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_EQ(display_high_performance, display_default);
}
TEST_F(GLDisplayManagerEGLTest, RemoveNonDefaultGPU) {
constexpr uint64_t kIntegratedGpu = 18;
constexpr uint64_t kDiscreteGpu = 76;
constexpr uint64_t kDefaultGpu = kIntegratedGpu;
ScopedGLDisplayManagerEGL manager;
manager->OverrideEGLDualGPURenderingSupportForTests(true);
manager->SetGpuPreference(GpuPreference::kDefault, kDefaultGpu);
manager->SetGpuPreference(GpuPreference::kLowPower, kIntegratedGpu);
manager->SetGpuPreference(GpuPreference::kHighPerformance, kDiscreteGpu);
manager->RemoveGpuPreference(GpuPreference::kHighPerformance);
GLDisplayEGL* display_low_power =
manager->GetDisplay(GpuPreference::kLowPower);
EXPECT_NE(nullptr, display_low_power);
EXPECT_EQ(kIntegratedGpu, display_low_power->system_device_id());
GLDisplayEGL* display_high_performance =
manager->GetDisplay(GpuPreference::kHighPerformance);
EXPECT_NE(nullptr, display_high_performance);
EXPECT_EQ(kIntegratedGpu, display_high_performance->system_device_id());
GLDisplayEGL* display_default = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_EQ(display_low_power, display_default);
}
TEST_F(GLDisplayManagerEGLTest, NoSetUp) {
ScopedGLDisplayManagerEGL manager;
GLDisplayEGL* display = manager->GetDisplay(GpuPreference::kDefault);
EXPECT_NE(nullptr, display);
EXPECT_EQ(0u, display->system_device_id());
}
}