mirror of
https://abf.rosa.ru/djam/chromium-browser-stable-test.git
synced 2025-02-23 17:42:45 +00:00

- first build of v89 - replaced custom BUILD.gn with a patch of source code; we may just miss that custom BUILD.gn has stopped working, but we will explicitly detect the moment when applying patch fails (custom BUILD.gn may be restored later if it makes sense to reduce maintenance burden) - dropped build-with-pipewire-0.3.patch, upstream now supports both pipewire 0.2 and 0.3 - took updated chromium-40-sorenson-spark.patch and chromium-55-extra-media.patch from Mageia (I want to remove these patches actually) - dropped some patches with not needed compiler-related changes - spec clean up: + removed not used for a long time support of building with GCC (Chromium upstream has tight integration with clang, I don't think that we will ever need buildability with GCC, for now it may be broken and just makes the spec more complex) + removed switches of libpng and vaapi without changing their values to redcue complexity of the spec - removed not used VA-API patch, replaced with VA-API enhacements from ppa:saiarcot895/chromium-beta, including support of VA-API VDPAU backend on Nvidia proprietary drivers
222 lines
9.7 KiB
Diff
222 lines
9.7 KiB
Diff
From 53b93dfe87fd10cced5d2a2a63072dfc7a2af6e4 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Charles <daniel.charles@intel.com>
|
|
Date: Fri, 28 Jul 2017 16:31:47 -0700
|
|
Subject: [PATCH] Enable VAVDA, VAVEA and VAJDA on linux with VAAPI only
|
|
|
|
This patch contains all the changes necessary to use VA-API along with
|
|
vaapi-driver to run all media use cases supported with hardware acceleration.
|
|
|
|
It is intended to remain as experimental accessible from chrome://flags on linux.
|
|
It requires libva/intel-vaapi-driver to be installed on the system path where
|
|
chrome is executed. Other drivers could be tested if available. Flags are
|
|
kept independent for linux, where this feature has to be enabled before
|
|
actually using it. This should not change how other OSes use the flags
|
|
already, the new flags will show at the buttom on the section of unavailable
|
|
experiments
|
|
|
|
The changes cover a range of compiler pre-processor flags to enable the stack.
|
|
It moves the presandbox operations to the vaapi_wrapper class as the hook function
|
|
is available there. vaInit will open driver on the correct installed folder.
|
|
|
|
chrome flags consolidtation into only two flags for linux. Mjpeg and accelerated
|
|
video are used. The other flags are kept for ChromeOS and other OSes.
|
|
|
|
Developer testing was made on skylake hardware, ChromeOS and Ubuntu.
|
|
|
|
BUG=NONE
|
|
TEST="subjective testing with VAVDA,VAVEA and VAJDA, autotest for encoder"
|
|
TEST="and decoder hardware accelerated"
|
|
TEST="have libva/intel-vaapi-driver installed and not installed in the system"
|
|
TEST="repeat on different hardware families"
|
|
R=posciak@chromium.org
|
|
R=kcwu@chromium.org
|
|
|
|
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
|
|
Change-Id: Ifbbf5c9e5221a8b5733fc6d4d0cf984a1f103171
|
|
Signed-off-by: Daniel Charles <daniel.charles@intel.com>
|
|
---
|
|
|
|
Index: dev/chrome/browser/about_flags.cc
|
|
===================================================================
|
|
--- dev.orig/chrome/browser/about_flags.cc
|
|
+++ dev/chrome/browser/about_flags.cc
|
|
@@ -3014,7 +3014,7 @@ const FeatureEntry kFeatureEntries[] = {
|
|
"disable-accelerated-video-decode",
|
|
flag_descriptions::kAcceleratedVideoDecodeName,
|
|
flag_descriptions::kAcceleratedVideoDecodeDescription,
|
|
- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
|
|
+ kOsAll,
|
|
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
|
|
},
|
|
#endif // (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) &&
|
|
@@ -3510,10 +3510,10 @@ const FeatureEntry kFeatureEntries[] = {
|
|
flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop,
|
|
MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)},
|
|
#endif // ENABLE_VR
|
|
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
|
+#if (BUILDFLAG(IS_CHROMEOS_ASH)) || (defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS))
|
|
{"disable-accelerated-mjpeg-decode",
|
|
flag_descriptions::kAcceleratedMjpegDecodeName,
|
|
- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
|
|
+ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
|
|
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
|
|
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
|
{"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
|
|
Index: dev/chrome/browser/flag_descriptions.cc
|
|
===================================================================
|
|
--- dev.orig/chrome/browser/flag_descriptions.cc
|
|
+++ dev/chrome/browser/flag_descriptions.cc
|
|
@@ -3656,7 +3656,7 @@ const char kVideoToolboxVp9DecodingDescr
|
|
|
|
// Chrome OS -------------------------------------------------------------------
|
|
|
|
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
|
+#if (BUILDFLAG(IS_CHROMEOS_ASH)) || (defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS))
|
|
|
|
const char kAccountManagementFlowsV2Name[] =
|
|
"Enable redesign of account management flows";
|
|
@@ -3671,6 +3671,12 @@ const char kAcceleratedMjpegDecodeDescri
|
|
"Enable hardware-accelerated mjpeg decode for captured frame where "
|
|
"available.";
|
|
|
|
+#endif
|
|
+
|
|
+// Chrome OS -------------------------------------------------------------------
|
|
+
|
|
+#if defined(OS_CHROMEOS)
|
|
+
|
|
const char kAllowDisableMouseAccelerationName[] =
|
|
"Allow disabling mouse acceleration";
|
|
const char kAllowDisableMouseAccelerationDescription[] =
|
|
Index: dev/chrome/browser/flag_descriptions.h
|
|
===================================================================
|
|
--- dev.orig/chrome/browser/flag_descriptions.h
|
|
+++ dev/chrome/browser/flag_descriptions.h
|
|
@@ -2114,7 +2114,7 @@ extern const char kVideoToolboxVp9Decodi
|
|
|
|
// Chrome OS ------------------------------------------------------------------
|
|
|
|
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
|
+#if (BUILDFLAG(IS_CHROMEOS_ASH)) || (defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS))
|
|
|
|
extern const char kAccountManagementFlowsV2Name[];
|
|
extern const char kAccountManagementFlowsV2Description[];
|
|
@@ -2122,6 +2122,12 @@ extern const char kAccountManagementFlow
|
|
extern const char kAcceleratedMjpegDecodeName[];
|
|
extern const char kAcceleratedMjpegDecodeDescription[];
|
|
|
|
+#endif
|
|
+
|
|
+// Chrome OS ------------------------------------------------------------------
|
|
+
|
|
+#if defined(OS_CHROMEOS)
|
|
+
|
|
extern const char kAllowDisableMouseAccelerationName[];
|
|
extern const char kAllowDisableMouseAccelerationDescription[];
|
|
|
|
Index: dev/content/gpu/BUILD.gn
|
|
===================================================================
|
|
--- dev.orig/content/gpu/BUILD.gn
|
|
+++ dev/content/gpu/BUILD.gn
|
|
@@ -6,6 +6,7 @@ import("//build/config/chromeos/ui_mode.
|
|
import("//build/config/ui.gni")
|
|
import("//gpu/vulkan/features.gni")
|
|
import("//media/media_options.gni")
|
|
+import("//media/gpu/args.gni")
|
|
|
|
# See //content/BUILD.gn for how this works.
|
|
group("gpu") {
|
|
@@ -140,4 +141,8 @@ target(link_target_type, "gpu_sources")
|
|
(!is_chromecast || is_cast_desktop_build)) {
|
|
configs += [ "//build/config/linux/dri" ]
|
|
}
|
|
+
|
|
+ if (is_linux && use_vaapi) {
|
|
+ public_configs = [ "//build/config/linux/libva" ]
|
|
+ }
|
|
}
|
|
Index: dev/media/gpu/gpu_video_decode_accelerator_factory.cc
|
|
===================================================================
|
|
--- dev.orig/media/gpu/gpu_video_decode_accelerator_factory.cc
|
|
+++ dev/media/gpu/gpu_video_decode_accelerator_factory.cc
|
|
@@ -160,6 +160,8 @@ GpuVideoDecodeAcceleratorFactory::Create
|
|
vda = (this->*create_vda_function)(workarounds, gpu_preferences, media_log);
|
|
if (vda && vda->Initialize(config, client))
|
|
return vda;
|
|
+ else
|
|
+ LOG(ERROR) << "Initialization of one or more VDAs failed.";
|
|
}
|
|
|
|
return nullptr;
|
|
@@ -218,6 +220,7 @@ GpuVideoDecodeAcceleratorFactory::Create
|
|
const gpu::GpuDriverBugWorkarounds& workarounds,
|
|
const gpu::GpuPreferences& gpu_preferences,
|
|
MediaLog* media_log) const {
|
|
+ LOG(WARNING) << "Initializing VAAPI VDA.";
|
|
std::unique_ptr<VideoDecodeAccelerator> decoder;
|
|
decoder.reset(new VaapiVideoDecodeAccelerator(gl_client_.make_context_current,
|
|
gl_client_.bind_image));
|
|
Index: dev/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
|
|
===================================================================
|
|
--- dev.orig/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
|
|
+++ dev/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
|
|
@@ -384,6 +384,7 @@ bool GpuVideoDecodeAccelerator::Initiali
|
|
LOG(ERROR) << "Failed creating the VDA factory";
|
|
return false;
|
|
}
|
|
+ LOG(WARNING) << "Created the VDA factory";
|
|
|
|
const gpu::GpuDriverBugWorkarounds& gpu_workarounds =
|
|
stub_->channel()->gpu_channel_manager()->gpu_driver_bug_workarounds();
|
|
@@ -404,6 +405,7 @@ bool GpuVideoDecodeAccelerator::Initiali
|
|
<< (config.is_encrypted() ? " with encryption" : "");
|
|
return false;
|
|
}
|
|
+ LOG(WARNING) << "Created VDA";
|
|
|
|
// Attempt to set up performing decoding tasks on IO thread, if supported by
|
|
// the VDA.
|
|
Index: dev/media/gpu/vaapi/vaapi_wrapper.cc
|
|
===================================================================
|
|
--- dev.orig/media/gpu/vaapi/vaapi_wrapper.cc
|
|
+++ dev/media/gpu/vaapi/vaapi_wrapper.cc
|
|
@@ -520,6 +520,11 @@ void VADisplayState::PreSandboxInitializ
|
|
base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE);
|
|
if (drm_file.IsValid())
|
|
VADisplayState::Get()->SetDrmFd(drm_file.GetPlatformFile());
|
|
+
|
|
+ const char kNvidiaPath[] = "/dev/dri/nvidiactl";
|
|
+ base::File nvidia_file = base::File(
|
|
+ base::FilePath::FromUTF8Unsafe(kNvidiaPath),
|
|
+ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE);
|
|
}
|
|
|
|
VADisplayState::VADisplayState()
|
|
@@ -626,10 +631,6 @@ bool VADisplayState::InitializeVaDriver_
|
|
}
|
|
|
|
bool VADisplayState::InitializeOnce() {
|
|
- static_assert(
|
|
- VA_MAJOR_VERSION >= 2 || (VA_MAJOR_VERSION == 1 && VA_MINOR_VERSION >= 1),
|
|
- "Requires VA-API >= 1.1.0");
|
|
-
|
|
// Set VA logging level, unless already set.
|
|
constexpr char libva_log_level_env[] = "LIBVA_MESSAGING_LEVEL";
|
|
std::unique_ptr<base::Environment> env(base::Environment::Create());
|
|
@@ -650,7 +651,6 @@ bool VADisplayState::InitializeOnce() {
|
|
// https://github.com/intel/media-driver/issues/818
|
|
if (!env->HasVar(libva_driver_impl_env))
|
|
env->SetVar(libva_driver_impl_env, "i965");
|
|
-
|
|
// Re-initialize with the new driver.
|
|
va_display_ = nullptr;
|
|
va_initialized_ = false;
|
|
@@ -856,7 +856,7 @@ bool AreAttribsSupported(const base::Loc
|
|
if (attribs[i].type != required_attribs[i].type ||
|
|
(attribs[i].value & required_attribs[i].value) !=
|
|
required_attribs[i].value) {
|
|
- DVLOG(1) << "Unsupported value " << required_attribs[i].value << " for "
|
|
+ VLOG(1) << "Unsupported value " << required_attribs[i].value << " for "
|
|
<< vaConfigAttribTypeStr(required_attribs[i].type);
|
|
return false;
|
|
}
|