From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Tue, 5 May 2020 07:22:20 +0200 Subject: Revert "gpu/android: Remove setup for disabling AImageReader." This reverts commit dcd5a39518246eb999f1cc63bf1ec95d93fd5b2f. --- base/android/android_image_reader_compat.cc | 8 +++++++- base/android/android_image_reader_compat.h | 4 ++++ gpu/config/gpu_util.cc | 8 ++++++++ gpu/config/gpu_workaround_list.txt | 1 + gpu/ipc/service/gpu_init.cc | 11 +++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc --- a/base/android/android_image_reader_compat.cc +++ b/base/android/android_image_reader_compat.cc @@ -22,6 +22,8 @@ namespace base { namespace android { +bool AndroidImageReader::disable_support_ = false; + AndroidImageReader& AndroidImageReader::GetInstance() { // C++11 static local variable initialization is // thread-safe. @@ -29,8 +31,12 @@ AndroidImageReader& AndroidImageReader::GetInstance() { return *instance; } +void AndroidImageReader::DisableSupport() { + disable_support_ = true; +} + bool AndroidImageReader::IsSupported() { - return is_supported_; + return !disable_support_ && is_supported_; } AndroidImageReader::AndroidImageReader() { diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h --- a/base/android/android_image_reader_compat.h +++ b/base/android/android_image_reader_compat.h @@ -22,6 +22,9 @@ class BASE_EXPORT AndroidImageReader { // Thread safe GetInstance. static AndroidImageReader& GetInstance(); + // Disable image reader support. + static void DisableSupport(); + // Check if the image reader usage is supported. This function returns TRUE // if android version is >=OREO, image reader support is not disabled and all // the required functions are loaded. @@ -64,6 +67,7 @@ class BASE_EXPORT AndroidImageReader { AndroidImageReader(); bool LoadFunctions(); + static bool disable_support_; bool is_supported_; pAImage_delete AImage_delete_; pAImage_deleteAsync AImage_deleteAsync_; diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc @@ -108,6 +108,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( #if !defined(OS_ANDROID) return kGpuFeatureStatusDisabled; #else + if (blacklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL)) + return kGpuFeatureStatusBlacklisted; + if (!gpu_preferences.enable_android_surface_control) return kGpuFeatureStatusDisabled; @@ -349,6 +352,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] = kGpuFeatureStatusBlacklisted; } + + if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { + gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] = + kGpuFeatureStatusBlacklisted; + } } // Estimates roughly user total disk space by counting in the drives where diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt --- a/gpu/config/gpu_workaround_list.txt +++ b/gpu/config/gpu_workaround_list.txt @@ -13,6 +13,7 @@ decode_encode_srgb_for_generatemipmap depth_stencil_renderbuffer_resize_emulation disable_2d_canvas_auto_flush disable_accelerated_vpx_decode +disable_aimagereader disable_async_readpixels disable_av_sample_buffer_display_layer disable_blend_equation_advanced diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc @@ -524,6 +524,12 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, ui::OzonePlatform::GetInstance()->AfterSandboxEntry(); #endif +#if defined(OS_ANDROID) + // Disable AImageReader if the workaround is enabled. + if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { + base::android::AndroidImageReader::DisableSupport(); + } +#endif #if defined(USE_OZONE) gpu_feature_info_.supported_buffer_formats_for_allocation_and_texturing = std::move(supported_buffer_formats_for_texturing); @@ -550,6 +556,11 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line, default_offscreen_surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size()); + // Disable AImageReader if the workaround is enabled. + if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { + base::android::AndroidImageReader::DisableSupport(); + } + UMA_HISTOGRAM_ENUMERATION("GPU.GLImplementation", gl::GetGLImplementation()); } #else -- 2.17.1