| // Copyright 2021 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "gpu/command_buffer/tests/gl_test_setup_helper.h" | |
| #include "build/build_config.h" | |
| #include "components/viz/test/test_gpu_service_holder.h" | |
| #include "gpu/command_buffer/client/gles2_lib.h" | |
| #include "gpu/command_buffer/tests/gl_test_utils.h" | |
| #include "ui/gl/init/gl_factory.h" | |
| #if BUILDFLAG(IS_OZONE) | |
| #include "ui/ozone/public/ozone_platform.h" | |
| #endif | |
| namespace gpu { | |
| GLTestSetupHelper::GLTestSetupHelper() { | |
| viz::TestGpuServiceHolder::DoNotResetOnTestExit(); | |
| testing::TestEventListeners& listeners = | |
| testing::UnitTest::GetInstance()->listeners(); | |
| listeners.Append(this); | |
| } | |
| GLTestSetupHelper::~GLTestSetupHelper() { | |
| testing::TestEventListeners& listeners = | |
| testing::UnitTest::GetInstance()->listeners(); | |
| CHECK_EQ(this, listeners.Release(this)); | |
| } | |
| void GLTestSetupHelper::OnTestStart(const testing::TestInfo& test_info) { | |
| task_environment_ = std::make_unique<base::test::TaskEnvironment>( | |
| base::test::TaskEnvironment::MainThreadType::UI); | |
| #if BUILDFLAG(IS_OZONE) | |
| // Make Ozone run in single-process mode. | |
| ui::OzonePlatform::InitParams params; | |
| params.single_process = true; | |
| // This initialization must be done after TaskEnvironment has | |
| // initialized the UI thread. | |
| ui::OzonePlatform::InitializeForUI(params); | |
| ui::OzonePlatform::InitializeForGPU(params); | |
| #endif // BUILDFLAG(IS_OZONE) | |
| display_ = gpu::GLTestHelper::InitializeGLDefault(); | |
| ::gles2::Initialize(); | |
| } | |
| void GLTestSetupHelper::OnTestEnd(const testing::TestInfo& test_info) { | |
| // Explicitly tear down the gpu-service (if active) before shutting down GL. | |
| // Otherwise the gpu-service tries to access GL during tear-down and causes | |
| // crashes. | |
| viz::TestGpuServiceHolder::ResetInstance(); | |
| gl::init::ShutdownGL(display_, /*due_to_fallback=*/false); | |
| display_ = nullptr; | |
| task_environment_ = nullptr; | |
| ::gles2::Terminate(); | |
| } | |
| } // namespace gpu |