summaryrefslogtreecommitdiff
path: root/chromium/content/gpu
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-03 13:42:47 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-15 10:27:51 +0000
commit8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (patch)
treed29d987c4d7b173cf853279b79a51598f104b403 /chromium/content/gpu
parent830c9e163d31a9180fadca926b3e1d7dfffb5021 (diff)
downloadqtwebengine-chromium-8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec.tar.gz
BASELINE: Update Chromium to 66.0.3359.156
Change-Id: I0c9831ad39911a086b6377b16f995ad75a51e441 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/content/gpu')
-rw-r--r--chromium/content/gpu/BUILD.gn11
-rw-r--r--chromium/content/gpu/gpu_child_thread.cc22
-rw-r--r--chromium/content/gpu/gpu_child_thread.h2
-rw-r--r--chromium/content/gpu/gpu_main.cc24
-rw-r--r--chromium/content/gpu/gpu_sandbox_hook_linux.cc78
-rw-r--r--chromium/content/gpu/gpu_service_factory.cc2
-rw-r--r--chromium/content/gpu/in_process_gpu_thread.cc13
7 files changed, 57 insertions, 95 deletions
diff --git a/chromium/content/gpu/BUILD.gn b/chromium/content/gpu/BUILD.gn
index 4c50c537184..5504b503440 100644
--- a/chromium/content/gpu/BUILD.gn
+++ b/chromium/content/gpu/BUILD.gn
@@ -77,9 +77,9 @@ target(link_target_type, "gpu_sources") {
"//media/gpu/ipc/service",
"//media/mojo/clients:clients",
"//services/service_manager/public/cpp",
- "//services/service_manager/public/interfaces",
+ "//services/service_manager/public/mojom",
"//services/shape_detection:lib",
- "//services/shape_detection/public/interfaces",
+ "//services/shape_detection/public/mojom",
"//services/viz/privileged/interfaces",
"//skia",
"//third_party/angle:angle_gpu_info_util",
@@ -106,6 +106,10 @@ target(link_target_type, "gpu_sources") {
deps += [ "//sandbox" ]
}
+ if (is_linux || is_mac) {
+ deps += [ "//sandbox" ]
+ }
+
if (use_x11) {
deps += [
"//ui/events/platform/x11",
@@ -122,7 +126,8 @@ target(link_target_type, "gpu_sources") {
}
# Use DRI on desktop Linux builds.
- if (is_desktop_linux && (!is_chromecast || is_cast_desktop_build)) {
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+ (!is_chromecast || is_cast_desktop_build)) {
configs += [ "//build/config/linux/dri" ]
}
}
diff --git a/chromium/content/gpu/gpu_child_thread.cc b/chromium/content/gpu/gpu_child_thread.cc
index a03f236d313..880b387d411 100644
--- a/chromium/content/gpu/gpu_child_thread.cc
+++ b/chromium/content/gpu/gpu_child_thread.cc
@@ -33,6 +33,7 @@
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/viz/privileged/interfaces/gl/gpu_service.mojom.h"
+#include "skia/ext/event_tracer_impl.h"
#if defined(USE_OZONE)
#include "ui/ozone/public/ozone_platform.h"
@@ -86,6 +87,13 @@ class QueueingConnectionFilter : public ConnectionFilter {
weak_factory_.GetWeakPtr()));
}
+ void AddInterfaces() {
+#if defined(USE_OZONE)
+ ui::OzonePlatform::GetInstance()->AddInterfaces(
+ &registry_with_source_info_);
+#endif
+ }
+
private:
struct PendingRequest {
std::string interface_name;
@@ -98,6 +106,11 @@ class QueueingConnectionFilter : public ConnectionFilter {
mojo::ScopedMessagePipeHandle* interface_pipe,
service_manager::Connector* connector) override {
DCHECK(io_thread_checker_.CalledOnValidThread());
+ if (registry_with_source_info_.TryBindInterface(
+ interface_name, interface_pipe, source_info)) {
+ return;
+ }
+
if (registry_->CanBindInterface(interface_name)) {
if (released_) {
registry_->BindInterface(interface_name, std::move(*interface_pipe));
@@ -125,6 +138,9 @@ class QueueingConnectionFilter : public ConnectionFilter {
bool released_ = false;
std::vector<std::unique_ptr<PendingRequest>> pending_requests_;
std::unique_ptr<service_manager::BinderRegistry> registry_;
+ service_manager::BinderRegistryWithArgs<
+ const service_manager::BindSourceInfo&>
+ registry_with_source_info_;
base::WeakPtrFactory<QueueingConnectionFilter> weak_factory_;
@@ -177,7 +193,7 @@ GpuChildThread::GpuChildThread(const ChildThreadImpl::Options& options,
}
}
-GpuChildThread::~GpuChildThread() {}
+GpuChildThread::~GpuChildThread() = default;
void GpuChildThread::Init(const base::Time& process_start_time) {
viz_main_.gpu_service()->set_start_time(process_start_time);
@@ -207,9 +223,13 @@ void GpuChildThread::Init(const base::Time& process_start_time) {
std::make_unique<QueueingConnectionFilter>(GetIOTaskRunner(),
std::move(registry));
release_pending_requests_closure_ = filter->GetReleaseCallback();
+
+ filter->AddInterfaces();
GetServiceManagerConnection()->AddConnectionFilter(std::move(filter));
StartServiceManagerConnection();
+
+ InitSkiaEventTracer();
}
void GpuChildThread::CreateVizMainService(
diff --git a/chromium/content/gpu/gpu_child_thread.h b/chromium/content/gpu/gpu_child_thread.h
index 0af7c2a580e..b848b2d32c7 100644
--- a/chromium/content/gpu/gpu_child_thread.h
+++ b/chromium/content/gpu/gpu_child_thread.h
@@ -34,7 +34,7 @@
#include "mojo/public/cpp/bindings/associated_binding_set.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/service_manager/public/cpp/service_context_ref.h"
-#include "services/service_manager/public/interfaces/service_factory.mojom.h"
+#include "services/service_manager/public/mojom/service_factory.mojom.h"
#include "services/viz/privileged/interfaces/viz_main.mojom.h"
#include "ui/gfx/native_widget_types.h"
diff --git a/chromium/content/gpu/gpu_main.cc b/chromium/content/gpu/gpu_main.cc
index f701f23b2c7..115f871094b 100644
--- a/chromium/content/gpu/gpu_main.cc
+++ b/chromium/content/gpu/gpu_main.cc
@@ -30,6 +30,7 @@
#include "content/public/common/content_switches.h"
#include "content/public/common/main_function_params.h"
#include "content/public/common/result_codes.h"
+#include "content/public/gpu/content_gpu_client.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/config/gpu_driver_bug_list.h"
#include "gpu/config/gpu_info_collector.h"
@@ -65,8 +66,8 @@
#if defined(OS_WIN)
#include "base/win/scoped_com_initializer.h"
#include "base/win/windows_version.h"
-#include "media/gpu/dxva_video_decode_accelerator_win.h"
-#include "media/gpu/media_foundation_video_encode_accelerator_win.h"
+#include "media/gpu/windows/dxva_video_decode_accelerator_win.h"
+#include "media/gpu/windows/media_foundation_video_encode_accelerator_win.h"
#include "sandbox/win/src/sandbox.h"
#endif
@@ -87,6 +88,7 @@
#if defined(OS_MACOSX)
#include "base/message_loop/message_pump_mac.h"
+#include "sandbox/mac/seatbelt.h"
#include "services/service_manager/sandbox/mac/sandbox_mac.h"
#endif
@@ -98,6 +100,14 @@
#include "media/gpu/vaapi/vaapi_wrapper.h"
#endif
+#if defined(OS_MACOSX)
+extern "C" {
+void _LSSetApplicationLaunchServicesServerConnectionStatus(
+ uint64_t flags,
+ bool (^connection_allowed)(CFDictionaryRef));
+};
+#endif // defined(OS_MACOSX)
+
namespace content {
namespace {
@@ -168,7 +178,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHelper {
#elif defined(OS_WIN)
return StartSandboxWindows(sandbox_info_);
#elif defined(OS_MACOSX)
- return service_manager::SandboxMac::IsCurrentlyActive();
+ return sandbox::Seatbelt::IsSandboxed();
#else
return false;
#endif
@@ -265,6 +275,9 @@ int GpuMain(const MainFunctionParams& parameters) {
// https://crbug.com/312462#c51 and https://crbug.com/783298
std::unique_ptr<base::MessagePump> pump(new base::MessagePumpNSRunLoop());
main_message_loop.reset(new base::MessageLoop(std::move(pump)));
+
+ // Tell LaunchServices to continue without a connection to the daemon.
+ _LSSetApplicationLaunchServicesServerConnectionStatus(0, nullptr);
#else
main_message_loop.reset(
new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT));
@@ -307,6 +320,11 @@ int GpuMain(const MainFunctionParams& parameters) {
#endif
GpuProcess gpu_process(io_thread_priority);
+
+ auto* client = GetContentClient()->gpu();
+ if (client)
+ client->PostIOThreadCreated(gpu_process.io_task_runner());
+
GpuChildThread* child_thread = new GpuChildThread(
std::move(gpu_init), std::move(deferred_messages.Get()));
deferred_messages.Get().clear();
diff --git a/chromium/content/gpu/gpu_sandbox_hook_linux.cc b/chromium/content/gpu/gpu_sandbox_hook_linux.cc
index e69e23ebebb..4713f522325 100644
--- a/chromium/content/gpu/gpu_sandbox_hook_linux.cc
+++ b/chromium/content/gpu/gpu_sandbox_hook_linux.cc
@@ -29,10 +29,6 @@
#include "services/service_manager/sandbox/linux/bpf_gpu_policy_linux.h"
#include "services/service_manager/sandbox/linux/sandbox_linux.h"
-#if BUILDFLAG(USE_VAAPI)
-#include <va/va_version.h>
-#endif
-
using sandbox::bpf_dsl::Policy;
using sandbox::syscall_broker::BrokerFilePermission;
using sandbox::syscall_broker::BrokerProcess;
@@ -48,22 +44,6 @@ inline bool IsChromeOS() {
#endif
}
-inline bool IsArchitectureX86_64() {
-#if defined(__x86_64__)
- return true;
-#else
- return false;
-#endif
-}
-
-inline bool IsArchitectureI386() {
-#if defined(__i386__)
- return true;
-#else
- return false;
-#endif
-}
-
inline bool IsArchitectureArm() {
#if defined(ARCH_CPU_ARM_FAMILY)
return true;
@@ -88,14 +68,6 @@ inline bool UseLibV4L2() {
#endif
}
-inline bool IsLibVAVersion2() {
-#if BUILDFLAG(USE_VAAPI) && VA_MAJOR_VERSION == 1
- return true;
-#else
- return false;
-#endif
-}
-
constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
void AddV4L2GpuWhitelist(
@@ -181,6 +153,7 @@ void AddStandardGpuWhiteList(std::vector<BrokerFilePermission>* permissions) {
static const char kDriCardBasePath[] = "/dev/dri/card";
static const char kNvidiaCtlPath[] = "/dev/nvidiactl";
static const char kNvidiaDeviceBasePath[] = "/dev/nvidia";
+ static const char kNvidiaDeviceModeSetPath[] = "/dev/nvidia-modeset";
static const char kNvidiaParamsPath[] = "/proc/driver/nvidia/params";
static const char kDevShm[] = "/dev/shm/";
@@ -200,6 +173,8 @@ void AddStandardGpuWhiteList(std::vector<BrokerFilePermission>* permissions) {
permissions->push_back(BrokerFilePermission::ReadWrite(
base::StringPrintf("%s%d", kNvidiaDeviceBasePath, i)));
}
+ permissions->push_back(
+ BrokerFilePermission::ReadWrite(kNvidiaDeviceModeSetPath));
permissions->push_back(BrokerFilePermission::ReadOnly(kNvidiaParamsPath));
}
@@ -270,50 +245,6 @@ void LoadV4L2Libraries(
}
}
-void LoadStandardLibraries(
- const service_manager::SandboxSeccompBPF::Options& options) {
- if (IsArchitectureX86_64() || IsArchitectureI386()) {
- // Accelerated video dlopen()'s some shared objects
- // inside the sandbox, so preload them now.
- if (IsAcceleratedVideoEnabled(options)) {
- if (IsLibVAVersion2()) {
- if (IsArchitectureX86_64()) {
- dlopen("/usr/lib64/va/drivers/i965_drv_video.so", dlopen_flag);
- dlopen("/usr/lib64/va/drivers/hybrid_drv_video.so", dlopen_flag);
- } else if (IsArchitectureI386()) {
- dlopen("/usr/lib/va/drivers/i965_drv_video.so", dlopen_flag);
- }
- dlopen("libva.so.2", dlopen_flag);
-#if defined(USE_OZONE)
- dlopen("libva-drm.so.2", dlopen_flag);
-#endif
- } else {
- // If we are linked against libva 1, we have two cases to handle:
- // - the sysroot includes both libva 1 and 2, in which case the drivers
- // are in /usr/lib{64}/va1/
- // - the sysroot only includes libva 1, in which case the drivers are
- // are in /usr/lib{64}/va/
- // This is ugly, but temporary until all builds have switched to libva 2.
- if (IsArchitectureX86_64()) {
- if (!dlopen("/usr/lib64/va1/drivers/i965_drv_video.so", dlopen_flag))
- dlopen("/usr/lib64/va/drivers/i965_drv_video.so", dlopen_flag);
- if (!dlopen("/usr/lib64/va1/drivers/hybrid_drv_video.so", dlopen_flag))
- dlopen("/usr/lib64/va/drivers/hybrid_drv_video.so", dlopen_flag);
- } else if (IsArchitectureI386()) {
- if (!dlopen("/usr/lib/va1/drivers/i965_drv_video.so", dlopen_flag))
- dlopen("/usr/lib/va/drivers/i965_drv_video.so", dlopen_flag);
- }
- dlopen("libva.so.1", dlopen_flag);
-#if defined(USE_OZONE)
- dlopen("libva-drm.so.1", dlopen_flag);
-#elif defined(USE_X11)
- dlopen("libva-x11.so.1", dlopen_flag);
-#endif
- }
- }
- }
-}
-
bool LoadLibrariesForGpu(
const service_manager::SandboxSeccompBPF::Options& options) {
if (IsChromeOS()) {
@@ -326,7 +257,6 @@ bool LoadLibrariesForGpu(
if (options.use_amd_specific_policies)
return LoadAmdGpuLibraries();
}
- LoadStandardLibraries(options);
return true;
}
@@ -335,9 +265,9 @@ sandbox::syscall_broker::BrokerCommandSet CommandSetForGPU(
sandbox::syscall_broker::BrokerCommandSet command_set;
command_set.set(sandbox::syscall_broker::COMMAND_ACCESS);
command_set.set(sandbox::syscall_broker::COMMAND_OPEN);
+ command_set.set(sandbox::syscall_broker::COMMAND_STAT);
if (IsChromeOS() && options.use_amd_specific_policies) {
command_set.set(sandbox::syscall_broker::COMMAND_READLINK);
- command_set.set(sandbox::syscall_broker::COMMAND_STAT);
}
return command_set;
}
diff --git a/chromium/content/gpu/gpu_service_factory.cc b/chromium/content/gpu/gpu_service_factory.cc
index e2831337351..a4ec06a54cf 100644
--- a/chromium/content/gpu/gpu_service_factory.cc
+++ b/chromium/content/gpu/gpu_service_factory.cc
@@ -8,7 +8,7 @@
#include "base/task_scheduler/post_task.h"
#include "base/threading/thread_task_runner_handle.h"
-#include "services/shape_detection/public/interfaces/constants.mojom.h"
+#include "services/shape_detection/public/mojom/constants.mojom.h"
#include "services/shape_detection/shape_detection_service.h"
#if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
diff --git a/chromium/content/gpu/in_process_gpu_thread.cc b/chromium/content/gpu/in_process_gpu_thread.cc
index 39145978648..1efa57c23e7 100644
--- a/chromium/content/gpu/in_process_gpu_thread.cc
+++ b/chromium/content/gpu/in_process_gpu_thread.cc
@@ -11,21 +11,13 @@
#include "content/gpu/gpu_process.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
-#include "content/public/gpu/content_gpu_client.h"
#include "gpu/command_buffer/service/gpu_preferences.h"
-#include "gpu/config/gpu_info_collector.h"
-#include "gpu/config/gpu_util.h"
#include "gpu/ipc/service/gpu_init.h"
-#include "ui/gl/init/gl_factory.h"
#if defined(OS_ANDROID)
#include "base/android/jni_android.h"
#endif
-#if defined(USE_OZONE)
-#include "ui/ozone/public/ozone_platform.h"
-#endif
-
namespace content {
InProcessGpuThread::InProcessGpuThread(
@@ -56,11 +48,8 @@ void InProcessGpuThread::Init() {
gpu_process_ = new GpuProcess(io_thread_priority);
auto gpu_init = std::make_unique<gpu::GpuInit>();
- auto* client = GetContentClient()->gpu();
gpu_init->InitializeInProcess(base::CommandLine::ForCurrentProcess(),
- gpu_preferences_,
- client ? client->GetGPUInfo() : nullptr,
- client ? client->GetGpuFeatureInfo() : nullptr);
+ gpu_preferences_);
GetContentClient()->SetGpuInfo(gpu_init->gpu_info());