Skip to content

Commit

Permalink
[ozone] Extracted gpu::GpuExtraInfo so it can be used by Ozone.
Browse files Browse the repository at this point in the history
The GPU info and config code has platform-specific bits which makes them
impossible to use when Ozone is enabled.  Platform-specific code must be
in the platform.

However, for the code in //gpu/config moving it down to platform code is
problematic because of internal non-trivial types used in the component.
For instance, gpu::GpuExtraInfo has some attributes defined only for X11
that should be handled at the platform level.  However, currently giving
it to the platform requires the platform to depend on //gpu/config which
creates a dependency cycle.

Here the gpu::GpuExtraInfo class is extracted into its own component, so
external code can now use it.

Bug: 1121945
Change-Id: I4ad166b43313d7e33e8e9f80e147a29b6eef5d88
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2478362
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Alexander Dunaev <adunaev@igalia.com>
Cr-Commit-Position: refs/heads/master@{#820289}
  • Loading branch information
alex-voodoo authored and Commit Bot committed Oct 23, 2020
1 parent 749ce8d commit e6e09c1
Show file tree
Hide file tree
Showing 40 changed files with 281 additions and 186 deletions.
3 changes: 1 addition & 2 deletions components/viz/host/gpu_host_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include "build/build_config.h"
#include "components/viz/common/features.h"
#include "gpu/config/gpu_driver_bug_workaround_type.h"
#include "gpu/config/gpu_extra_info.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_info.h"
Expand Down Expand Up @@ -409,7 +408,7 @@ void GpuHostImpl::DidInitialize(
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
UMA_HISTOGRAM_BOOLEAN("GPU.GPUProcessInitialized", true);

// Set GPU driver bug workaround flags that are checked on the browser side.
Expand Down
6 changes: 3 additions & 3 deletions components/viz/host/gpu_host_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "components/viz/host/viz_host_export.h"
#include "gpu/command_buffer/common/activity_flags.h"
#include "gpu/config/gpu_domain_guilt.h"
#include "gpu/config/gpu_extra_info.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
Expand All @@ -38,6 +37,7 @@
#include "services/viz/privileged/mojom/gl/gpu_host.mojom.h"
#include "services/viz/privileged/mojom/gl/gpu_service.mojom.h"
#include "services/viz/privileged/mojom/viz_main.mojom.h"
#include "ui/gfx/gpu_extra_info.h"
#include "url/gurl.h"

#if defined(OS_WIN)
Expand Down Expand Up @@ -67,7 +67,7 @@ class VIZ_HOST_EXPORT GpuHostImpl : public mojom::GpuHost {
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info) = 0;
const gfx::GpuExtraInfo& gpu_extra_info) = 0;
virtual void DidFailInitialize() = 0;
virtual void DidCreateContextSuccessfully() = 0;
virtual void MaybeShutdownGpuProcess() = 0;
Expand Down Expand Up @@ -220,7 +220,7 @@ class VIZ_HOST_EXPORT GpuHostImpl : public mojom::GpuHost {
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info) override;
const gfx::GpuExtraInfo& gpu_extra_info) override;
void DidFailInitialize() override;
void DidCreateContextSuccessfully() override;
void DidCreateOffscreenContext(const GURL& url) override;
Expand Down
2 changes: 1 addition & 1 deletion components/viz/service/gl/gpu_service_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ GpuServiceImpl::GpuServiceImpl(
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info,
const gfx::GpuExtraInfo& gpu_extra_info,
gpu::VulkanImplementation* vulkan_implementation,
base::OnceCallback<void(base::Optional<ExitCode>)> exit_callback)
: main_runner_(base::ThreadTaskRunnerHandle::Get()),
Expand Down
6 changes: 3 additions & 3 deletions components/viz/service/gl/gpu_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
#include "gpu/command_buffer/common/activity_flags.h"
#include "gpu/command_buffer/service/sequence_id.h"
#include "gpu/config/gpu_extra_info.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_preferences.h"
#include "gpu/ipc/common/surface_handle.h"
Expand All @@ -41,6 +40,7 @@
#include "services/viz/privileged/mojom/gl/gpu_service.mojom.h"
#include "skia/buildflags.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "ui/gfx/gpu_extra_info.h"
#include "ui/gfx/native_widget_types.h"

