From 8839e61ea5707112f787a3370af22bcc4fe0ae39 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 5 Oct 2020 00:32:13 +0200 Subject: [PATCH] Release 86.0.4240.73 --- CHANGELOG.md | 4 + build/RELEASE | 2 +- build/bromite_patches_list.txt | 5 + ...configure-the-ad-blocker-filters-URL.patch | 2 +- ...AImageReader-for-ARM64-P-and-ARM64-Q.patch | 42 +++++ .../Disable-sync-services-menu-entry.patch | 18 ++- ...nt-settings-back-to-privacy-settings.patch | 144 +++++++++++++++++ ...e-signin-and-data-saver-integrations.patch | 4 +- ...acklist-for-AImageReader-on-ARM-CPUs.patch | 41 +++++ ...flags-to-enable-disable-AImageReader.patch | 151 ++++++++++++++++++ ...ove-setup-for-disabling-AImageReader.patch | 127 +++++++++++++++ 11 files changed, 532 insertions(+), 8 deletions(-) create mode 100644 build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch create mode 100644 build/patches/Move-some-account-settings-back-to-privacy-settings.patch create mode 100644 build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch create mode 100644 build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch create mode 100644 build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch diff --git a/CHANGELOG.md b/CHANGELOG.md index a4ac7801..4ec273ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 86.0.4240.73 +* re-introduce ARM64 AImageReader mitigations (fixes https://github.com/bromite/bromite/issues/766) +* re-introduce menu items for autocomplete, autofill assistant and contextual search (fixes https://github.com/bromite/bromite/issues/763) + # 86.0.4240.70 * fixed crash on unused menu item tap (fixes https://github.com/bromite/bromite/issues/760) * fixed issue on new installations without DoH configuration (fixes https://github.com/bromite/bromite/issues/761) diff --git a/build/RELEASE b/build/RELEASE index 9037b8ad..4ccae782 100644 --- a/build/RELEASE +++ b/build/RELEASE @@ -1 +1 @@ -86.0.4240.70 +86.0.4240.73 diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index dfa0bcb0..e2b4d28c 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -127,6 +127,10 @@ Disable-DRM-media-origin-IDs-preprovisioning.patch Disable-smart-selection-by-default.patch Enable-user-agent-freeze-by-default.patch disable-browser-autologin-by-default.patch +Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch +Revert-Remove-flags-to-enable-disable-AImageReader.patch +Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch +Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch Update-i18n-zh_CN-support.patch Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch Add-menu-item-to-view-source.patch @@ -144,4 +148,5 @@ Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-schem Hardening-against-incognito-mode-detection.patch Remove-weblayer-dependency-on-Play-Services.patch Timezone-customization.patch +Move-some-account-settings-back-to-privacy-settings.patch Automated-domain-substitution.patch diff --git a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch b/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch index c274002d..e112d805 100644 --- a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch +++ b/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch @@ -175,7 +175,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -88,6 +88,11 @@ +@@ -89,6 +89,11 @@ android:key="privacy" android:order="18" android:title="@string/prefs_privacy"/> diff --git a/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch b/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch new file mode 100644 index 00000000..15f5289c --- /dev/null +++ b/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch @@ -0,0 +1,42 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 20 Feb 2020 22:44:06 +0100 +Subject: Disable AImageReader for ARM64/P and ARM64/Q + +--- + gpu/config/gpu_finch_features.cc | 4 ++++ + media/base/media_switches.cc | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc +--- a/gpu/config/gpu_finch_features.cc ++++ b/gpu/config/gpu_finch_features.cc +@@ -15,7 +15,11 @@ namespace features { + + // Use android AImageReader when playing videos with MediaPlayer. + const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer", ++#ifdef ARCH_CPU_ARM64 ++ base::FEATURE_DISABLED_BY_DEFAULT}; ++#else + base::FEATURE_ENABLED_BY_DEFAULT}; ++#endif + + #if defined(OS_ANDROID) + // Used to limit GL version to 2.0 for skia raster on Android. +diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc +--- a/media/base/media_switches.cc ++++ b/media/base/media_switches.cc +@@ -549,7 +549,11 @@ const base::Feature kMediaDrmPreprovisioningAtStartup{ + + // Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) + const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput", ++#ifdef ARCH_CPU_ARM64 ++ base::FEATURE_DISABLED_BY_DEFAULT}; ++#else + base::FEATURE_ENABLED_BY_DEFAULT}; ++#endif + + // Prevents using SurfaceLayer for videos. This is meant to be used by embedders + // that cannot support SurfaceLayer at the moment. +-- +2.17.1 + diff --git a/build/patches/Disable-sync-services-menu-entry.patch b/build/patches/Disable-sync-services-menu-entry.patch index 75eaeb51..1e92ee53 100644 --- a/build/patches/Disable-sync-services-menu-entry.patch +++ b/build/patches/Disable-sync-services-menu-entry.patch @@ -3,14 +3,24 @@ Date: Mon, 11 Nov 2019 23:09:48 +0100 Subject: Disable sync services menu entry --- - chrome/android/java/res/xml/main_preferences.xml | 8 -------- - chrome/android/java/res/xml/privacy_preferences.xml | 5 ----- - 2 files changed, 13 deletions(-) + chrome/android/java/res/xml/main_preferences.xml | 11 ++--------- + chrome/android/java/res/xml/privacy_preferences.xml | 5 ----- + 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -23,14 +23,6 @@ +@@ -13,7 +13,8 @@ + ++ android:title="@string/prefs_section_account" ++ app:isPreferenceVisible="false"/> + diff --git a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch new file mode 100644 index 00000000..c32330cb --- /dev/null +++ b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch @@ -0,0 +1,144 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 4 Oct 2020 12:58:17 +0200 +Subject: Move some account settings back to privacy settings + +Search suggestions, autofill assistant and contextual search +--- + .../java/res/xml/privacy_preferences.xml | 19 ++++++ + .../privacy/settings/PrivacySettings.java | 59 ++++++++++++++++++- + 2 files changed, 77 insertions(+), 1 deletion(-) + +diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml +--- a/chrome/android/java/res/xml/privacy_preferences.xml ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -58,4 +58,23 @@ + android:summary="@string/clear_browsing_data_summary" + android:fragment="org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTabsFragment" + android:order="5"/> ++ ++ ++ ++ ++ ++ + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +@@ -37,6 +37,13 @@ import org.chromium.ui.text.SpanApplier; + + import org.chromium.base.Log; + ++import androidx.annotation.Nullable; ++import androidx.preference.PreferenceCategory; ++import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; ++import org.chromium.chrome.browser.preferences.SharedPreferencesManager; ++import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; ++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; ++ + /** + * Fragment to keep track of the all the privacy related preferences. + */ +@@ -57,6 +64,18 @@ public class PrivacySettings + public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; + public static final String PREF_INCOGNITO_TAB_HISTORY_ENABLED = "incognito_history_enabled"; + ++ // moved from SyncAndServicesSettings.java ++ private static final String PREF_SERVICES_CATEGORY = "services_category"; ++ private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions"; ++ private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search"; ++ public static final String PREF_AUTOFILL_ASSISTANT = "autofill_assistant"; ++ private ChromeSwitchPreference mSearchSuggestions; ++ private @Nullable ChromeSwitchPreference mAutofillAssistant; ++ private @Nullable Preference mContextualSearch; ++ private final SharedPreferencesManager mSharedPreferencesManager = ++ SharedPreferencesManager.getInstance(); ++ private final PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + PrivacyPreferencesManager privacyPrefManager = PrivacyPreferencesManager.getInstance(); +@@ -78,6 +97,29 @@ public class PrivacySettings + + mManagedPreferenceDelegate = createManagedPreferenceDelegate(); + ++ mSearchSuggestions = (ChromeSwitchPreference) findPreference(PREF_SEARCH_SUGGESTIONS); ++ mSearchSuggestions.setOnPreferenceChangeListener(this); ++ mSearchSuggestions.setManagedPreferenceDelegate(mManagedPreferenceDelegate); ++ ++ mAutofillAssistant = (ChromeSwitchPreference) findPreference(PREF_AUTOFILL_ASSISTANT); ++ if (shouldShowAutofillAssistantPreference()) { ++ mAutofillAssistant.setOnPreferenceChangeListener(this); ++ mAutofillAssistant.setManagedPreferenceDelegate(mManagedPreferenceDelegate); ++ mAutofillAssistant.setChecked(mSharedPreferencesManager.readBoolean( ++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, false)); ++ } else { ++ PreferenceCategory servicesCategory = ++ (PreferenceCategory) findPreference(PREF_SERVICES_CATEGORY); ++ servicesCategory.removePreference(mAutofillAssistant); ++ mAutofillAssistant = null; ++ } ++ ++ mContextualSearch = findPreference(PREF_CONTEXTUAL_SEARCH); ++ boolean isContextualSearchEnabled = ++ !ContextualSearchManager.isContextualSearchDisabled(); ++ mContextualSearch.setSummary( ++ isContextualSearchEnabled ? R.string.text_on : R.string.text_off); ++ + ChromeBaseCheckBoxPreference canMakePaymentPref = + (ChromeBaseCheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT); + canMakePaymentPref.setOnPreferenceChangeListener(this); +@@ -110,6 +152,11 @@ public class PrivacySettings + } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) { + UserPrefs.get(Profile.getLastUsedRegularProfile()) + .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); ++ } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) { ++ prefService.setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue); ++ } else if (PREF_AUTOFILL_ASSISTANT.equals(key)) { ++ mSharedPreferencesManager.writeBoolean( ++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, (boolean) newValue); + } else if (PREF_NETWORK_PREDICTIONS.equals(key)) { + PrivacyPreferencesManager.getInstance().setNetworkPredictionEnabled((boolean) newValue); + } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) { +@@ -124,6 +171,16 @@ public class PrivacySettings + return true; + } + ++ /** ++ * This checks whether Autofill Assistant is enabled and was shown at least once (only then ++ * will the AA switch be assigned a value). ++ */ ++ private boolean shouldShowAutofillAssistantPreference() { ++ return ChromeFeatureList.isEnabled(ChromeFeatureList.AUTOFILL_ASSISTANT) ++ && mSharedPreferencesManager.contains( ++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED); ++ } ++ + @Override + public void onResume() { + super.onResume(); +@@ -134,7 +191,7 @@ public class PrivacySettings + * Updates the summaries for several preferences. + */ + public void updateSummaries() { +- PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ mSearchSuggestions.setChecked(prefService.getBoolean(Pref.SEARCH_SUGGEST_ENABLED)); + + CheckBoxPreference canMakePaymentPref = + (CheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT); +-- +2.17.1 + diff --git a/build/patches/Remove-signin-and-data-saver-integrations.patch b/build/patches/Remove-signin-and-data-saver-integrations.patch index d30ea8f1..ce33a2f0 100644 --- a/build/patches/Remove-signin-and-data-saver-integrations.patch +++ b/build/patches/Remove-signin-and-data-saver-integrations.patch @@ -102,7 +102,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -19,10 +19,6 @@ +@@ -20,10 +20,6 @@ android:order="2" android:title="@string/prefs_section_account_and_google_services" app:isPreferenceVisible="false"/> @@ -113,7 +113,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch b/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch new file mode 100644 index 00000000..ade695d4 --- /dev/null +++ b/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch @@ -0,0 +1,41 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sat, 15 Feb 2020 08:20:40 +0100 +Subject: Restore GPU bug blacklist for AImageReader on ARM CPUs + +Restore the AImageReader blacklist for ARM/ARM64 devices which causes +crashes on Android 9 and 10 (at different code locations). + +See discussion at https://github.com/bromite/bromite/issues/445 +--- + gpu/config/gpu_driver_bug_list.json | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json +--- a/gpu/config/gpu_driver_bug_list.json ++++ b/gpu/config/gpu_driver_bug_list.json +@@ -3286,6 +3286,22 @@ + "dont_delete_source_texture_for_egl_image" + ] + }, ++ { ++ "id":335, ++ "cr_bugs": [1051705], ++ "description": "Disable AImageReader on ARM GPUs", ++ "os": { ++ "type": "android", ++ "version": { ++ "op": "<", ++ "value": "10" ++ } ++ }, ++ "gl_vendor": "ARM.*", ++ "features": [ ++ "disable_aimagereader" ++ ] ++ }, + { + "id": 336, + "cr_bugs": [625785], +-- +2.17.1 + diff --git a/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch b/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch new file mode 100644 index 00000000..3c9d9de5 --- /dev/null +++ b/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch @@ -0,0 +1,151 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 5 May 2020 07:26:55 +0200 +Subject: Revert "Remove flags to enable/disable AImageReader." + +This reverts commit 463fa0f2e3b9e418bc26e2c8954463f0b0f76634. +--- + .../service/image_reader_gl_owner_unittest.cc | 5 +++++ + gpu/config/gpu_finch_features.cc | 4 ++++ + gpu/config/gpu_finch_features.h | 1 + + gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++- + media/base/media_switches.cc | 4 ++++ + media/base/media_switches.h | 1 + + media/gpu/android/video_frame_factory_impl.cc | 5 ++++- + 7 files changed, 29 insertions(+), 2 deletions(-) + +diff --git a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc +--- a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc ++++ b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc +@@ -8,10 +8,12 @@ + #include + #include + ++#include "base/test/scoped_feature_list.h" + #include "base/test/task_environment.h" + #include "gpu/command_buffer/service/abstract_texture.h" + #include "gpu/command_buffer/service/image_reader_gl_owner.h" + #include "gpu/command_buffer/service/mock_abstract_texture.h" ++#include "media/base/media_switches.h" + #include "media/base/android/media_codec_util.h" + #include "testing/gtest/include/gtest/gtest.h" + #include "ui/gl/gl_bindings.h" +@@ -31,6 +33,8 @@ class ImageReaderGLOwnerTest : public testing::Test { + if (!IsImageReaderSupported()) + return; + ++ scoped_feature_list_.InitAndEnableFeature(media::kAImageReaderVideoOutput); ++ + gl::init::InitializeStaticGLBindingsImplementation( + gl::kGLImplementationEGLGLES2, false); + gl::init::InitializeGLOneOffPlatformImplementation(false, false, true); +@@ -70,6 +74,7 @@ class ImageReaderGLOwnerTest : public testing::Test { + return base::android::AndroidImageReader::GetInstance().IsSupported(); + } + ++ base::test::ScopedFeatureList scoped_feature_list_; + scoped_refptr image_reader_; + GLuint texture_id_ = 0; + +diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc +--- a/gpu/config/gpu_finch_features.cc ++++ b/gpu/config/gpu_finch_features.cc +@@ -13,6 +13,10 @@ + + namespace features { + ++// Use android AImageReader when playing videos with MediaPlayer. ++const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + #if defined(OS_ANDROID) + // Used to limit GL version to 2.0 for skia raster on Android. + const base::Feature kUseGles2ForOopR{"UseGles2ForOopR", +diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h +--- a/gpu/config/gpu_finch_features.h ++++ b/gpu/config/gpu_finch_features.h +@@ -17,6 +17,7 @@ namespace features { + // All features in alphabetical order. The features should be documented + // alongside the definition of their values in the .cc file. + #if defined(OS_ANDROID) ++GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer; + GPU_EXPORT extern const base::Feature kUseGles2ForOopR; + GPU_EXPORT extern const base::Feature kAndroidSurfaceControl; + GPU_EXPORT extern const base::Feature kAImageReader; +diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc +--- a/gpu/ipc/service/stream_texture_android.cc ++++ b/gpu/ipc/service/stream_texture_android.cc +@@ -6,6 +6,7 @@ + + #include + ++#include "base/android/android_image_reader_compat.h" + #include "base/android/scoped_hardware_buffer_fence_sync.h" + #include "base/bind.h" + #include "base/feature_list.h" +@@ -47,7 +48,15 @@ std::unique_ptr MakeCurrent( + } + + TextureOwner::Mode GetTextureOwnerMode() { +- return features::IsAImageReaderEnabled() ++ const bool a_image_reader_supported = ++ base::android::AndroidImageReader::GetInstance().IsSupported(); ++ ++ // TODO(vikassoni) : Currently we have 2 different flags to enable/disable ++ // AImageReader - one for MCVD and other for MediaPlayer here. Merge those 2 ++ // flags into a single flag. Keeping the 2 flags separate for now since finch ++ // experiment using this flag is in progress. ++ return a_image_reader_supported && features::IsAImageReaderEnabled() && ++ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer) + ? TextureOwner::Mode::kAImageReaderInsecure + : TextureOwner::Mode::kSurfaceTextureInsecure; + } +diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc +--- a/media/base/media_switches.cc ++++ b/media/base/media_switches.cc +@@ -547,6 +547,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", + const base::Feature kMediaDrmPreprovisioningAtStartup{ + "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT}; + ++// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) ++const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + // Prevents using SurfaceLayer for videos. This is meant to be used by embedders + // that cannot support SurfaceLayer at the moment. + const base::Feature kDisableSurfaceLayerForVideo{ +diff --git a/media/base/media_switches.h b/media/base/media_switches.h +--- a/media/base/media_switches.h ++++ b/media/base/media_switches.h +@@ -192,6 +192,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture; + MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense; + MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning; + MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup; ++MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput; + MEDIA_EXPORT extern const base::Feature kDisableSurfaceLayerForVideo; + MEDIA_EXPORT extern const base::Feature kCanPlayHls; + MEDIA_EXPORT extern const base::Feature kPictureInPictureAPI; +diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc +--- a/media/gpu/android/video_frame_factory_impl.cc ++++ b/media/gpu/android/video_frame_factory_impl.cc +@@ -6,6 +6,7 @@ + + #include + ++#include "base/android/android_image_reader_compat.h" + #include "base/bind.h" + #include "base/bind_helpers.h" + #include "base/callback.h" +@@ -65,7 +66,9 @@ gpu::TextureOwner::Mode GetTextureOwnerMode( + switch (overlay_mode) { + case VideoFrameFactory::OverlayMode::kDontRequestPromotionHints: + case VideoFrameFactory::OverlayMode::kRequestPromotionHints: +- return features::IsAImageReaderEnabled() ++ return base::android::AndroidImageReader::GetInstance().IsSupported() && ++ features::IsAImageReaderEnabled() && ++ base::FeatureList::IsEnabled(media::kAImageReaderVideoOutput) + ? gpu::TextureOwner::Mode::kAImageReaderInsecure + : gpu::TextureOwner::Mode::kSurfaceTextureInsecure; + case VideoFrameFactory::OverlayMode::kSurfaceControlSecure: +-- +2.17.1 + diff --git a/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch b/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch new file mode 100644 index 00000000..a503b22e --- /dev/null +++ b/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch @@ -0,0 +1,127 @@ +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 +@@ -111,6 +111,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( + #if !defined(OS_ANDROID) + return kGpuFeatureStatusDisabled; + #else ++ if (blocklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL)) ++ return kGpuFeatureStatusBlocklisted; ++ + if (!gpu_preferences.enable_android_surface_control) + return kGpuFeatureStatusDisabled; + +@@ -374,6 +377,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { + gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] = + kGpuFeatureStatusBlocklisted; + } ++ ++ if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { ++ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] = ++ kGpuFeatureStatusBlocklisted; ++ } + } + + // 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_av1_decode ++disable_aimagereader + disable_accelerated_vp8_decode + disable_accelerated_vp8_encode + disable_accelerated_vp9_decode +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 +@@ -708,6 +708,12 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line, + AdjustInfoToSwiftShader(); + } + ++#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) + if (features::IsUsingOzonePlatform()) { + const std::vector +@@ -727,6 +733,11 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line, + gl::DirectCompositionSurfaceWin::DisableDecodeSwapChain(); + #endif + ++ // 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()); + } + #endif // OS_ANDROID +-- +2.17.1 +