diff --git a/chromium-browser-stable.spec b/chromium-browser-stable.spec index 7ce1ca8..4d1737b 100644 --- a/chromium-browser-stable.spec +++ b/chromium-browser-stable.spec @@ -14,7 +14,7 @@ Summary: A fast web browser based on the Blink engine Name: chromium-browser-stable Version: 48.0.2564.116 -Release: 1 +Release: 2 License: BSD, LGPL Group: Networking/WWW Source0: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%{version}.tar.xz @@ -47,6 +47,7 @@ Patch501: chromium-ps-print.patch # Google patched their bundled copy of icu 54 to include API functionality that wasn't added until 55. # :P Patch502: chromium-45.0.2454.101-system-icu-54-does-not-have-detectHostTimeZone.patch +# http://bazaar.launchpad.net/~saiarcot895/chromium-browser/chromium-browser.trusty.beta/revision/230#debian/patches/enable_vaapi_on_linux.diff Patch503: enable_vaapi_on_linux.diff # Patch to fix build with use_system_libvpx # Chromium bug #541273 @@ -57,6 +58,9 @@ Patch504: chromium-system-icu-r0.patch Patch505: fix_for_system_ffmpeg_ABI.patch # (cjw) Do not use ffmpeg internal header(s) Patch506: chromium-43-no-ffmpeg-internal.patch +# fix https://bugs.chromium.org/p/chromium/issues/detail?id=585513 +# vaInitialize failed VA error: unknown libva error +Patch507: issue1688073002_40001.diff Patch600: unbundle-libvpx_new-fix.patch Provides: %{crname} = %{EVRD} @@ -284,6 +288,7 @@ find third_party/icu -type f \! -regex '.*\.\(gyp\|gypi\|isolate\)' -delete %patch505 -p1 %patch506 -p1 %endif +%patch507 -p1 #patch600 -p1 ### build with widevine support diff --git a/enable_vaapi_on_linux.diff b/enable_vaapi_on_linux.diff index ce3a525..1610c22 100644 --- a/enable_vaapi_on_linux.diff +++ b/enable_vaapi_on_linux.diff @@ -1,38 +1,9 @@ -diff --git a/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc b/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc -index de0f587..2d899ad 100644 ---- a/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc -+++ b/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc -@@ -20,7 +20,7 @@ - #include "media/filters/jpeg_parser.h" - #include "ui/gfx/geometry/size.h" - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || defined(OS_LINUX) - #if defined(ARCH_CPU_X86_FAMILY) - #include "content/common/gpu/media/vaapi_jpeg_decode_accelerator.h" - #endif -@@ -402,7 +402,7 @@ scoped_ptr - GpuJpegDecodeAccelerator::CreateV4L2JDA( - const scoped_refptr& io_task_runner) { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create( - V4L2Device::kJpegDecoder); - if (device) -@@ -416,7 +416,7 @@ scoped_ptr - GpuJpegDecodeAccelerator::CreateVaapiJDA( - const scoped_refptr& io_task_runner) { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - decoder.reset(new VaapiJpegDecodeAccelerator(io_task_runner)); - #endif - return decoder.Pass(); -diff --git a/content/common/gpu/media/gpu_video_decode_accelerator.cc b/content/common/gpu/media/gpu_video_decode_accelerator.cc -index ed4d179..446d3b9 100644 ---- a/content/common/gpu/media/gpu_video_decode_accelerator.cc -+++ b/content/common/gpu/media/gpu_video_decode_accelerator.cc +Description: Enables using VA-API hardware acceleration in Linux. The patch for bpf_gpu_policy_linux.cc initially came from https://codereview.chromium.org/15955009/diff/92001/content/common/sandbox_linux/bpf_gpu_policy_linux.cc. + +Index: beta.wily/content/common/gpu/media/gpu_video_decode_accelerator.cc +=================================================================== +--- beta.wily.orig/content/common/gpu/media/gpu_video_decode_accelerator.cc ++++ beta.wily/content/common/gpu/media/gpu_video_decode_accelerator.cc @@ -33,7 +33,7 @@ #include "content/common/gpu/media/dxva_video_decode_accelerator.h" #elif defined(OS_MACOSX) @@ -42,7 +13,7 @@ index ed4d179..446d3b9 100644 #if defined(USE_V4L2_CODEC) #include "content/common/gpu/media/v4l2_device.h" #include "content/common/gpu/media/v4l2_slice_video_decode_accelerator.h" -@@ -164,7 +164,7 @@ GpuVideoDecodeAccelerator::GetSupportedProfiles() { +@@ -164,7 +164,7 @@ GpuVideoDecodeAccelerator::GetSupportedP // can be initialized by corresponding VDA successfully. #if defined(OS_WIN) profiles = DXVAVideoDecodeAccelerator::GetSupportedProfiles(); @@ -51,227 +22,55 @@ index ed4d179..446d3b9 100644 media::VideoDecodeAccelerator::SupportedProfiles vda_profiles; #if defined(USE_V4L2_CODEC) vda_profiles = V4L2VideoDecodeAccelerator::GetSupportedProfiles(); -@@ -389,7 +389,7 @@ GpuVideoDecodeAccelerator::CreateDXVAVDA() { - scoped_ptr - GpuVideoDecodeAccelerator::CreateV4L2VDA() { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create(V4L2Device::kDecoder); - if (device.get()) { - decoder.reset(new V4L2VideoDecodeAccelerator( -@@ -407,7 +407,7 @@ GpuVideoDecodeAccelerator::CreateV4L2VDA() { - scoped_ptr - GpuVideoDecodeAccelerator::CreateV4L2SliceVDA() { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create(V4L2Device::kDecoder); - if (device.get()) { - decoder.reset(new V4L2SliceVideoDecodeAccelerator( -@@ -438,7 +438,7 @@ void GpuVideoDecodeAccelerator::BindImage(uint32 client_texture_id, +@@ -341,6 +341,8 @@ void GpuVideoDecodeAccelerator::Initiali + } + #endif + ++ VLOG(1) << "Initializing GPU video decode accelerator."; ++ + // Array of Create..VDA() function pointers, maybe applicable to the current + // platform. This list is ordered by priority of use and it should be the + // same as the order of querying supported profiles of VDAs. +@@ -354,11 +356,14 @@ void GpuVideoDecodeAccelerator::Initiali + &GpuVideoDecodeAccelerator::CreateAndroidVDA}; + + for (const auto& create_vda_function : create_vda_fps) { ++ VLOG(1) << "Testing create_vda_function."; + video_decode_accelerator_ = (this->*create_vda_function)(); + if (!video_decode_accelerator_ || + !video_decode_accelerator_->Initialize(profile, this)) + continue; + ++ VLOG(1) << "Initialization successful."; ++ + if (video_decode_accelerator_->CanDecodeOnIOThread()) { + filter_ = new MessageFilter(this, host_route_id_); + stub_->channel()->AddFilter(filter_.get()); +@@ -438,7 +443,9 @@ void GpuVideoDecodeAccelerator::BindImag scoped_ptr GpuVideoDecodeAccelerator::CreateVaapiVDA() { scoped_ptr decoder; -#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++ VLOG(1) << "About to create new VAAPI video decode accelerator."; +#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) ++ VLOG(1) << "Creating new VAAPI video decode accelerator."; decoder.reset(new VaapiVideoDecodeAccelerator( make_context_current_, base::Bind(&GpuVideoDecodeAccelerator::BindImage, base::Unretained(this)))); -diff --git a/content/common/gpu/media/gpu_video_encode_accelerator.cc b/content/common/gpu/media/gpu_video_encode_accelerator.cc -index ef14060..d6fcf77 100644 ---- a/content/common/gpu/media/gpu_video_encode_accelerator.cc -+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc -@@ -20,7 +20,7 @@ - #include "media/base/limits.h" - #include "media/base/video_frame.h" - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || defined(OS_LINUX) - #if defined(USE_V4L2_CODEC) - #include "content/common/gpu/media/v4l2_video_encode_accelerator.h" - #endif -@@ -197,7 +197,7 @@ GpuVideoEncodeAccelerator::CreateVEAFps() { - scoped_ptr - GpuVideoEncodeAccelerator::CreateV4L2VEA() { - scoped_ptr encoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create(V4L2Device::kEncoder); - if (device) - encoder.reset(new V4L2VideoEncodeAccelerator(device)); -@@ -209,7 +209,7 @@ GpuVideoEncodeAccelerator::CreateV4L2VEA() { - scoped_ptr - GpuVideoEncodeAccelerator::CreateVaapiVEA() { - scoped_ptr encoder; --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); - if (!cmd_line->HasSwitch(switches::kDisableVaapiAcceleratedVideoEncode)) - encoder.reset(new VaapiVideoEncodeAccelerator()); -diff --git a/content/common/gpu/media/jpeg_decode_accelerator_unittest.cc b/content/common/gpu/media/jpeg_decode_accelerator_unittest.cc -index fa640b1..09293ef 100644 ---- a/content/common/gpu/media/jpeg_decode_accelerator_unittest.cc -+++ b/content/common/gpu/media/jpeg_decode_accelerator_unittest.cc -@@ -23,7 +23,7 @@ - #include "third_party/libyuv/include/libyuv.h" - #include "ui/gfx/codec/jpeg_codec.h" - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || defined(OS_LINUX) - #if defined(USE_V4L2_CODEC) - #include "content/common/gpu/media/v4l2_device.h" - #include "content/common/gpu/media/v4l2_jpeg_decode_accelerator.h" -@@ -129,10 +129,10 @@ JpegClient::~JpegClient() { - } - - void JpegClient::CreateJpegDecoder() { --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - decoder_.reset( - new VaapiJpegDecodeAccelerator(base::ThreadTaskRunnerHandle::Get())); --#elif defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#elif (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = - V4L2Device::Create(V4L2Device::kJpegDecoder); - if (!device.get()) { -@@ -568,7 +568,7 @@ int main(int argc, char** argv) { - continue; - LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; - } --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - content::VaapiWrapper::PreSandboxInitialization(); - #endif - -diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc -index 9a8b774..f759dbd 100644 ---- a/content/common/gpu/media/video_decode_accelerator_unittest.cc -+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc -@@ -58,7 +58,7 @@ - #if defined(OS_WIN) - #include "base/win/windows_version.h" - #include "content/common/gpu/media/dxva_video_decode_accelerator.h" --#elif defined(OS_CHROMEOS) -+#elif defined(OS_CHROMEOS) || defined(OS_LINUX) - #if defined(USE_V4L2_CODEC) - #include "content/common/gpu/media/v4l2_device.h" - #include "content/common/gpu/media/v4l2_slice_video_decode_accelerator.h" -@@ -532,7 +532,7 @@ GLRenderingVDAClient::CreateDXVAVDA() { - scoped_ptr - GLRenderingVDAClient::CreateV4L2VDA() { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create(V4L2Device::kDecoder); - if (device.get()) { - base::WeakPtr weak_client = AsWeakPtr(); -@@ -549,7 +549,7 @@ GLRenderingVDAClient::CreateV4L2VDA() { - scoped_ptr - GLRenderingVDAClient::CreateV4L2SliceVDA() { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(USE_V4L2_CODEC) - scoped_refptr device = V4L2Device::Create(V4L2Device::kDecoder); - if (device.get()) { - base::WeakPtr weak_client = AsWeakPtr(); -@@ -566,7 +566,7 @@ GLRenderingVDAClient::CreateV4L2SliceVDA() { - scoped_ptr - GLRenderingVDAClient::CreateVaapiVDA() { - scoped_ptr decoder; --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - decoder.reset(new VaapiVideoDecodeAccelerator( - base::Bind(&DoNothingReturnTrue), - base::Bind(&GLRenderingVDAClient::BindImage, base::Unretained(this)))); -@@ -1650,7 +1650,7 @@ int main(int argc, char **argv) { - ui::OzonePlatform::InitializeForUI(); - #endif - --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - content::VaapiWrapper::PreSandboxInitialization(); - #endif - -diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc -index 1775614..a33b4e5 100644 ---- a/content/common/gpu/media/video_encode_accelerator_unittest.cc -+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc -@@ -40,7 +40,7 @@ - #include "media/video/video_encode_accelerator.h" - #include "testing/gtest/include/gtest/gtest.h" - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || defined(OS_LINUX) - #if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) - #include "content/common/gpu/media/v4l2_video_encode_accelerator.h" - #endif -@@ -1044,7 +1044,7 @@ scoped_ptr VEAClient::CreateFakeVEA() { - - scoped_ptr VEAClient::CreateV4L2VEA() { - scoped_ptr encoder; --#if defined(OS_CHROMEOS) && (defined(ARCH_CPU_ARMEL) || \ -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && (defined(ARCH_CPU_ARMEL) || \ - (defined(USE_OZONE) && defined(USE_V4L2_CODEC))) - scoped_refptr device = V4L2Device::Create(V4L2Device::kEncoder); - if (device) -@@ -1055,7 +1055,7 @@ scoped_ptr VEAClient::CreateV4L2VEA() { - - scoped_ptr VEAClient::CreateVaapiVEA() { - scoped_ptr encoder; --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - encoder.reset(new VaapiVideoEncodeAccelerator()); - #endif - return encoder.Pass(); -@@ -1761,7 +1761,7 @@ int main(int argc, char** argv) { - LOG(FATAL) << "--measure_latency requires --run_at_fps enabled to work."; - } - --#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) -+#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) - content::VaapiWrapper::PreSandboxInitialization(); - #endif - -diff --git a/content/content_common.gypi b/content/content_common.gypi -index f9236da..ad1654d 100644 ---- a/content/content_common.gypi -+++ b/content/content_common.gypi -@@ -821,7 +821,7 @@ - 'public/common/webrtc_ip_handling_policy.h', - ], - }], -- ['use_v4lplugin==1 and chromeos==1', { -+ ['use_v4lplugin==1 and (chromeos==1 or desktop_linux==1)', { - 'defines': [ - 'USE_LIBV4L2' - ], +Index: beta.wily/content/content_common.gypi +=================================================================== +--- beta.wily.orig/content/content_common.gypi ++++ beta.wily/content/content_common.gypi @@ -865,7 +865,7 @@ }, ], }], - ['chromeos==1', { -+ ['(chromeos==1 or desktop_linux==1)', { ++ ['chromeos==1 or desktop_linux==1', { 'sources': [ 'common/gpu/media/accelerated_video_decoder.h', 'common/gpu/media/h264_decoder.cc', -@@ -882,7 +882,7 @@ - 'common/gpu/media/vp9_picture.h', - ], - }], -- ['chromeos==1 and use_v4l2_codec==1', { -+ ['(chromeos==1 or desktop_linux==1) and use_v4l2_codec==1', { - 'direct_dependent_settings': { - 'defines': [ - 'USE_V4L2_CODEC' -@@ -915,13 +915,13 @@ - '<(DEPTH)/third_party/khronos', - ], - }], -- ['target_arch == "arm" and chromeos == 1', { -+ ['target_arch == "arm" and (chromeos == 1 or desktop_linux == 1)', { - 'sources': [ - 'common/gpu/media/tegra_v4l2_device.cc', +@@ -921,7 +921,7 @@ 'common/gpu/media/tegra_v4l2_device.h', ], }], @@ -280,10 +79,10 @@ index f9236da..ad1654d 100644 'dependencies': [ '../media/media.gyp:media', '../third_party/libyuv/libyuv.gyp:libyuv', -diff --git a/content/content_gpu.gypi b/content/content_gpu.gypi -index 5516ed4..ff2f410 100644 ---- a/content/content_gpu.gypi -+++ b/content/content_gpu.gypi +Index: beta.wily/content/content_gpu.gypi +=================================================================== +--- beta.wily.orig/content/content_gpu.gypi ++++ beta.wily/content/content_gpu.gypi @@ -38,7 +38,7 @@ ], }, @@ -293,28 +92,10 @@ index 5516ed4..ff2f410 100644 'include_dirs': [ '<(DEPTH)/third_party/libva', ], -diff --git a/content/content_tests.gypi b/content/content_tests.gypi -index 929915b..dc7b77e 100644 ---- a/content/content_tests.gypi -+++ b/content/content_tests.gypi -@@ -1652,7 +1652,7 @@ - }, - ], - }], -- ['chromeos==1 or OS=="win" or OS=="android"', { -+ ['(chromeos==1 or desktop_linux==1) or OS=="win" or OS=="android"', { - 'targets': [ - { - 'target_name': 'video_decode_accelerator_unittest', -@@ -1721,7 +1721,7 @@ - '../ui/gfx/x/gfx_x11.gyp:gfx_x11', - ], - }], -- ['use_ozone==1 and chromeos==1', { -+ ['use_ozone==1 and (chromeos==1 or desktop_linux == 1)', { - 'dependencies': [ - '../ui/display/display.gyp:display', # Used by rendering_helper.cc - '../ui/ozone/ozone.gyp:ozone', # Used by rendering_helper.cc +Index: beta.wily/content/content_tests.gypi +=================================================================== +--- beta.wily.orig/content/content_tests.gypi ++++ beta.wily/content/content_tests.gypi @@ -1733,7 +1733,7 @@ }, ] @@ -324,20 +105,11 @@ index 929915b..dc7b77e 100644 'targets': [ { 'target_name': 'vaapi_jpeg_decoder_unittest', -@@ -1765,7 +1765,7 @@ - } - ] - }], -- ['chromeos==1', { -+ ['chromeos==1 or desktop_linux==1', { - 'targets': [ - { - 'target_name': 'video_encode_accelerator_unittest', -diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc -index c449382..05ce87a 100644 ---- a/content/public/common/content_switches.cc -+++ b/content/public/common/content_switches.cc -@@ -931,7 +931,9 @@ const char kDisableWebAudio[] = "disable-webaudio"; +Index: beta.wily/content/public/common/content_switches.cc +=================================================================== +--- beta.wily.orig/content/public/common/content_switches.cc ++++ beta.wily/content/public/common/content_switches.cc +@@ -931,7 +931,9 @@ const char kDisableWebAudio[] #if defined(OS_CHROMEOS) // Disables panel fitting (used for mirror mode). const char kDisablePanelFitting[] = "disable-panel-fitting"; @@ -347,24 +119,23 @@ index c449382..05ce87a 100644 // Disables VA-API accelerated video encode. const char kDisableVaapiAcceleratedVideoEncode[] = "disable-vaapi-accelerated-video-encode"; -diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h -index 9bd5dbd..2341f47 100644 ---- a/content/public/common/content_switches.h -+++ b/content/public/common/content_switches.h -@@ -275,6 +275,9 @@ CONTENT_EXPORT extern const char kDisableWebAudio[]; +Index: beta.wily/content/public/common/content_switches.h +=================================================================== +--- beta.wily.orig/content/public/common/content_switches.h ++++ beta.wily/content/public/common/content_switches.h +@@ -275,6 +275,8 @@ CONTENT_EXPORT extern const char kDisabl #if defined(OS_CHROMEOS) CONTENT_EXPORT extern const char kDisablePanelFitting[]; +#endif -+ +#if defined(OS_CHROMEOS) || defined(OS_LINUX) CONTENT_EXPORT extern const char kDisableVaapiAcceleratedVideoEncode[]; #endif -diff --git a/media/media.gyp b/media/media.gyp -index b56a23b..b643096 100644 ---- a/media/media.gyp -+++ b/media/media.gyp +Index: beta.wily/media/media.gyp +=================================================================== +--- beta.wily.orig/media/media.gyp ++++ beta.wily/media/media.gyp @@ -764,7 +764,7 @@ ], }], @@ -383,3 +154,277 @@ index b56a23b..b643096 100644 'sources': [ 'filters/h264_bitstream_buffer_unittest.cc', ], +Index: beta.wily/gpu/config/software_rendering_list_json.cc +=================================================================== +--- beta.wily.orig/gpu/config/software_rendering_list_json.cc ++++ beta.wily/gpu/config/software_rendering_list_json.cc +@@ -481,17 +481,6 @@ const char kSoftwareRenderingListJson[] + ] + }, + { +- "id": 48, +- "description": "Accelerated video decode is unavailable on Linux", +- "cr_bugs": [137247], +- "os": { +- "type": "linux" +- }, +- "features": [ +- "accelerated_video_decode" +- ] +- }, +- { + "id": 49, + "description": "NVidia GeForce GT 650M can cause the system to hang with flash 3D", + "cr_bugs": [140175], +Index: beta.wily/content/common/sandbox_linux/bpf_gpu_policy_linux.cc +=================================================================== +--- beta.wily.orig/content/common/sandbox_linux/bpf_gpu_policy_linux.cc ++++ beta.wily/content/common/sandbox_linux/bpf_gpu_policy_linux.cc +@@ -21,6 +21,8 @@ + #include "base/logging.h" + #include "base/memory/scoped_ptr.h" + #include "build/build_config.h" ++// Auto-generated for dlopen libva libraries ++#include "content/common/gpu/media/va_stubs.h" + #include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h" + #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h" + #include "content/common/set_process_title.h" +@@ -31,6 +33,8 @@ + #include "sandbox/linux/syscall_broker/broker_file_permission.h" + #include "sandbox/linux/syscall_broker/broker_process.h" + #include "sandbox/linux/system_headers/linux_syscalls.h" ++#include "third_party/libva/va/va.h" ++#include "third_party/libva/va/va_x11.h" + + using sandbox::arch_seccomp_data; + using sandbox::bpf_dsl::Allow; +@@ -40,6 +44,11 @@ using sandbox::syscall_broker::BrokerFil + using sandbox::syscall_broker::BrokerProcess; + using sandbox::SyscallSets; + ++using content_common_gpu_media::kModuleVa; ++using content_common_gpu_media::kModuleVa_x11; ++using content_common_gpu_media::InitializeStubs; ++using content_common_gpu_media::StubPathMap; ++ + namespace content { + + namespace { +@@ -94,7 +103,7 @@ inline bool UseLibV4L2() { + + bool IsAcceleratedVaapiVideoEncodeEnabled() { + bool accelerated_encode_enabled = false; +-#if defined(OS_CHROMEOS) ++#if defined(OS_CHROMEOS) || defined(OS_LINUX) + const base::CommandLine& command_line = + *base::CommandLine::ForCurrentProcess(); + accelerated_encode_enabled = +@@ -299,27 +308,41 @@ bool GpuProcessPolicy::PreSandboxHook() + // inside the sandbox, so preload them now. + if (IsAcceleratedVaapiVideoEncodeEnabled() || + IsAcceleratedVideoDecodeEnabled()) { +- const char* I965DrvVideoPath = NULL; +- const char* I965HybridDrvVideoPath = NULL; ++ VLOG(1) << "Attempting to enable hardware video acceleration."; ++ StubPathMap paths; ++ paths[kModuleVa].push_back("libva.so.1"); ++ paths[kModuleVa_x11].push_back("libva-x11.so.1"); ++ if (!InitializeStubs(paths)) { ++ VLOG(1) << "Failed to initialize stubs"; ++ return false; ++ } + +- if (IsArchitectureX86_64()) { +- I965DrvVideoPath = "/usr/lib64/va/drivers/i965_drv_video.so"; +- I965HybridDrvVideoPath = "/usr/lib64/va/drivers/hybrid_drv_video.so"; +- } else if (IsArchitectureI386()) { +- I965DrvVideoPath = "/usr/lib/va/drivers/i965_drv_video.so"; ++ // libva drivers won't get loaded even above two libraries get dlopened. ++ // Thus, libva calls will fail after post sandbox stage. ++ // ++ // To get the va driver loaded before sandboxing, upstream simply dlopen ++ // the hard-coded va driver path because ChromeOS is the only platform ++ // that Google want to support libva. ++ // ++ // While generic linux distros ship va driver as anywhere they want. ++ // Fortunately, the va driver will be loadded when vaInitialize() get ++ // called. ++ // So the following code is to call vaInitialize() before sandboxing. ++ Display* x_display = XOpenDisplay(NULL); ++ VADisplay va_display = vaGetDisplay(x_display); ++ if (!vaDisplayIsValid(va_display)) { ++ VLOG(1) << "Failed to call vaGetDisplay()"; ++ return false; + } + +- dlopen(I965DrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +- if (I965HybridDrvVideoPath) +- dlopen(I965HybridDrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +- dlopen("libva.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#if defined(USE_OZONE) +- dlopen("libva-drm.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#elif defined(USE_X11) +- dlopen("libva-x11.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); +-#endif +- } +- } ++ int major_version, minor_version; ++ if (vaInitialize(va_display, &major_version, &minor_version) ++ != VA_STATUS_SUCCESS) { ++ VLOG(1) << "Failed to call vaInitialize()"; ++ return false; ++ } ++ } // end of IsAcceleratedVaapiVideoEncodeEnabled() || IsAcceleratedVideoDecodeEnabled() ++ } // end of IsArchitectureX86_64() || IsArchitectureI386() + + return true; + } +Index: beta.wily/chrome/browser/about_flags.cc +=================================================================== +--- beta.wily.orig/chrome/browser/about_flags.cc ++++ beta.wily/chrome/browser/about_flags.cc +@@ -1017,7 +1017,7 @@ const FeatureEntry kFeatureEntries[] = { + "disable-accelerated-video-decode", + IDS_FLAGS_DISABLE_ACCELERATED_VIDEO_DECODE_NAME, + IDS_FLAGS_DISABLE_ACCELERATED_VIDEO_DECODE_DESCRIPTION, +- kOsMac | kOsWin | kOsCrOS, ++ kOsAll, + SINGLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), + }, + #if defined(USE_ASH) +Index: beta.wily/content/common/gpu/media/vaapi_wrapper.cc +=================================================================== +--- beta.wily.orig/content/common/gpu/media/vaapi_wrapper.cc ++++ beta.wily/content/common/gpu/media/vaapi_wrapper.cc +@@ -152,7 +152,7 @@ scoped_ptr VaapiWrapper::C + VAProfile va_profile, + const base::Closure& report_error_to_uma_cb) { + if (!profile_infos_.Get().IsProfileSupported(mode, va_profile)) { +- DVLOG(1) << "Unsupported va_profile: " << va_profile; ++ VLOG(1) << "Unsupported va_profile: " << va_profile; + return nullptr; + } + +@@ -311,15 +311,17 @@ VaapiWrapper::GetSupportedProfileInfosFo + bool VaapiWrapper::VaInitialize(const base::Closure& report_error_to_uma_cb) { + static bool vaapi_functions_initialized = PostSandboxInitialization(); + if (!vaapi_functions_initialized) { +- bool running_on_chromeos = false; +-#if defined(OS_CHROMEOS) ++ bool error_level_logging = false; ++#if defined(OS_LINUX) ++ error_level_logging = true; ++#elif defined(OS_CHROMEOS) + // When chrome runs on linux with chromeos=1, do not log error message + // without VAAPI libraries. +- running_on_chromeos = base::SysInfo::IsRunningOnChromeOS(); ++ error_level_logging = base::SysInfo::IsRunningOnChromeOS(); + #endif + static const char kErrorMsg[] = "Failed to initialize VAAPI libs"; +- if (running_on_chromeos) +- LOG(ERROR) << kErrorMsg; ++ if (error_level_logging) ++ VLOG(1) << kErrorMsg; + else + DVLOG(1) << kErrorMsg; + return false; +@@ -390,7 +392,7 @@ bool VaapiWrapper::IsEntrypointSupported + if (std::find(supported_entrypoints.begin(), + supported_entrypoints.end(), + entrypoint) == supported_entrypoints.end()) { +- DVLOG(1) << "Unsupported entrypoint"; ++ VLOG(1) << "Unsupported entrypoint"; + return false; + } + return true; +@@ -414,8 +416,8 @@ bool VaapiWrapper::AreAttribsSupported_L + 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 attribute type " << required_attribs[i].type; ++ VLOG(1) << "Unsupported value " << required_attribs[i].value ++ << " for attribute type " << required_attribs[i].type; + return false; + } + } +Index: beta.wily/content/common/gpu/media/vaapi_video_decode_accelerator.cc +=================================================================== +--- beta.wily.orig/content/common/gpu/media/vaapi_video_decode_accelerator.cc ++++ beta.wily/content/common/gpu/media/vaapi_video_decode_accelerator.cc +@@ -325,17 +325,17 @@ bool VaapiVideoDecodeAccelerator::Initia + + base::AutoLock auto_lock(lock_); + DCHECK_EQ(state_, kUninitialized); +- DVLOG(2) << "Initializing VAVDA, profile: " << profile; ++ VLOG(1) << "Initializing VAVDA, profile: " << profile; + + #if defined(USE_X11) + if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) { +- DVLOG(1) << "HW video decode acceleration not available without " ++ VLOG(1) << "HW video decode acceleration not available without " + "DesktopGL (GLX)."; + return false; + } + #elif defined(USE_OZONE) + if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { +- DVLOG(1) << "HW video decode acceleration not available without " ++ VLOG(1) << "HW video decode acceleration not available without " + << "EGLGLES2."; + return false; + } +@@ -345,7 +345,7 @@ bool VaapiVideoDecodeAccelerator::Initia + VaapiWrapper::kDecode, profile, base::Bind(&ReportToUMA, VAAPI_ERROR)); + + if (!vaapi_wrapper_.get()) { +- DVLOG(1) << "Failed initializing VAAPI for profile " << profile; ++ VLOG(1) << "Failed initializing VAAPI for profile " << profile; + return false; + } + +@@ -362,7 +362,7 @@ bool VaapiVideoDecodeAccelerator::Initia + vp9_accelerator_.reset(new VaapiVP9Accelerator(this, vaapi_wrapper_.get())); + decoder_.reset(new VP9Decoder(vp9_accelerator_.get())); + } else { +- DLOG(ERROR) << "Unsupported profile " << profile; ++ VLOG(1) << "Unsupported profile " << profile; + return false; + } + +Index: beta.wily/content/gpu/gpu_main.cc +=================================================================== +--- beta.wily.orig/content/gpu/gpu_main.cc ++++ beta.wily/content/gpu/gpu_main.cc +@@ -72,7 +72,7 @@ + #include "content/common/sandbox_mac.h" + #endif + +-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) + #include "content/common/gpu/media/vaapi_wrapper.h" + #endif + +@@ -237,7 +237,7 @@ int GpuMain(const MainFunctionParams& pa + GetGpuInfoFromCommandLine(gpu_info, command_line); + gpu_info.in_process_gpu = false; + +-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) ++#if (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) + VaapiWrapper::PreSandboxInitialization(); + #endif + +Index: beta.wily/content/common/gpu/client/command_buffer_proxy_impl.cc +=================================================================== +--- beta.wily.orig/content/common/gpu/client/command_buffer_proxy_impl.cc ++++ beta.wily/content/common/gpu/client/command_buffer_proxy_impl.cc +@@ -667,8 +667,10 @@ bool CommandBufferProxyImpl::ProduceFron + + scoped_ptr + CommandBufferProxyImpl::CreateVideoDecoder() { ++ TRACE_EVENT0("gpu", "CommandBufferProxyImpl::CreateVideoDecoder"); + if (!channel_) + return scoped_ptr(); ++ VLOG(1) << "About to create GpuVideoDecodeAcceleratorHost."; + return scoped_ptr( + new GpuVideoDecodeAcceleratorHost(channel_, this)); + }