#if defined(OS_CHROMEOS)
Expand Down Expand Up @@ -95,7 +95,7 @@ class VIZ_SERVICE_EXPORT GpuServiceImpl : public gpu::GpuChannelManagerDelegate,
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info,
const gfx::GpuExtraInfo& gpu_extra_info,
gpu::VulkanImplementation* vulkan_implementation,
base::OnceCallback<void(base::Optional<ExitCode>)> exit_callback);

Expand Down Expand Up @@ -372,7 +372,7 @@ class VIZ_SERVICE_EXPORT GpuServiceImpl : public gpu::GpuChannelManagerDelegate,
base::Optional<gpu::GpuFeatureInfo> gpu_feature_info_for_hardware_gpu_;

// Information about the GPU process populated on creation.
gpu::GpuExtraInfo gpu_extra_info_;
gfx::GpuExtraInfo gpu_extra_info_;

mojo::SharedRemote<mojom::GpuHost> gpu_host_;
std::unique_ptr<gpu::GpuChannelManager> gpu_channel_manager_;
Expand Down
3 changes: 2 additions & 1 deletion components/viz/service/gl/gpu_service_impl_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "components/viz/service/gl/gpu_service_impl.h"

#include <memory>
#include <utility>

#include "base/bind.h"
#include "base/bind_helpers.h"
Expand Down Expand Up @@ -72,7 +73,7 @@ class GpuServiceTest : public testing::Test {
gpu_service_ = std::make_unique<GpuServiceImpl>(
gpu_info, /*watchdog_thread=*/nullptr, io_thread_.task_runner(),
gpu::GpuFeatureInfo(), gpu::GpuPreferences(), gpu::GPUInfo(),
gpu::GpuFeatureInfo(), gpu::GpuExtraInfo(),
gpu::GpuFeatureInfo(), gfx::GpuExtraInfo(),
/*vulkan_implementation=*/nullptr,
/*exit_callback=*/base::DoNothing());
}
Expand Down
2 changes: 1 addition & 1 deletion components/viz/test/test_gpu_service_holder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ void TestGpuServiceHolder::InitializeOnGpuThread(
gpu_feature_info, gpu_preferences,
/*gpu_info_for_hardware_gpu=*/gpu::GPUInfo(),
/*gpu_feature_info_for_hardware_gpu=*/gpu::GpuFeatureInfo(),
/*gpu_extra_info=*/gpu::GpuExtraInfo(),
/*gpu_extra_info=*/gfx::GpuExtraInfo(),
#if BUILDFLAG(ENABLE_VULKAN)
vulkan_implementation_.get(),
#else
Expand Down
4 changes: 4 additions & 0 deletions content/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -2093,6 +2093,10 @@ source_set("browser") {
deps += [ "//ui/events" ]
}

if (use_x11) {
deps += [ "//ui/base/x" ]
}

if (is_linux || is_chromeos) {
sources += [
"child_process_launcher_helper_linux.cc",
Expand Down
2 changes: 1 addition & 1 deletion content/browser/browser_main_loop.cc
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ class GpuDataManagerVisualProxy : public GpuDataManagerObserver {
private:
void OnUpdate() {
gpu::GPUInfo gpu_info = gpu_data_manager_->GetGPUInfo();
gpu::GpuExtraInfo gpu_extra_info = gpu_data_manager_->GetGpuExtraInfo();
gfx::GpuExtraInfo gpu_extra_info = gpu_data_manager_->GetGpuExtraInfo();
if (!ui::XVisualManager::GetInstance()->OnGPUInfoChanged(
gpu_info.software_rendering ||
!gpu_data_manager_->GpuAccessAllowed(nullptr),
Expand Down
4 changes: 2 additions & 2 deletions content/browser/gpu/gpu_data_manager_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ void GpuDataManagerImpl::UpdateGpuFeatureInfo(
}

void GpuDataManagerImpl::UpdateGpuExtraInfo(
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
base::AutoLock auto_lock(lock_);
private_->UpdateGpuExtraInfo(gpu_extra_info);
}
Expand All @@ -262,7 +262,7 @@ gpu::GpuFeatureInfo GpuDataManagerImpl::GetGpuFeatureInfoForHardwareGpu()
return private_->GetGpuFeatureInfoForHardwareGpu();
}

gpu::GpuExtraInfo GpuDataManagerImpl::GetGpuExtraInfo() const {
gfx::GpuExtraInfo GpuDataManagerImpl::GetGpuExtraInfo() const {
base::AutoLock auto_lock(lock_);
return private_->GetGpuExtraInfo();
}
Expand Down
6 changes: 3 additions & 3 deletions content/browser/gpu/gpu_data_manager_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@
#include "gpu/config/device_perf_info.h"
#include "gpu/config/gpu_control_list.h"
#include "gpu/config/gpu_domain_guilt.h"
#include "gpu/config/gpu_extra_info.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_mode.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "third_party/blink/public/mojom/gpu/gpu.mojom.h"
#include "ui/display/display_observer.h"
#include "ui/gfx/gpu_extra_info.h"

class GURL;

Expand Down Expand Up @@ -103,14 +103,14 @@ class CONTENT_EXPORT GpuDataManagerImpl : public GpuDataManager,
void UpdateGpuFeatureInfo(const gpu::GpuFeatureInfo& gpu_feature_info,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu);
void UpdateGpuExtraInfo(const gpu::GpuExtraInfo& gpu_extra_info);
void UpdateGpuExtraInfo(const gfx::GpuExtraInfo& gpu_extra_info);

gpu::GpuFeatureInfo GetGpuFeatureInfo() const;

gpu::GPUInfo GetGPUInfoForHardwareGpu() const;
gpu::GpuFeatureInfo GetGpuFeatureInfoForHardwareGpu() const;

gpu::GpuExtraInfo GetGpuExtraInfo() const;
gfx::GpuExtraInfo GetGpuExtraInfo() const;

bool IsGpuCompositingDisabled() const;

Expand Down
4 changes: 2 additions & 2 deletions content/browser/gpu/gpu_data_manager_impl_private.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ void GpuDataManagerImplPrivate::UpdateGpuFeatureInfo(
}

void GpuDataManagerImplPrivate::UpdateGpuExtraInfo(
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
gpu_extra_info_ = gpu_extra_info;
observer_list_->Notify(FROM_HERE,
&GpuDataManagerObserver::OnGpuExtraInfoUpdate);
Expand All @@ -1083,7 +1083,7 @@ gpu::GpuFeatureInfo GpuDataManagerImplPrivate::GetGpuFeatureInfoForHardwareGpu()
return gpu_feature_info_for_hardware_gpu_;
}

gpu::GpuExtraInfo GpuDataManagerImplPrivate::GetGpuExtraInfo() const {
gfx::GpuExtraInfo GpuDataManagerImplPrivate::GetGpuExtraInfo() const {
return gpu_extra_info_;
}

Expand Down
6 changes: 3 additions & 3 deletions content/browser/gpu/gpu_data_manager_impl_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
void UpdateGpuFeatureInfo(const gpu::GpuFeatureInfo& gpu_feature_info,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu);
void UpdateGpuExtraInfo(const gpu::GpuExtraInfo& process_info);
void UpdateGpuExtraInfo(const gfx::GpuExtraInfo& process_info);

gpu::GpuFeatureInfo GetGpuFeatureInfo() const;
gpu::GpuFeatureInfo GetGpuFeatureInfoForHardwareGpu() const;
gpu::GpuExtraInfo GetGpuExtraInfo() const;
gfx::GpuExtraInfo GetGpuExtraInfo() const;

bool IsGpuCompositingDisabled() const;

Expand Down Expand Up @@ -221,7 +221,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
gpu::GpuFeatureInfo gpu_feature_info_for_hardware_gpu_;
gpu::GPUInfo gpu_info_for_hardware_gpu_;

gpu::GpuExtraInfo gpu_extra_info_;
gfx::GpuExtraInfo gpu_extra_info_;

const scoped_refptr<GpuDataManagerObserverList> observer_list_;

Expand Down
69 changes: 38 additions & 31 deletions content/browser/gpu/gpu_internals_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
#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_extra_info.h"
#include "gpu/config/gpu_feature_type.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_lists_version.h"
Expand All @@ -55,6 +54,7 @@
#include "ui/display/screen.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 defined(OS_WIN)
Expand All @@ -63,11 +63,14 @@
#endif

#if defined(USE_X11)
#include "ui/base/ui_base_features.h"
#include "ui/base/x/x11_util.h" // nogncheck
#include "ui/gfx/x/x11_atom_cache.h" // nogncheck
#endif

#if defined(USE_OZONE)
#include "ui/base/ui_base_features.h"
#endif

namespace content {
namespace {

Expand All @@ -88,6 +91,7 @@ WebUIDataSource* CreateGpuHTMLSource() {
return source;
}

// Must be in sync with the copy in //ui/base/x/x11_util.cc.
std::unique_ptr<base::DictionaryValue> NewDescriptionValuePair(
base::StringPiece desc,
base::StringPiece value) {
Expand Down Expand Up @@ -151,10 +155,23 @@ std::string GPUDeviceToString(const gpu::GPUInfo::GPUDevice& gpu) {
return rt;
}

base::Value GetGpuInfoLines(const gfx::GpuExtraInfo& gpu_extra_info) {
base::Value gpu_info_lines(base::Value::Type::LIST);
#if defined(USE_OZONE)
if (features::IsUsingOzonePlatform())
return display::Screen::GetScreen()->GetGpuInfo(gpu_extra_info);
#endif
#if defined(USE_X11)
gpu_info_lines = ui::GpuExtraInfoAsListValue(gpu_extra_info.system_visual,
gpu_extra_info.rgba_visual);
#endif
return gpu_info_lines;
}

std::unique_ptr<base::ListValue> BasicGpuInfoAsListValue(
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
const gpu::GPUInfo::GPUDevice& active_gpu = gpu_info.active_gpu();
auto basic_info = std::make_unique<base::ListValue>();
basic_info->Append(NewDescriptionValuePair(
Expand Down Expand Up @@ -265,31 +282,21 @@ std::unique_ptr<base::ListValue> BasicGpuInfoAsListValue(
gpu_info.gl_ws_version));
basic_info->Append(NewDescriptionValuePair("Window system binding extensions",
gpu_info.gl_ws_extensions));
#if defined(USE_X11)
// TODO(https://crbug.com/1097007): capture window manager name on Ozone.
if (!features::IsUsingOzonePlatform()) {
basic_info->Append(NewDescriptionValuePair("Window manager",
ui::GuessWindowManagerName()));
{
std::unique_ptr<base::Environment> env(base::Environment::Create());
std::string value;
const char kXDGCurrentDesktop[] = "XDG_CURRENT_DESKTOP";
if (env->GetVar(kXDGCurrentDesktop, &value))
basic_info->Append(NewDescriptionValuePair(kXDGCurrentDesktop, value));
const char kGDMSession[] = "GDMSESSION";
if (env->GetVar(kGDMSession, &value))
basic_info->Append(NewDescriptionValuePair(kGDMSession, value));
basic_info->Append(NewDescriptionValuePair(
"Compositing manager",
ui::IsCompositingManagerPresent() ? "Yes" : "No"));

base::Value gpu_info_lines = GetGpuInfoLines(gpu_extra_info);
DCHECK(gpu_info_lines.is_list());
{
auto pairs = gpu_info_lines.TakeList();
for (auto& pair : pairs) {
if (pair.FindStringKey("description") == nullptr ||
pair.FindKey("value") == nullptr) {
LOG(WARNING) << "Unexpected item format: should have a string "
"description and a value.";
}
basic_info->Append(std::move(pair));
}
basic_info->Append(NewDescriptionValuePair(
"System visual ID",
base::NumberToString(gpu_extra_info.system_visual)));
basic_info->Append(NewDescriptionValuePair(
"RGBA visual ID", base::NumberToString(gpu_extra_info.rgba_visual)));
}
#endif

std::string direct_rendering_version;
if (gpu_info.direct_rendering_version == "1") {
direct_rendering_version = "indirect";
Expand Down Expand Up @@ -339,7 +346,7 @@ std::unique_ptr<base::DictionaryValue> GpuInfoAsDictionaryValue() {
const gpu::GPUInfo gpu_info = GpuDataManagerImpl::GetInstance()->GetGPUInfo();
const gpu::GpuFeatureInfo gpu_feature_info =
GpuDataManagerImpl::GetInstance()->GetGpuFeatureInfo();
const gpu::GpuExtraInfo gpu_extra_info =
const gfx::GpuExtraInfo gpu_extra_info =
GpuDataManagerImpl::GetInstance()->GetGpuExtraInfo();
auto basic_info =
BasicGpuInfoAsListValue(gpu_info, gpu_feature_info, gpu_extra_info);
Expand Down Expand Up @@ -375,7 +382,7 @@ std::unique_ptr<base::ListValue> CompositorInfo() {
}

std::unique_ptr<base::ListValue> GpuMemoryBufferInfo(
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
auto gpu_memory_buffer_info = std::make_unique<base::ListValue>();

gpu::GpuMemoryBufferSupport gpu_memory_buffer_support;
Expand Down Expand Up @@ -642,7 +649,7 @@ std::unique_ptr<base::ListValue> GetVideoAcceleratorsInfo() {
}

std::unique_ptr<base::ListValue> GetANGLEFeatures() {
gpu::GpuExtraInfo gpu_extra_info =
gfx::GpuExtraInfo gpu_extra_info =
GpuDataManagerImpl::GetInstance()->GetGpuExtraInfo();
auto angle_features_list = std::make_unique<base::ListValue>();
for (const auto& feature : gpu_extra_info.angle_features) {
Expand Down Expand Up @@ -820,7 +827,7 @@ std::unique_ptr<base::ListValue> GpuMessageHandler::OnRequestLogMessages(
void GpuMessageHandler::OnGpuInfoUpdate() {
// Get GPU Info.
const gpu::GPUInfo gpu_info = GpuDataManagerImpl::GetInstance()->GetGPUInfo();
const gpu::GpuExtraInfo gpu_extra_info =
const gfx::GpuExtraInfo gpu_extra_info =
GpuDataManagerImpl::GetInstance()->GetGpuExtraInfo();
auto gpu_info_val = GpuInfoAsDictionaryValue();

Expand Down Expand Up @@ -853,7 +860,7 @@ void GpuMessageHandler::OnGpuInfoUpdate() {
GpuDataManagerImpl::GetInstance()->GetGpuFeatureInfoForHardwareGpu();
auto gpu_info_for_hardware_gpu_val = BasicGpuInfoAsListValue(
gpu_info_for_hardware_gpu, gpu_feature_info_for_hardware_gpu,
gpu::GpuExtraInfo{});
gfx::GpuExtraInfo{});
gpu_info_val->Set("basicInfoForHardwareGpu",
std::move(gpu_info_for_hardware_gpu_val));
}
Expand Down
2 changes: 1 addition & 1 deletion content/browser/gpu/gpu_process_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -988,7 +988,7 @@ void GpuProcessHost::DidInitialize(
const base::Optional<gpu::GPUInfo>& gpu_info_for_hardware_gpu,
const base::Optional<gpu::GpuFeatureInfo>&
gpu_feature_info_for_hardware_gpu,
const gpu::GpuExtraInfo& gpu_extra_info) {
const gfx::GpuExtraInfo& gpu_extra_info) {
if (GetGpuCrashCount() > 0) {
LOG(WARNING) << "Reinitialized the GPU process after a crash. The reported "
"initialization time was "
Expand Down
Loading

0 comments on commit e6e09c1

Please sign in to comment.