#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "content/browser/gpu/gpu_internals_ui.h"
#include <stddef.h>
#include <memory>
#include <string>
#include <utility>
#include "base/base64.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/environment.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/i18n/time_formatting.h"
#include "base/memory/raw_ref.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringize_macros.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/system/sys_info.h"
#include "base/values.h"
#include "build/build_config.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/grit/gpu_resources.h"
#include "content/grit/gpu_resources_map.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/gpu_data_manager_observer.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/url_constants.h"
#include "gpu/config/device_perf_info.h"
#include "gpu/config/gpu_feature_type.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_lists_version.h"
#include "gpu/config/gpu_util.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "skia/ext/skia_commit_hash.h"
#include "third_party/angle/src/common/angle_version_info.h"
#include "third_party/skia/include/core/SkMilestone.h"
#include "ui/base/ozone_buildflags.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
#include "ui/display/util/gpu_info_util.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/buffer_usage_util.h"
#include "ui/gfx/gpu_extra_info.h"
#include "ui/gl/gpu_switching_manager.h"
#if BUILDFLAG(IS_WIN)
#include "ui/gfx/win/physical_size.h"
#endif
#if BUILDFLAG(IS_OZONE)
#include "ui/ozone/public/ozone_platform.h"
#endif
namespace content {
namespace {
void CreateAndAddGpuHTMLSource(BrowserContext* browser_context) { … }
std::string GPUDeviceToString(const gpu::GPUInfo::GPUDevice& gpu) { … }
base::Value::List GetBasicGpuInfo(const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
const gfx::GpuExtraInfo& gpu_extra_info) { … }
base::Value::Dict GetGpuInfo() { … }
base::Value::List CompositorInfo() { … }
base::Value::List GpuMemoryBufferInfo(const gfx::GpuExtraInfo& gpu_extra_info) { … }
base::Value::List GetDisplayInfo() { … }
#if BUILDFLAG(IS_WIN)
const char* D3dFeatureLevelToString(D3D_FEATURE_LEVEL level) {
switch (level) {
case D3D_FEATURE_LEVEL_1_0_CORE:
return "Unknown";
case D3D_FEATURE_LEVEL_9_1:
return "9_1";
case D3D_FEATURE_LEVEL_9_2:
return "9_2";
case D3D_FEATURE_LEVEL_9_3:
return "9_3";
case D3D_FEATURE_LEVEL_10_0:
return "10_0";
case D3D_FEATURE_LEVEL_10_1:
return "10_1";
case D3D_FEATURE_LEVEL_11_0:
return "11_0";
case D3D_FEATURE_LEVEL_11_1:
return "11_1";
case D3D_FEATURE_LEVEL_12_0:
return "12_0";
case D3D_FEATURE_LEVEL_12_1:
return "12_1";
case D3D_FEATURE_LEVEL_12_2:
return "12_2";
default:
NOTREACHED_IN_MIGRATION();
return "";
}
}
const char* HasDiscreteGpuToString(gpu::HasDiscreteGpu has_discrete_gpu) {
switch (has_discrete_gpu) {
case gpu::HasDiscreteGpu::kUnknown:
return "unknown";
case gpu::HasDiscreteGpu::kNo:
return "no";
case gpu::HasDiscreteGpu::kYes:
return "yes";
}
NOTREACHED_IN_MIGRATION();
return "";
}
#endif
base::Value::List GetDevicePerfInfo() { … }
const char* GetProfileName(gpu::VideoCodecProfile profile) { … }
base::Value::List GetVideoAcceleratorsInfo() { … }
base::Value GetANGLEFeatures() { … }
base::Value GetDawnInfo() { … }
class GpuMessageHandler
: public WebUIMessageHandler,
public GpuDataManagerObserver,
public ui::GpuSwitchingObserver { … };
GpuMessageHandler::GpuMessageHandler() = default;
GpuMessageHandler::~GpuMessageHandler() { … }
void GpuMessageHandler::RegisterMessages() { … }
void GpuMessageHandler::OnJavascriptAllowed() { … }
void GpuMessageHandler::OnJavascriptDisallowed() { … }
void GpuMessageHandler::HandleGetClientInfo(const base::Value::List& args) { … }
void GpuMessageHandler::HandleGetLogMessages(const base::Value::List& args) { … }
void GpuMessageHandler::HandleGetGpuInfo(const base::Value::List& args) { … }
base::Value::Dict GpuMessageHandler::GetClientInfo() { … }
base::Value::List GpuMessageHandler::GetLogMessages() { … }
base::Value::Dict GpuMessageHandler::GetGpuInfoDict() { … }
void GpuMessageHandler::OnGpuInfoUpdate() { … }
void GpuMessageHandler::OnGpuSwitched(gl::GpuPreference active_gpu_heuristic) { … }
}
GpuInternalsUI::GpuInternalsUI(WebUI* web_ui)
: … { … }
}