#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include <stddef.h>
#include "base/command_line.h"
#include "base/run_loop.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "build/chromecast_buildflags.h"
#include "build/chromeos_buildflags.h"
#include "content/browser/gpu/gpu_data_manager_impl_private.h"
#include "content/browser/gpu/gpu_data_manager_testing_autogen.h"
#include "content/browser/gpu/gpu_data_manager_testing_entry_enums_autogen.h"
#include "content/public/browser/gpu_data_manager_observer.h"
#include "content/public/common/content_switches.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/config/gpu_domain_guilt.h"
#include "gpu/config/gpu_feature_type.h"
#include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_switches.h"
#include "gpu/ipc/common/memory_stats.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_CASTOS)
#include "chromecast/chromecast_buildflags.h"
#if BUILDFLAG(IS_CAST_AUDIO_ONLY)
#define CAST_AUDIO_ONLY
#endif
#endif
namespace content {
namespace {
class TestObserver : public GpuDataManagerObserver { … };
static base::Time GetTimeForTesting() { … }
static GURL GetDomain1ForTesting() { … }
static GURL GetDomain1URL1ForTesting() { … }
static GURL GetDomain1URL2ForTesting() { … }
static GURL GetDomain2ForTesting() { … }
static GURL GetDomain3ForTesting() { … }
static GURL GetDomain4ForTesting() { … }
[[maybe_unused]] gpu::GpuFeatureInfo GetGpuFeatureInfoWithOneDisabled(
gpu::GpuFeatureType disabled_feature) { … }
}
class GpuDataManagerImplPrivateTest : public testing::Test { … };
class GpuDataManagerImplPrivateTestP
: public GpuDataManagerImplPrivateTest,
public testing::WithParamInterface<gpu::DomainGuilt> { … };
TEST_F(GpuDataManagerImplPrivateTest, GpuInfoUpdate) { … }
base::Time GpuDataManagerImplPrivateTest::JustBeforeExpiration(
const GpuDataManagerImplPrivate* manager) { … }
base::Time GpuDataManagerImplPrivateTest::JustAfterExpiration(
const GpuDataManagerImplPrivate* manager) { … }
TEST_P(GpuDataManagerImplPrivateTestP, SingleContextLossDoesNotBlockDomain) { … }
TEST_P(GpuDataManagerImplPrivateTestP, TwoContextLossesBlockDomain) { … }
TEST_P(GpuDataManagerImplPrivateTestP,
TwoSimultaneousContextLossesDoNotBlockDomain) { … }
TEST_P(GpuDataManagerImplPrivateTestP, DomainBlockExpires) { … }
TEST_P(GpuDataManagerImplPrivateTestP, UnblockDomain) { … }
TEST_P(GpuDataManagerImplPrivateTestP, Domain1DoesNotBlockDomain2) { … }
TEST_P(GpuDataManagerImplPrivateTestP, UnblockingDomain1DoesNotUnblockDomain2) { … }
TEST_P(GpuDataManagerImplPrivateTestP, SimultaneousContextLossDoesNotBlock) { … }
TEST_P(GpuDataManagerImplPrivateTestP, MultipleTDRsBlockAll) { … }
TEST_P(GpuDataManagerImplPrivateTestP, MultipleTDRsExpire) { … }
TEST_P(GpuDataManagerImplPrivateTestP, MultipleTDRsCanBeUnblocked) { … }
INSTANTIATE_TEST_SUITE_P(…);
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithGraphiteFeatureFlag) { … }
TEST_F(GpuDataManagerImplPrivateTest, FallbackFromGraphite) { … }
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_IOS)
#if !BUILDFLAG(IS_FUCHSIA)
TEST_F(GpuDataManagerImplPrivateTest, FallbackToSwiftShader) { … }
TEST_F(GpuDataManagerImplPrivateTest, FallbackWithSwiftShaderDisabled) { … }
TEST_F(GpuDataManagerImplPrivateTest,
FallbackFromGraphiteWithSwiftShaderDisabled) { … }
#endif
#if !defined(CAST_AUDIO_ONLY)
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithGpuDisabled) { … }
#endif
#endif
#if defined(CAST_AUDIO_ONLY)
TEST_F(GpuDataManagerImplPrivateTest, ChromecastStartsWithGpuDisabled) {
base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kDisableGpu);
ScopedGpuDataManagerImplPrivate manager;
EXPECT_EQ(gpu::GpuMode::DISPLAY_COMPOSITOR, manager->GetGpuMode());
}
#endif
#if BUILDFLAG(ENABLE_VULKAN)
#if !BUILDFLAG(IS_CHROMEOS_LACROS)
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithVulkanFeatureFlag) { … }
#if !BUILDFLAG(IS_FUCHSIA)
TEST_F(GpuDataManagerImplPrivateTest, FallbackFromVulkanToGL) { … }
TEST_F(GpuDataManagerImplPrivateTest, VulkanInitializationFails) { … }
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_IOS)
TEST_F(GpuDataManagerImplPrivateTest, FallbackFromVulkanWithGLDisabled) { … }
#endif
#endif
#endif
#endif
}