diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-03 13:42:47 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-15 10:27:51 +0000 |
commit | 8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (patch) | |
tree | d29d987c4d7b173cf853279b79a51598f104b403 /chromium/content/gpu | |
parent | 830c9e163d31a9180fadca926b3e1d7dfffb5021 (diff) | |
download | qtwebengine-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.gn | 11 | ||||
-rw-r--r-- | chromium/content/gpu/gpu_child_thread.cc | 22 | ||||
-rw-r--r-- | chromium/content/gpu/gpu_child_thread.h | 2 | ||||
-rw-r--r-- | chromium/content/gpu/gpu_main.cc | 24 | ||||
-rw-r--r-- | chromium/content/gpu/gpu_sandbox_hook_linux.cc | 78 | ||||
-rw-r--r-- | chromium/content/gpu/gpu_service_factory.cc | 2 | ||||
-rw-r--r-- | chromium/content/gpu/in_process_gpu_thread.cc | 13 |
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( + ®istry_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()); |