chromium/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc

// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifdef UNSAFE_BUFFERS_BUILD
// TODO(crbug.com/342213636): Remove this and spanify to fix the errors.
#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"

// TODO(crbug.com/1293538): The IS_CAST_AUDIO_ONLY check should not need to be
// nested inside of an IS_CASTOS check.
#if BUILDFLAG(IS_CASTOS)
#include "chromecast/chromecast_buildflags.h"  // nogncheck
#if BUILDFLAG(IS_CAST_AUDIO_ONLY)
#define CAST_AUDIO_ONLY
#endif  // BUILDFLAG(IS_CAST_AUDIO_ONLY)
#endif  // BUILDFLAG(IS_CASTOS)

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) {}

}  // namespace

class GpuDataManagerImplPrivateTest : public testing::Test {};

class GpuDataManagerImplPrivateTestP
    : public GpuDataManagerImplPrivateTest,
      public testing::WithParamInterface<gpu::DomainGuilt> {};

// We use new method instead of GetInstance() method because we want
// each test to be independent of each other.

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) {}

// On Mac graphite should fallback to Swiftshader immediately. On other
// platforms graphite should fallback to Ganesh/GL.
TEST_F(GpuDataManagerImplPrivateTest, FallbackFromGraphite) {}

// Android and Chrome OS do not support software compositing, while Fuchsia does
// not support falling back to software from Vulkan.
#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  // !BUILDFLAG(IS_FUCHSIA)

#if !defined(CAST_AUDIO_ONLY)
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithGpuDisabled) {}
#endif  // !defined(CAST_AUDIO_ONLY)
#endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) &&
        // !BUILDFLAG(IS_IOS)

// Chromecast audio-only builds should not launch the GPU process.
#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  // defined(CAST_AUDIO_ONLY)

#if BUILDFLAG(ENABLE_VULKAN)
// TODO(crbug.com/40735511): enable tests when Vulkan is supported on LaCrOS.
#if !BUILDFLAG(IS_CHROMEOS_LACROS)
TEST_F(GpuDataManagerImplPrivateTest, GpuStartsWithVulkanFeatureFlag) {}

// Don't run these tests on Fuchsia, which doesn't support falling back from
// Vulkan.
#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  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) &&
        // !BUILDFLAG(IS_IOS)
#endif  // !BUILDFLAG(IS_FUCHSIA)
#endif  // !IS_CHROMEOS_LACROS
#endif  // BUILDFLAG(ENABLE_VULKAN)

}  // namespace content