Compare commits

...
Sign in to create a new pull request.

14 commits

Author SHA1 Message Date
b8da147297 Drop my fingerprint auth patch and switch to TD's 2025-06-22 15:43:38 -04:00
ed17cafea2 Add GSI patch for Unihertz/Agold from TD 2025-06-22 15:08:43 -04:00
f58c42c036 Update all patches for AOSP 16
We don't use lineage-sdk anymore and instead push spninfo to our vendor
repo.

No dialer patches needed anymore.
2025-06-21 11:21:19 -04:00
a2da963dff [11/n] Refresh sysbta patches 2025-06-17 20:15:43 -04:00
45b54b77dc [10/n] Bring back single_hop reversal patches for fw/native 2025-06-15 18:58:34 -04:00
4b06d79e5d [9/n] Refresh patches for p/a/Settings 2025-06-15 11:39:44 -04:00
1934436bb0 [8/n] New patch for fw/a 2025-06-15 11:32:54 -04:00
e5eeee0098 [7/n] Refresh patch for p/m/Connectivity 2025-06-15 11:31:40 -04:00
6d1a3c97d2 [6/n] Refresh patches for fw/b 2025-06-15 11:30:33 -04:00
b3004573ec [5/n] Refresh patches for f/native
Some patches are dropped in the hope that single_hop_screenshot _might_
work. If it doesn't, well, we'll have to fix it again later.
2025-06-15 11:16:25 -04:00
ab192cd91f [4/n] Refresh patchset for f/a 2025-06-15 10:40:09 -04:00
483f3398c4 [3/n] Refresh f/o/n/ims 2025-06-14 16:16:13 -04:00
84d61b047e [2/n] Refresh patches for AOSP 16 2025-06-14 15:33:38 -04:00
3e5414feeb [1/n] Refresh patchset for bionic and system/core 2025-06-14 09:45:09 -04:00
52 changed files with 828 additions and 966 deletions

View file

@ -1,4 +1,4 @@
From 9f770e862954f07e8a7cce36aedd4879b10641c6 Mon Sep 17 00:00:00 2001
From bbbab7648b18d274e5751e81e947ce77dd8d80c8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 19 Feb 2022 08:20:25 -0500
Subject: [PATCH] Add new mechanism to fake vendor props on a per-process basis

View file

@ -1,7 +1,7 @@
From 875011b65d3839871b488b18d483fd56f2306a7b Mon Sep 17 00:00:00 2001
From 5aedcf873df4aad8d0acdeb0e89be8833a2a7c1c Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 24 Aug 2022 15:42:39 -0400
Subject: [PATCH 1/6] APM: Optionally force-load audio policy for system-side
Subject: [PATCH 1/8] APM: Optionally force-load audio policy for system-side
bt audio HAL
Required to support our system-side bt audio implementation, i.e.
@ -14,7 +14,7 @@ Change-Id: I279fff541a531f922f3fa55b8f14d00237db59ff
1 file changed, 25 insertions(+)
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
index 6f19a7a145..08836377b7 100644
index 6f19a7a..0883637 100644
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
@@ -25,6 +25,7 @@

View file

@ -1,7 +1,7 @@
From d24b962cb20fb0a3e807d05c534f43f8bd0ce350 Mon Sep 17 00:00:00 2001
From a9bdfa4670444e013cb6237fa646fcb2a2153a17 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Thu, 25 Aug 2022 13:30:29 -0400
Subject: [PATCH 2/6] APM: Remove A2DP audio ports from the primary HAL
Subject: [PATCH 2/8] APM: Remove A2DP audio ports from the primary HAL
These ports defined in the primary HAL are intended for A2DP offloading,
however they do not work in general on GSIs, and will interfere with
@ -16,7 +16,7 @@ Change-Id: I3305594a17285da113167b419543543f0ef71122
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
index 08836377b7..0f7c903909 100644
index 0883637..0f7c903 100644
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
@@ -26,6 +26,7 @@

View file

@ -1,7 +1,7 @@
From b3bc05d8e2bb94c4992a12a943d16c27554fa54d Mon Sep 17 00:00:00 2001
From e886147a98af0e71dfbab1de9ebf214755ef746d Mon Sep 17 00:00:00 2001
From: ponces <ponces26@gmail.com>
Date: Mon, 24 Oct 2022 09:38:34 +0100
Subject: [PATCH 3/6] voip: Fix high pitched voice on Qualcomm devices
Subject: [PATCH 3/8] voip: Fix high pitched voice on Qualcomm devices
Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2
---
@ -9,7 +9,7 @@ Change-Id: I6d314912169776b76d07d8c0301ec5249c1870a2
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
index 0f7c903909..c4474cf1c2 100644
index 0f7c903..c4474cf 100644
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
@@ -252,6 +252,7 @@ private:

View file

@ -1,7 +1,7 @@
From 88eee2c55fa4e85aeef0df59c9b788b2b7868c6b Mon Sep 17 00:00:00 2001
From 51870deb78ed9546df6a332594af2e83307ff5f3 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 5 Aug 2019 18:09:50 +0200
Subject: [PATCH 4/6] Fix BT in-call on CAF devices
Subject: [PATCH 4/8] Fix BT in-call on CAF devices
See https://github.com/phhusson/treble_experimentations/issues/374
@ -16,7 +16,7 @@ Change-Id: Ifea0f88276ec9a0811f3cb1973c4b06f2c82077b
1 file changed, 93 insertions(+)
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
index c4474cf1c2..c1df8f278b 100644
index c4474cf..c1df8f2 100644
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
@@ -676,6 +676,98 @@ std::variant<status_t, RouteTraits::Element> PolicySerializer::deserialize<Route

View file

@ -1,7 +1,7 @@
From 79a670c8e20a8eb68849be7e3f9b4c0421d92073 Mon Sep 17 00:00:00 2001
From aaf84148267b166a878db401942235c54f62d3fe Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 21 Dec 2020 20:19:11 +0100
Subject: [PATCH 5/6] Make camera IDs filter-out optional
Subject: [PATCH 5/8] Make camera IDs filter-out optional
Nowadays most people have Camera 2 apps, and would like to have all
cameras, rather than limit which cameras are available.
@ -11,10 +11,10 @@ Add a property for that.
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
index a8d748028b..203a166a36 100644
index 536f56a..348116a 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
@@ -324,7 +324,9 @@ std::vector<std::string> CameraProviderManager::getAPI1CompatibleCameraDeviceIds
@@ -325,7 +325,9 @@ std::vector<std::string> CameraProviderManager::getAPI1CompatibleCameraDeviceIds
// API1 app doesn't handle logical and physical camera devices well. So
// for each camera facing, only take the first id advertised by HAL in
// all [logical, physical1, physical2, ...] id combos, and filter out the rest.
@ -25,7 +25,7 @@ index a8d748028b..203a166a36 100644
collectDeviceIdsLocked(providerDeviceIds, publicDeviceIds, systemDeviceIds);
}
auto sortFunc =
@@ -1108,10 +1110,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame
@@ -1133,10 +1135,12 @@ SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCame
// Go through the capabilities and check if it has
// ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA

View file

@ -1,7 +1,7 @@
From d483a03149f587b3078d81256ac356382aafdd6b Mon Sep 17 00:00:00 2001
From d810036326afc526b8092fc2c5e0b1f18dcc258b Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Thu, 18 Aug 2022 15:44:46 -0400
Subject: [PATCH 6/6] APM: Restore S, R and Q behavior respectively for
Subject: [PATCH 6/8] APM: Restore S, R and Q behavior respectively for
telephony audio
This conditionally reverts part of b2e5cb (T), 51c9cc (S) and afd4ce (R)
@ -36,10 +36,10 @@ Change-Id: I56d36d2aef4319935cb88a3e4771b23c6d5b2145
2 files changed, 148 insertions(+), 61 deletions(-)
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 73b574ccfa..4c44acb966 100644
index ac8062e..28f703f 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -746,6 +746,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
@@ -754,6 +754,17 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
ALOGV("%s device rxDevice %s txDevice %s", __func__,
rxDevices.itemAt(0)->toString().c_str(), txSourceDevice->toString().c_str());
@ -57,7 +57,7 @@ index 73b574ccfa..4c44acb966 100644
auto telephonyRxModule =
mHwModules.getModuleForDeviceType(AUDIO_DEVICE_IN_TELEPHONY_RX, AUDIO_FORMAT_DEFAULT);
auto telephonyTxModule =
@@ -768,9 +779,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
@@ -776,9 +787,20 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
ALOGE("%s() no telephony Tx and/or RX device", __func__);
return INVALID_OPERATION;
}
@ -81,7 +81,7 @@ index 73b574ccfa..4c44acb966 100644
} else {
// If the RX device is on the primary HW module, then use legacy routing method for
// voice calls via setOutputDevice() on primary output.
@@ -794,7 +816,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
@@ -802,7 +824,14 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
}
muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs);
} else { // create RX path audio patch
@ -97,7 +97,7 @@ index 73b574ccfa..4c44acb966 100644
// If the TX device is on the primary HW module but RX device is
// on other HW module, SinkMetaData of telephony input should handle it
// assuming the device uses audio HAL V5.0 and above
@@ -810,6 +839,13 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
@@ -818,6 +847,13 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
}
}
connectTelephonyTxAudioSource(txSourceDevice, txSinkDevice, delayMs);
@ -111,7 +111,7 @@ index 73b574ccfa..4c44acb966 100644
} else if (fix_call_audio_patch()) {
disconnectTelephonyAudioSource(mCallTxSourceClient);
}
@@ -819,6 +855,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
@@ -827,6 +863,36 @@ status_t AudioPolicyManager::updateCallRoutingInternal(
return NO_ERROR;
}
@ -148,7 +148,7 @@ index 73b574ccfa..4c44acb966 100644
bool AudioPolicyManager::isDeviceOfModule(
const sp<DeviceDescriptor>& devDesc, const char *moduleId) const {
sp<HwModule> module = mHwModules.getModuleFromName(moduleId);
@@ -5636,83 +5702,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *
@@ -5689,83 +5755,101 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *
// in config XML to reach the sink so that is can be declared as available.
audio_io_handle_t output = AUDIO_IO_HANDLE_NONE;
sp<SwAudioOutputDescriptor> outputDesc;
@ -308,10 +308,10 @@ index 73b574ccfa..4c44acb966 100644
AUDIO_STREAM_PATCH;
patchBuilder.addSource(srcMixPortConfig);
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
index 44863eedc2..e8024942fd 100644
index da60c06..6b0f1c8 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
@@ -1017,6 +1017,9 @@ protected:
@@ -1018,6 +1018,9 @@ protected:
SoundTriggerSessionCollection mSoundTriggerSessions;

View file

@ -0,0 +1,82 @@
From 3892674371ea7263af2dc60006483ad82e666dc0 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 13 Jun 2025 18:32:08 -0400
Subject: [PATCH 7/8] Revert "Remove framework support for audio HIDL HAL V5"
This reverts commit 559e9765c5352686c9b3954a3c930f614c338196.
---
media/libaudiohal/Android.bp | 1 +
media/libaudiohal/FactoryHal.cpp | 3 ++-
media/libaudiohal/impl/Android.bp | 26 ++++++++++++++++++++++++++
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/media/libaudiohal/Android.bp b/media/libaudiohal/Android.bp
index 609db07..7d7befa 100644
--- a/media/libaudiohal/Android.bp
+++ b/media/libaudiohal/Android.bp
@@ -23,6 +23,7 @@ cc_library_shared {
],
required: [
+ "libaudiohal@5.0",
"libaudiohal@6.0",
"libaudiohal@7.0",
"libaudiohal@7.1",
diff --git a/media/libaudiohal/FactoryHal.cpp b/media/libaudiohal/FactoryHal.cpp
index 2c30693..15cb297 100644
--- a/media/libaudiohal/FactoryHal.cpp
+++ b/media/libaudiohal/FactoryHal.cpp
@@ -50,11 +50,12 @@ using InterfaceName = std::pair<std::string, std::string>;
* This list need to keep sync with AudioHalVersionInfo.VERSIONS in
* media/java/android/media/AudioHalVersionInfo.java.
*/
-static const std::array<AudioHalVersionInfo, 4> sAudioHALVersions = {
+static const std::array<AudioHalVersionInfo, 5> sAudioHALVersions = {
AudioHalVersionInfo(AudioHalVersionInfo::Type::AIDL, 1, 0),
AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 1),
AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 0),
AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 6, 0),
+ AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 5, 0),
};
static const std::map<AudioHalVersionInfo::Type, InterfaceName> sDevicesHALInterfaces = {
diff --git a/media/libaudiohal/impl/Android.bp b/media/libaudiohal/impl/Android.bp
index 00f3929..3585402 100644
--- a/media/libaudiohal/impl/Android.bp
+++ b/media/libaudiohal/impl/Android.bp
@@ -82,6 +82,32 @@ cc_defaults {
],
}
+cc_library_shared {
+ name: "libaudiohal@5.0",
+ defaults: [
+ "libaudiohal_default",
+ "libaudiohal_hidl_default",
+ ],
+ srcs: [
+ ":audio_core_hal_client_sources",
+ ":audio_effect_hidl_hal_client_sources",
+ "EffectsFactoryHalEntry.cpp",
+ ],
+ shared_libs: [
+ "android.hardware.audio.common@5.0",
+ "android.hardware.audio.common@5.0-util",
+ "android.hardware.audio.effect@5.0",
+ "android.hardware.audio.effect@5.0-util",
+ "android.hardware.audio@5.0",
+ "android.hardware.audio@5.0-util",
+ ],
+ cflags: [
+ "-DMAJOR_VERSION=5",
+ "-DMINOR_VERSION=0",
+ "-include common/all-versions/VersionMacro.h",
+ ],
+}
+
cc_library_shared {
name: "libaudiohal@6.0",
defaults: [
--
2.48.1

View file

@ -0,0 +1,58 @@
From cf2151431fc074fc8579707f4ca796fe4083585a Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 21 Jun 2025 16:48:04 -0400
Subject: [PATCH 8/8] Tell Unihertz/Agold we are not a GSI. Fixes aux cam on
Jelly Max
Change-Id: I0feb30f978d4fd0b71c731dc3de70fda744099df
---
services/camera/libcameraservice/Android.bp | 1 +
.../common/aidl/AidlProviderInfo.cpp | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index 0606d74..7b91ad6 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -113,6 +113,7 @@ cc_defaults {
"android.hardware.camera.provider@2.6",
"android.hardware.camera.provider@2.7",
"android.hardware.camera.provider-V3-ndk",
+ "vendor.mediatek.hardware.agolddaemon-V1-ndk",
"libaidlcommonsupport",
"libbinderthreadstateutils",
"libcameraservice_device_independent",
diff --git a/services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp b/services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp
index b9e8cdd..34059e1 100644
--- a/services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp
+++ b/services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp
@@ -34,6 +34,8 @@
#include <utils/SessionConfigurationUtils.h>
#include <utils/Trace.h>
+#include <aidl/vendor/mediatek/hardware/agolddaemon/IAgoldDaemon.h>
+
namespace {
const bool kEnableLazyHal(property_get_bool("ro.camera.enableLazyHal", false));
} // anonymous namespace
@@ -159,6 +161,17 @@ status_t AidlProviderInfo::initializeAidlProvider(
__FUNCTION__, mProviderName.c_str(), mDeviceState);
notifyDeviceStateChange(currentDeviceState);
+
+ if (true) {
+ auto svc = aidl::vendor::mediatek::hardware::agolddaemon::IAgoldDaemon::fromBinder(
+ ndk::SpAIBinder(AServiceManager_checkService("vendor.mediatek.hardware.agolddaemon.IAgoldDaemon/default")));
+
+ if (svc != nullptr) {
+ ALOGE("Got agold aidl hal");
+ svc->setNotGsi("NotGsi");
+ }
+ }
+
res = setUpVendorTags();
if (res != OK) {
ALOGE("%s: Unable to set up vendor tags from provider '%s'",
--
2.48.1

View file

@ -1,4 +1,4 @@
From 3c6a1bbffa88d93be209b41b911f192618a3b8e6 Mon Sep 17 00:00:00 2001
From 6f7346b355fdf0994e6d930cf0e6b254d82475fe Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Tue, 12 Oct 2021 21:37:22 -0400
Subject: [PATCH 01/11] PackageParser: support glob matching for properties
@ -9,7 +9,7 @@ Needed to make phh's vendor overlays work
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 4b579e7db..8176cf8e8 100644
index 0507fb8b00b8..4d0a2e440720 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2545,8 +2545,16 @@ public class PackageParser {

View file

@ -1,4 +1,4 @@
From 6d3e460a5e0df0f6ac2f653d0577560a2c8f32d3 Mon Sep 17 00:00:00 2001
From bfa9602d23331fff304f90f2505facdbece2208a Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Fri, 2 Sep 2022 21:36:06 -0400
Subject: [PATCH 02/11] FrameworkParsingPackageUtils: Add glob matching support
@ -13,7 +13,7 @@ Change-Id: Ie8679c0ffe03cead4a68bd2d0eb429f05af2d417
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
index e30f871b6..a2979f695 100644
index 153dd9a93490..900151440ca9 100644
--- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
+++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
@@ -215,8 +215,16 @@ public class FrameworkParsingPackageUtils {

View file

@ -1,4 +1,4 @@
From 176fce488f4206d10e3d4873bce3a43a97540890 Mon Sep 17 00:00:00 2001
From 9924588f49088c1b4eeba9a113c19de2874ec832 Mon Sep 17 00:00:00 2001
From: Oliver Scott <olivercscott@gmail.com>
Date: Thu, 8 Jul 2021 10:41:43 -0400
Subject: [PATCH 03/11] Global VPN feature [1/2]
@ -22,16 +22,16 @@ Date: 2021-08-27 16:30:22 -0400
Change-Id: I42616cc1f4e39e1dad739d81f6d5c55e218be995
Signed-off-by: Mohammad Hasan Keramat J <ikeramat@protonmail.com>
---
core/java/android/provider/Settings.java | 6 +++
.../policy/SecurityControllerImpl.java | 8 +++-
.../com/android/server/connectivity/Vpn.java | 37 +++++++++++++++++--
3 files changed, 46 insertions(+), 5 deletions(-)
core/java/android/provider/Settings.java | 6 ++++
.../policy/SecurityControllerImpl.java | 8 ++++-
.../com/android/server/connectivity/Vpn.java | 35 ++++++++++++++++---
3 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4acb6312f..dbc9845a8 100644
index e7bca1419418..2d05e3e3e17f 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -18232,6 +18232,12 @@ public final class Settings {
@@ -18572,6 +18572,12 @@ public final class Settings {
CLOCKWORK_HOME_READY,
};
@ -45,10 +45,10 @@ index 4acb6312f..dbc9845a8 100644
* Keys we no longer back up under the current schema, but want to continue to
* process when restoring historical backup datasets.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
index f39762766..c7dc809c9 100644
index ab5b3499d9c2..38eff0039fb6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java
@@ -44,6 +44,7 @@ import android.os.Handler;
@@ -45,6 +45,7 @@ import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@ -56,7 +56,7 @@ index f39762766..c7dc809c9 100644
import android.security.KeyChain;
import android.util.ArrayMap;
import android.util.Log;
@@ -383,8 +384,13 @@ public class SecurityControllerImpl implements SecurityController {
@@ -393,8 +394,13 @@ public class SecurityControllerImpl implements SecurityController {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUserId = newUserId;
@ -72,7 +72,7 @@ index f39762766..c7dc809c9 100644
mVpnUserId = newUserInfo.restrictedProfileParentId;
} else {
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 4c5f65285..1c546be6f 100644
index aa985907071f..9207bfea3b01 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -778,6 +778,15 @@ public class Vpn {
@ -91,7 +91,7 @@ index 4c5f65285..1c546be6f 100644
/**
* Checks if a VPN app supports always-on mode.
*
@@ -1720,6 +1729,7 @@ public class Vpn {
@@ -1724,6 +1733,7 @@ public class Vpn {
try {
// Restricted users are not allowed to create VPNs, they are tied to Owner
enforceNotRestrictedUser();
@ -99,7 +99,7 @@ index 4c5f65285..1c546be6f 100644
final PackageManager packageManager = mUserIdContext.getPackageManager();
if (packageManager == null) {
@@ -1870,7 +1880,7 @@ public class Vpn {
@@ -1874,7 +1884,7 @@ public class Vpn {
addUserToRanges(ranges, userId, allowedApplications, disallowedApplications);
// If the user can have restricted profiles, assign all its restricted profiles too
@ -108,7 +108,7 @@ index 4c5f65285..1c546be6f 100644
final long token = Binder.clearCallingIdentity();
List<UserInfo> users;
try {
@@ -1879,7 +1889,8 @@ public class Vpn {
@@ -1883,7 +1893,8 @@ public class Vpn {
Binder.restoreCallingIdentity(token);
}
for (UserInfo user : users) {
@ -118,27 +118,25 @@ index 4c5f65285..1c546be6f 100644
addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications);
}
}
@@ -1960,7 +1971,8 @@ public class Vpn {
public void onUserAdded(int userId) {
// If the user is restricted tie them to the parent user's VPN
UserInfo user = mUserManager.getUserInfo(userId);
@@ -1968,7 +1979,7 @@ public class Vpn {
Log.e(TAG, "Can not retrieve UserInfo for userId=" + userId);
return;
}
- if (user.isRestricted() && user.restrictedProfileParentId == mUserId) {
+ if ((user.isRestricted() && user.restrictedProfileParentId == mUserId) ||
+ isGlobalVpn()) {
+ if ((user.isRestricted() && user.restrictedProfileParentId == mUserId) || isGlobalVpn()) {
synchronized(Vpn.this) {
final Set<Range<Integer>> existingRanges = mNetworkCapabilities.getUids();
if (existingRanges != null) {
@@ -1989,7 +2001,8 @@ public class Vpn {
public void onUserRemoved(int userId) {
// clean up if restricted
UserInfo user = mUserManager.getUserInfo(userId);
@@ -2005,7 +2016,7 @@ public class Vpn {
Log.e(TAG, "Can not retrieve UserInfo for userId=" + userId);
return;
}
- if (user.isRestricted() && user.restrictedProfileParentId == mUserId) {
+ if ((user.isRestricted() && user.restrictedProfileParentId == mUserId) ||
+ isGlobalVpn()) {
+ if ((user.isRestricted() && user.restrictedProfileParentId == mUserId) || isGlobalVpn()) {
synchronized(Vpn.this) {
final Set<Range<Integer>> existingRanges = mNetworkCapabilities.getUids();
if (existingRanges != null) {
@@ -2414,6 +2427,17 @@ public class Vpn {
@@ -2430,6 +2441,17 @@ public class Vpn {
}
}
@ -156,7 +154,7 @@ index 4c5f65285..1c546be6f 100644
/**
* Start legacy VPN, controlling native daemons as needed. Creates a
* secondary thread to perform connection work, returning quickly.
@@ -2497,6 +2521,7 @@ public class Vpn {
@@ -2513,6 +2535,7 @@ public class Vpn {
new UserHandle(mUserId))) {
throw new SecurityException("Restricted users cannot establish VPNs");
}
@ -164,7 +162,7 @@ index 4c5f65285..1c546be6f 100644
// Load certificates.
String privateKey = "";
@@ -4039,6 +4064,7 @@ public class Vpn {
@@ -4055,6 +4078,7 @@ public class Vpn {
verifyCallingUidAndPackage(packageName);
enforceNotRestrictedUser();
@ -172,7 +170,7 @@ index 4c5f65285..1c546be6f 100644
validateRequiredFeatures(profile);
if (profile.isRestrictedToTestNetworks) {
@@ -4081,6 +4107,7 @@ public class Vpn {
@@ -4097,6 +4121,7 @@ public class Vpn {
verifyCallingUidAndPackage(packageName);
enforceNotRestrictedUser();
@ -180,7 +178,7 @@ index 4c5f65285..1c546be6f 100644
final long token = Binder.clearCallingIdentity();
try {
@@ -4150,6 +4177,7 @@ public class Vpn {
@@ -4166,6 +4191,7 @@ public class Vpn {
requireNonNull(packageName, "No package name provided");
enforceNotRestrictedUser();
@ -188,7 +186,7 @@ index 4c5f65285..1c546be6f 100644
// Prepare VPN for startup
if (!prepare(packageName, null /* newPackage */, VpnManager.TYPE_VPN_PLATFORM)) {
@@ -4272,6 +4300,7 @@ public class Vpn {
@@ -4288,6 +4314,7 @@ public class Vpn {
requireNonNull(packageName, "No package name provided");
enforceNotRestrictedUser();

View file

@ -1,4 +1,4 @@
From cca38c720efc73912913a59be2a3d261017c2863 Mon Sep 17 00:00:00 2001
From 47ebd60dcd07f04fb3e1cc33f590e5e8ba22b640 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Wed, 2 Aug 2023 20:59:53 +0800
Subject: [PATCH 04/11] Restore getSimStateForSlotIndex in SubscriptionManager
@ -11,10 +11,10 @@ Change-Id: I41bac57c68055f369232359a464642daab94403b
1 file changed, 14 insertions(+)
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index e0af22369..2175b3d96 100644
index e04d285d6632..36826e8ff43d 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -2913,6 +2913,20 @@ public class SubscriptionManager {
@@ -2968,6 +2968,20 @@ public class SubscriptionManager {
return TelephonyManager.getDefault().isNetworkRoaming(subId);
}

View file

@ -1,4 +1,4 @@
From f9a12ae1920588f2d75849462abf7d2ba9d0373b Mon Sep 17 00:00:00 2001
From 3f785dd182115fcb0a4197294e2bda4d0bd0247c Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 12 Aug 2023 20:11:17 +0800
Subject: [PATCH 05/11] Add runWithCleanCallingIdentity variant with both
@ -12,7 +12,7 @@ Change-Id: If444290787025e130dce4bdeaf92372ae32793fe
1 file changed, 30 insertions(+)
diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
index 422433891..3bbecf0f2 100644
index 4224338918f4..3bbecf0f2065 100644
--- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
+++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
@@ -47,7 +47,9 @@ import com.android.internal.telephony.ITelephony;

View file

@ -1,42 +0,0 @@
From 45736b5d760fdac0ec405f1620942ff9a7c023d9 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 22 Sep 2024 22:53:01 -0400
Subject: [PATCH 06/11] AuthService: HIDL and AIDL fingerprint services are
mutually exclusive
...and make sure that we prioritize AIDL over HIDL. This is essential
for GSIs to boot on newer devices while having the HIDL property set for
compatibility with older ones.
Change-Id: I834297a44674820d813d8f6d376dfd294f084f3b
---
.../com/android/server/biometrics/AuthService.java | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index 2d802b21c..0730d634f 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -908,15 +908,13 @@ public class AuthService extends SystemService {
handlerProvider.getFingerprintHandler().post(() -> {
final FingerprintSensorConfigurations mFingerprintSensorConfigurations =
- new FingerprintSensorConfigurations(!(hidlConfigStrings != null
- && hidlConfigStrings.length > 0));
-
- if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
- mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context);
- }
+ new FingerprintSensorConfigurations(fingerprintAidlInstances != null
+ && fingerprintAidlInstances.length > 0);
if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) {
mFingerprintSensorConfigurations.addAidlSensors(fingerprintAidlInstances);
+ } else if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
+ mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context);
}
if (fingerprintService != null) {
--
2.48.1

View file

@ -1,7 +1,7 @@
From 6cd16322e3d44ea9d96c74af96a967e48fa88d44 Mon Sep 17 00:00:00 2001
From 412a850139e75eada66aed3f50847051835bf8c9 Mon Sep 17 00:00:00 2001
From: dhacker29 <dhackerdvm@gmail.com>
Date: Tue, 24 Nov 2015 01:53:47 -0500
Subject: [PATCH 07/11] fw/b: Use ro.build.version.incremental to signal OTA
Subject: [PATCH 06/11] fw/b: Use ro.build.version.incremental to signal OTA
upgrades
Co-authored-by: maxwen <max.weninger@gmail.com>
@ -19,7 +19,7 @@ Change-Id: If0eb969ba509981f9209ffa37a949d9042ef4c2a
7 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java
index 9e6c91f4e..7459b0e05 100644
index 9e6c91f4ec31..7459b0e05e3a 100644
--- a/core/java/android/app/admin/SystemUpdateInfo.java
+++ b/core/java/android/app/admin/SystemUpdateInfo.java
@@ -133,7 +133,7 @@ public final class SystemUpdateInfo implements Parcelable {
@ -41,7 +41,7 @@ index 9e6c91f4e..7459b0e05 100644
}
try {
diff --git a/core/java/android/content/pm/PackagePartitions.java b/core/java/android/content/pm/PackagePartitions.java
index ff80e614b..da3b68ecf 100644
index ff80e614be58..da3b68ecf789 100644
--- a/core/java/android/content/pm/PackagePartitions.java
+++ b/core/java/android/content/pm/PackagePartitions.java
@@ -131,7 +131,7 @@ public class PackagePartitions {
@ -54,7 +54,7 @@ index ff80e614b..da3b68ecf 100644
}
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
index ce9130ad5..737ecae1c 100644
index ce9130ad5cbf..737ecae1cc94 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
@@ -117,7 +117,7 @@ public class AppWidgetXmlUtil {
@ -76,10 +76,10 @@ index ce9130ad5..737ecae1c 100644
}
final AppWidgetProviderInfo info = new AppWidgetProviderInfo();
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index aadf11227..8b0c4f42b 100644
index b60812c1bb53..9e1843f3a91e 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2239,7 +2239,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
@@ -2244,7 +2244,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
if (mIsUpgrade) {
PackageManagerServiceUtils.logCriticalInfo(Log.INFO,
"Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to "
@ -89,7 +89,7 @@ index aadf11227..8b0c4f42b 100644
}
mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1;
mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper,
@@ -2397,7 +2398,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
@@ -2402,7 +2403,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
| Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES);
}
}
@ -99,10 +99,10 @@ index aadf11227..8b0c4f42b 100644
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 7af39f74d..4bd83e739 100644
index 2ecdb0b1a02a..d9d935a20058 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -1400,8 +1400,6 @@ public class PackageManagerServiceUtils {
@@ -1383,8 +1383,6 @@ public class PackageManagerServiceUtils {
// that starts with "eng." to signify that this is an engineering build and not
// destined for release.
if (isUserDebugBuild && incrementalVersion.startsWith("eng.")) {
@ -111,7 +111,7 @@ index 7af39f74d..4bd83e739 100644
// Heuristic: If the /system directory has been modified recently due to an "adb sync"
// or a regular make, then blow away the cache. Note that mtimes are *NOT* reliable
// in general and should not be used for production changes. In this specific case,
@@ -1409,6 +1407,7 @@ public class PackageManagerServiceUtils {
@@ -1392,6 +1390,7 @@ public class PackageManagerServiceUtils {
File frameworkDir =
new File(Environment.getRootDirectory(), "framework");
if (cacheDir.lastModified() < frameworkDir.lastModified()) {
@ -120,10 +120,10 @@ index 7af39f74d..4bd83e739 100644
cacheDir = FileUtils.createDir(cacheBaseDir, cacheName);
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 485a28070..78086791a 100644
index 92257f1ee2dd..bf226ca39054 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -485,7 +485,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
@@ -486,7 +486,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
public void forceCurrent() {
sdkVersion = Build.VERSION.SDK_INT;
databaseVersion = CURRENT_DATABASE_VERSION;
@ -133,10 +133,10 @@ index 485a28070..78086791a 100644
}
}
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index 1052c94d7..21481d216 100644
index 66e9e772e063..f539cc14845a 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -5259,7 +5259,7 @@ public class ShortcutService extends IShortcutService.Stub {
@@ -5089,7 +5089,7 @@ public class ShortcutService extends IShortcutService.Stub {
// Injection point.
String injectBuildFingerprint() {
@ -144,7 +144,7 @@ index 1052c94d7..21481d216 100644
+ return Build.VERSION.INCREMENTAL;
}
final void wtf(String message) {
// Injection point.
--
2.48.1

View file

@ -1,7 +1,7 @@
From 8b3f59482cf7f27406d9a8c9ef717e6bc70cfb88 Mon Sep 17 00:00:00 2001
From 51dd8381b58447069c27238be42df73a0310dac8 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sat, 21 Dec 2024 11:04:35 -0500
Subject: [PATCH 08/11] Add support for treating virtual biometric sensors as
Subject: [PATCH 07/11] Add support for treating virtual biometric sensors as
real ones
This happens on Unihertz Jelly Max. They forgot to change their sensor
@ -13,7 +13,7 @@ Change-Id: I106d41cd078e6b1e354c72ec35fa240a44397c5e
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java
index 48c5887d8..bec56d9a6 100644
index 586830c8d189..d7fcfdb6df2b 100644
--- a/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java
+++ b/core/java/android/hardware/fingerprint/FingerprintSensorConfigurations.java
@@ -29,6 +29,7 @@ import android.os.Parcel;

View file

@ -1,7 +1,7 @@
From 2f4c395069d1dfd7cce9a896f17868aa4aaf91c4 Mon Sep 17 00:00:00 2001
From 6ffe64fa1e8a012357eb65dcf5ada3e060264a22 Mon Sep 17 00:00:00 2001
From: Pranav Vashi <neobuddy89@gmail.com>
Date: Sat, 21 Sep 2024 13:44:09 +0530
Subject: [PATCH 09/11] WebView: Add check before setting default or fallback
Subject: [PATCH 08/11] WebView: Add check before setting default or fallback
provider
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
@ -10,7 +10,7 @@ Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
index 9e8dc2690..9e415bf63 100644
index 9e8dc2690a9d..9e415bf63583 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
@@ -15,6 +15,7 @@

View file

@ -1,7 +1,7 @@
From 30058cdf576d1496ca63560f878eacf940e36ea2 Mon Sep 17 00:00:00 2001
From 2d73a8d2aaee7e5f2d7fbb1b691a2e4b4b0c73d3 Mon Sep 17 00:00:00 2001
From: LuK1337 <priv.luk@gmail.com>
Date: Mon, 19 Feb 2024 16:20:04 +0100
Subject: [PATCH 10/11] Allow signature spoofing for microG Companion/Services
Subject: [PATCH 09/11] Allow signature spoofing for microG Companion/Services
This patch enables signature spoofing when the following conditions are
met:
@ -23,7 +23,7 @@ Change-Id: I8fc82ed266a2cc59636b662c7ea7e29c94f509b5
create mode 100644 services/core/jni/com_android_server_pm_ComputerEngine.cpp
diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java
index cc4c2b5bf..57263da93 100644
index 068d68d25017..befbf15e7793 100644
--- a/services/core/java/com/android/server/pm/AppsFilterImpl.java
+++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java
@@ -36,6 +36,7 @@ import static com.android.server.pm.AppsFilterUtils.canQueryAsUpdateOwner;
@ -34,7 +34,7 @@ index cc4c2b5bf..57263da93 100644
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -599,6 +600,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
@@ -604,6 +605,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
newIsForceQueryable = mForceQueryable.contains(newPkgSetting.getAppId())
/* shared user that is already force queryable */
|| newPkgSetting.isForceQueryableOverride() /* adb override */
@ -43,7 +43,7 @@ index cc4c2b5bf..57263da93 100644
|| newPkg.isForceQueryable()
|| ArrayUtils.contains(mForceQueryableByDevicePackageNames,
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index be2f58dc2..3eb3df412 100644
index 38ac0473d1a3..f9950d438b0e 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -103,6 +103,7 @@ import android.content.pm.UserPackage;
@ -136,7 +136,7 @@ index be2f58dc2..3eb3df412 100644
} else if ((flags & (MATCH_UNINSTALLED_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0
&& PackageUserStateUtils.isAvailable(state, flags)) {
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 4c0cee404..a4d192c8e 100644
index 2606a5aca277..9057f4fe107f 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -71,6 +71,7 @@ cc_library_static {
@ -147,7 +147,7 @@ index 4c0cee404..a4d192c8e 100644
"com_android_server_pm_PackageManagerShellCommandDataLoader.cpp",
"com_android_server_sensor_SensorService.cpp",
"com_android_server_wm_TaskFpsCallbackController.cpp",
@@ -94,6 +95,12 @@ cc_library_static {
@@ -95,6 +96,12 @@ cc_library_static {
header_libs: [
"bionic_libc_platform_headers",
],
@ -162,7 +162,7 @@ index 4c0cee404..a4d192c8e 100644
cc_defaults {
diff --git a/services/core/jni/com_android_server_pm_ComputerEngine.cpp b/services/core/jni/com_android_server_pm_ComputerEngine.cpp
new file mode 100644
index 000000000..bbe298097
index 000000000000..bbe298097a2a
--- /dev/null
+++ b/services/core/jni/com_android_server_pm_ComputerEngine.cpp
@@ -0,0 +1,38 @@
@ -205,10 +205,10 @@ index 000000000..bbe298097
+
+} // namespace android
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index 09fd8d4ac..0d61a13d2 100644
index 569383e71a06..d9b9542d86fe 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -58,6 +58,7 @@ int register_android_server_utils_AnrTimer(JNIEnv *env);
@@ -59,6 +59,7 @@ int register_android_server_utils_AnrTimer(JNIEnv *env);
int register_android_server_utils_LazyJniRegistrar(JNIEnv* env);
int register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(JNIEnv* env);
int register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(JNIEnv* env);
@ -216,7 +216,7 @@ index 09fd8d4ac..0d61a13d2 100644
int register_android_server_com_android_server_pm_PackageManagerShellCommandDataLoader(JNIEnv* env);
int register_android_server_AdbDebuggingManager(JNIEnv* env);
int register_android_server_FaceService(JNIEnv* env);
@@ -124,6 +125,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
@@ -127,6 +128,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
register_android_server_utils_LazyJniRegistrar(env);
register_com_android_server_soundtrigger_middleware_AudioSessionProviderImpl(env);
register_com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker(env);

View file

@ -1,7 +1,7 @@
From 31cfef8a4245e49b99fc36cc8eaf7b0452ae9985 Mon Sep 17 00:00:00 2001
From 0c8b6d82028fe1a2bd172053a1387a5708bb66b2 Mon Sep 17 00:00:00 2001
From: Jonathan Klee <jonathan.klee@e.email>
Date: Thu, 12 Dec 2024 15:27:57 +0100
Subject: [PATCH 11/11] Allow spoofing signingInfo for microG
Subject: [PATCH 10/11] Allow spoofing signingInfo for microG
Companion/Services
- Spoof PackageInfo signingInfo + signatures so that
@ -14,7 +14,7 @@ Signed-off-by: althafvly <althafvly@gmail.com>
1 file changed, 13 insertions(+)
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 3eb3df412..6f5813065 100644
index f9950d438b0e..7117beecff1c 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -170,6 +170,7 @@ import java.io.FileOutputStream;

View file

@ -0,0 +1,37 @@
From edb6d1c2d1fc4a8f890ec253844db569c846523e Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 3 Dec 2022 17:13:24 -0500
Subject: [PATCH 11/11] Set old fingerprint sensors to security "strong"
This allows removing config_biometric_sensors from overlays, which led
to Pixels not booting, because they are using AIDL biometric sensor, and
despite its name, config_biometric_sensors is HIDL-specific
---
.../core/java/com/android/server/biometrics/AuthService.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index b6768c9c087a..bc9684974fca 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -753,7 +753,7 @@ public class AuthService extends SystemService {
final int firstApiLevel = SystemProperties.getInt(SYSPROP_FIRST_API_LEVEL, 0);
final int apiLevel = SystemProperties.getInt(SYSPROP_API_LEVEL, firstApiLevel);
String[] configStrings = mInjector.getConfiguration(getContext());
- if (configStrings.length == 0 && apiLevel == Build.VERSION_CODES.R) {
+ if (configStrings.length == 0 && apiLevel <= Build.VERSION_CODES.R) {
// For backwards compatibility with R where biometrics could work without being
// configured in config_biometric_sensors. In the absence of a vendor provided
// configuration, we assume the weakest biometric strength (i.e. convenience).
@@ -938,7 +938,7 @@ public class AuthService extends SystemService {
if (pm.hasSystemFeature(PackageManager.FEATURE_FACE)) {
modalities.add(String.valueOf(BiometricAuthenticator.TYPE_FACE));
}
- final String strength = String.valueOf(Authenticators.BIOMETRIC_CONVENIENCE);
+ final String strength = String.valueOf(Authenticators.BIOMETRIC_STRONG);
final String[] configStrings = new String[modalities.size()];
for (int i = 0; i < modalities.size(); ++i) {
final String id = String.valueOf(i);
--
2.48.1

View file

@ -1,7 +1,7 @@
From b02d33fe80bed126c8caeebb51ced31e9b0c710e Mon Sep 17 00:00:00 2001
From b20bb707e2c065698157ae23ac057993aadbd93e Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 6 Oct 2024 09:06:48 -0400
Subject: [PATCH 1/7] sensorservice: Add support for ignoring broken sensors
Subject: [PATCH 1/6] sensorservice: Add support for ignoring broken sensors
This allows those sensors to be replaced by SensorFusion when possible.

View file

@ -1,7 +1,7 @@
From 050301ed102cd6b41756adf114243a3cfa8b70a6 Mon Sep 17 00:00:00 2001
From c81bdbe144dcf4300471510712b8fb03af8b0278 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 25 Nov 2023 08:15:28 -0500
Subject: [PATCH 2/7] Add MTK GED KPI support to fix broken Mediatek gpufreq
Subject: [PATCH 2/6] Add MTK GED KPI support to fix broken Mediatek gpufreq
Mediatek GPU scheduler likes to have the timestamps of the frames to be
able to adjust DVFS.
@ -24,7 +24,7 @@ Change-Id: Ic29a231ea8651efd598083611197aaa9e3c1fbbe
2 files changed, 205 insertions(+)
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index e41f9bbf43..d6863467a3 100644
index 83c6b57289..8847843ea8 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -26,6 +26,9 @@
@ -37,7 +37,7 @@ index e41f9bbf43..d6863467a3 100644
#include <inttypes.h>
@@ -50,6 +53,9 @@
@@ -51,6 +54,9 @@
#include <gui/LayerState.h>
#include <private/gui/ComposerService.h>
#include <private/gui/ComposerServiceAIDL.h>
@ -47,7 +47,7 @@ index e41f9bbf43..d6863467a3 100644
#include <com_android_graphics_libgui_flags.h>
@@ -76,6 +82,37 @@ bool isInterceptorRegistrationOp(int op) {
@@ -77,6 +83,37 @@ bool isInterceptorRegistrationOp(int op) {
}
} // namespace
@ -85,7 +85,7 @@ index e41f9bbf43..d6863467a3 100644
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
Surface::ProducerDeathListenerProxy::ProducerDeathListenerProxy(wp<SurfaceListener> surfaceListener)
@@ -147,6 +184,47 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll
@@ -151,6 +188,47 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll
mSwapIntervalZero = false;
mMaxBufferCount = NUM_BUFFER_SLOTS;
mSurfaceControlHandle = surfaceControlHandle;
@ -133,7 +133,7 @@ index e41f9bbf43..d6863467a3 100644
}
Surface::~Surface() {
@@ -699,6 +777,36 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) {
@@ -707,6 +785,36 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) {
}
}
@ -170,7 +170,7 @@ index e41f9bbf43..d6863467a3 100644
if (fence->isValid()) {
*fenceFd = fence->dup();
if (*fenceFd == -1) {
@@ -1187,6 +1295,60 @@ void Surface::onBufferQueuedLocked(int slot, sp<Fence> fence,
@@ -1207,6 +1315,60 @@ void Surface::onBufferQueuedLocked(int slot, sp<Fence> fence,
}
mQueueBufferCondition.broadcast();
@ -231,7 +231,7 @@ index e41f9bbf43..d6863467a3 100644
if (CC_UNLIKELY(atrace_is_tag_enabled(ATRACE_TAG_GRAPHICS))) {
static gui::FenceMonitor gpuCompletionThread("GPU completion");
@@ -2111,6 +2273,46 @@ int Surface::connect(int api, const sp<SurfaceListener>& listener, bool reportBu
@@ -2134,6 +2296,46 @@ int Surface::connect(int api, const sp<SurfaceListener>& listener, bool reportBu
}
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_PLATFORM_API_IMPROVEMENTS)
}
@ -279,10 +279,10 @@ index e41f9bbf43..d6863467a3 100644
mConnectedToCpu = true;
// Clear the dirty region in case we're switching from a non-CPU API
diff --git a/libs/gui/include/gui/Surface.h b/libs/gui/include/gui/Surface.h
index 14a351316d..e0843a8016 100644
index 3cfbed11bf..862376c6ec 100644
--- a/libs/gui/include/gui/Surface.h
+++ b/libs/gui/include/gui/Surface.h
@@ -742,6 +742,9 @@ protected:
@@ -753,6 +753,9 @@ protected:
// Buffers that are successfully dequeued/attached and handed to clients
std::unordered_set<int> mDequeuedSlots;

View file

@ -1,64 +1,91 @@
From b12faaf3064de58caf0f6bfaf7fcac5a47f5024d Mon Sep 17 00:00:00 2001
From 2ac47153cf897bfe24eab0dd5aae3ed9fdf88df4 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 12:54:56 -0400
Subject: [PATCH 4/7] Revert "Remove flag single_hop_screenshots"
Date: Sun, 15 Jun 2025 17:36:10 -0400
Subject: [PATCH 3/6] Revert "Remove flag single_hop_screenshots"
This reverts commit 16c4c32c55231dc241c386a0423710baa452b7de.
Change-Id: Ib1618cd4e1f83ba1f211a04429538b32e8de79da
Further changes have been made to SurfaceFlinger since that commit, for
example, removal of displayState and attachGainmap. This revert has been
adjusted accordingly, though not 100% sure everything is correct.
Change-Id: Ibdea8e3dec6ad4b85c43ad059847c63f934c3d24
Conflicts:
services/surfaceflinger/RegionSamplingThread.cpp
services/surfaceflinger/SurfaceFlinger.cpp
services/surfaceflinger/SurfaceFlinger.h
services/surfaceflinger/common/FlagManager.cpp
services/surfaceflinger/common/include/common/FlagManager.h
services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
---
.../surfaceflinger/RegionSamplingThread.cpp | 22 ++-
services/surfaceflinger/SurfaceFlinger.cpp | 184 ++++++++++++++----
.../surfaceflinger/RegionSamplingThread.cpp | 19 +-
services/surfaceflinger/SurfaceFlinger.cpp | 251 ++++++++++++------
services/surfaceflinger/SurfaceFlinger.h | 10 +-
.../surfaceflinger/common/FlagManager.cpp | 2 +
.../common/include/common/FlagManager.h | 1 +
.../tests/unittests/TestableSurfaceFlinger.h | 3 +-
6 files changed, 171 insertions(+), 51 deletions(-)
.../tests/unittests/TestableSurfaceFlinger.h | 2 +-
6 files changed, 195 insertions(+), 90 deletions(-)
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp
index 21d3396ebe..08f831c8e5 100644
index 615492a872..e266656b5d 100644
--- a/services/surfaceflinger/RegionSamplingThread.cpp
+++ b/services/surfaceflinger/RegionSamplingThread.cpp
@@ -353,13 +353,21 @@ void RegionSamplingThread::captureSample() {
sampledBounds.getSize(), ui::Dataspace::V0_SRGB, displayWeak,
RenderArea::Options::CAPTURE_SECURE_LAYERS);
@@ -355,11 +355,20 @@ void RegionSamplingThread::captureSample() {
screenshotArgs.isSecure = true;
screenshotArgs.seamlessTransition = false;
- std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
- auto displayState =
- mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
- FenceResult fenceResult =
- mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling, kGrayscale,
- kIsProtected, kAttachGainmap, nullptr, displayState, layers)
- mFlinger.getSnapshotsFromMainThread(screenshotArgs, getLayerSnapshotsFn, layers);
- FenceResult fenceResult = mFlinger.captureScreenshot(screenshotArgs, buffer, kRegionSampling,
- kGrayscale, kIsProtected, nullptr, layers)
- .get();
+ FenceResult fenceResult;
+ if (FlagManager::getInstance().single_hop_screenshot()) {
+ std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
+ auto displayState =
+ mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
+ fenceResult = mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling,
+ kGrayscale, kIsProtected, kAttachGainmap, nullptr,
+ displayState, layers)
+ mFlinger.getSnapshotsFromMainThread(screenshotArgs, getLayerSnapshotsFn, layers);
+ fenceResult = mFlinger.captureScreenshot(screenshotArgs, buffer, kRegionSampling,
+ kGrayscale, kIsProtected, nullptr, layers)
+ .get();
+ } else {
+ fenceResult = mFlinger.captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn,
+ buffer, kRegionSampling, kGrayscale,
+ kIsProtected, kAttachGainmap, nullptr)
+ fenceResult = mFlinger.captureScreenshotLegacy(screenshotArgs, getLayerSnapshotsFn, buffer,
+ kRegionSampling, kGrayscale,
+ kIsProtected, false /* attachGainmap */, nullptr)
+ .get();
+ }
if (fenceResult.ok()) {
fenceResult.value()->waitForever(LOG_TAG);
}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 896d13d31d..852a8b81e1 100644
index 42a77fd844..d601b24cbd 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -7389,41 +7389,79 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
@@ -7706,87 +7706,124 @@ void SurfaceFlinger::captureScreenCommon(ScreenshotArgs& args,
return;
}
- std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
- auto displayState = getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
-
- bool hasDisplayState = getSnapshotsFromMainThread(args, getLayerSnapshotsFn, layers);
- if (!hasDisplayState) {
- ALOGD("Display state not found");
- invokeScreenCaptureError(NO_MEMORY, captureListener);
- }
+ if (FlagManager::getInstance().single_hop_screenshot()) {
+ std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
+ bool hasDisplayState = getSnapshotsFromMainThread(args, getLayerSnapshotsFn, layers);
+ if (!hasDisplayState) {
+ ALOGD("Display state not found");
+ invokeScreenCaptureError(NO_MEMORY, captureListener);
+ }
- const bool hasHdrLayer = std::any_of(layers.cbegin(), layers.cend(), [this](const auto& layer) {
- return isHdrLayer(*(layer.second->mSnapshot.get()));
- });
+ const bool hasHdrLayer = std::any_of(layers.cbegin(), layers.cend(), [this](const auto& layer) {
+ return isHdrLayer(*(layer.second->mSnapshot.get()));
+ });
- const bool supportsProtected = getRenderEngine().supportsProtectedContent();
- bool hasProtectedLayer = false;
- if (allowProtected && supportsProtected) {
@ -82,11 +109,33 @@ index 896d13d31d..852a8b81e1 100644
- ALOGE("%s: Buffer failed to allocate: %d", __func__, bufferStatus);
- invokeScreenCaptureError(bufferStatus, captureListener);
- return;
+ if (FlagManager::getInstance().single_hop_screenshot()) {
+ std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
+ auto displayState =
+ getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
+
- }
- const std::shared_ptr<renderengine::ExternalTexture> texture = std::make_shared<
- renderengine::impl::ExternalTexture>(buffer, getRenderEngine(),
- renderengine::impl::ExternalTexture::Usage::
- WRITEABLE);
-
- std::shared_ptr<renderengine::impl::ExternalTexture> hdrTexture;
- std::shared_ptr<renderengine::impl::ExternalTexture> gainmapTexture;
-
- if (hasHdrLayer && !args.seamlessTransition &&
- FlagManager::getInstance().true_hdr_screenshots()) {
- const auto hdrBuffer =
- getFactory().createGraphicBuffer(buffer->getWidth(), buffer->getHeight(),
- HAL_PIXEL_FORMAT_RGBA_FP16, 1 /* layerCount */,
- buffer->getUsage(), "screenshot-hdr");
- const auto gainmapBuffer =
- getFactory().createGraphicBuffer(buffer->getWidth(), buffer->getHeight(),
- buffer->getPixelFormat(), 1 /* layerCount */,
- buffer->getUsage(), "screenshot-gainmap");
-
- const status_t hdrBufferStatus = hdrBuffer->initCheck();
- const status_t gainmapBufferStatus = gainmapBuffer->initCheck();
-
- if (hdrBufferStatus != OK || gainmapBufferStatus != -OK) {
- if (hdrBufferStatus != OK) {
- ALOGW("%s: Buffer failed to allocate for hdr: %d. Screenshoting SDR instead.",
- __func__, hdrBufferStatus);
+ const bool supportsProtected = getRenderEngine().supportsProtectedContent();
+ bool hasProtectedLayer = false;
+ if (allowProtected && supportsProtected) {
@ -111,15 +160,69 @@ index 896d13d31d..852a8b81e1 100644
+ invokeScreenCaptureError(bufferStatus, captureListener);
+ return;
+ }
+
+ const std::shared_ptr<renderengine::ExternalTexture> texture = std::make_shared<
+ renderengine::impl::ExternalTexture>(buffer, getRenderEngine(),
+ renderengine::impl::ExternalTexture::Usage::
+ WRITEABLE);
+ auto futureFence = captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */,
+ grayscale, isProtected, attachGainmap, captureListener,
+ displayState, layers);
+ futureFence.get();
+
+ std::shared_ptr<renderengine::impl::ExternalTexture> hdrTexture;
+ std::shared_ptr<renderengine::impl::ExternalTexture> gainmapTexture;
+
+ if (hasHdrLayer && !args.seamlessTransition &&
+ FlagManager::getInstance().true_hdr_screenshots()) {
+ const auto hdrBuffer =
+ getFactory().createGraphicBuffer(buffer->getWidth(), buffer->getHeight(),
+ HAL_PIXEL_FORMAT_RGBA_FP16, 1 /* layerCount */,
+ buffer->getUsage(), "screenshot-hdr");
+ const auto gainmapBuffer =
+ getFactory().createGraphicBuffer(buffer->getWidth(), buffer->getHeight(),
+ buffer->getPixelFormat(), 1 /* layerCount */,
+ buffer->getUsage(), "screenshot-gainmap");
+
+ const status_t hdrBufferStatus = hdrBuffer->initCheck();
+ const status_t gainmapBufferStatus = gainmapBuffer->initCheck();
+
+ if (hdrBufferStatus != OK || gainmapBufferStatus != -OK) {
+ if (hdrBufferStatus != OK) {
+ ALOGW("%s: Buffer failed to allocate for hdr: %d. Screenshoting SDR instead.",
+ __func__, hdrBufferStatus);
+ } else {
+ ALOGW("%s: Buffer failed to allocate for gainmap: %d. Screenshoting SDR instead.",
+ __func__, gainmapBufferStatus);
+ }
} else {
- ALOGW("%s: Buffer failed to allocate for gainmap: %d. Screenshoting SDR instead.",
- __func__, gainmapBufferStatus);
+ hdrTexture = std::make_shared<
+ renderengine::impl::ExternalTexture>(hdrBuffer, getRenderEngine(),
+ renderengine::impl::ExternalTexture::
+ Usage::WRITEABLE);
+ gainmapTexture = std::make_shared<
+ renderengine::impl::ExternalTexture>(gainmapBuffer, getRenderEngine(),
+ renderengine::impl::ExternalTexture::
+ Usage::WRITEABLE);
}
- } else {
- hdrTexture = std::make_shared<
- renderengine::impl::ExternalTexture>(hdrBuffer, getRenderEngine(),
- renderengine::impl::ExternalTexture::
- Usage::WRITEABLE);
- gainmapTexture = std::make_shared<
- renderengine::impl::ExternalTexture>(gainmapBuffer, getRenderEngine(),
- renderengine::impl::ExternalTexture::
- Usage::WRITEABLE);
}
- }
- auto futureFence =
- captureScreenshot(args, texture, false /* regionSampling */, grayscale, isProtected,
- captureListener, layers, hdrTexture, gainmapTexture);
- futureFence.get();
+ auto futureFence =
+ captureScreenshot(args, texture, false /* regionSampling */, grayscale, isProtected,
+ captureListener, layers, hdrTexture, gainmapTexture);
+ futureFence.get();
+ } else {
+ const bool supportsProtected = getRenderEngine().supportsProtectedContent();
+ bool hasProtectedLayer = false;
@ -150,74 +253,52 @@ index 896d13d31d..852a8b81e1 100644
+ renderengine::impl::ExternalTexture>(buffer, getRenderEngine(),
+ renderengine::impl::ExternalTexture::Usage::
+ WRITEABLE);
+ auto futureFence = captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn, texture,
+ auto futureFence = captureScreenshotLegacy(args, getLayerSnapshotsFn, texture,
+ false /* regionSampling */, grayscale,
+ isProtected, attachGainmap, captureListener);
+ isProtected, false, captureListener);
+ futureFence.get();
}
- const std::shared_ptr<renderengine::ExternalTexture> texture = std::make_shared<
- renderengine::impl::ExternalTexture>(buffer, getRenderEngine(),
- renderengine::impl::ExternalTexture::Usage::
- WRITEABLE);
- auto futureFence =
- captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */, grayscale,
- isProtected, attachGainmap, captureListener, displayState, layers);
- futureFence.get();
+ }
}
std::optional<SurfaceFlinger::OutputCompositionState>
@@ -7489,7 +7527,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
ftl::SharedFuture<FenceResult> renderFuture =
renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected,
- captureResults, displayState, layers);
+ attachGainmap, captureResults, displayState, layers);
if (captureResults.capturedHdrLayers && attachGainmap &&
FlagManager::getInstance().true_hdr_screenshots()) {
@@ -7524,7 +7562,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
ScreenCaptureResults unusedResults;
// Returns true if display is found and args was populated with display state
@@ -7854,7 +7891,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
if (hdrBuffer && gainmapBuffer) {
ftl::SharedFuture<FenceResult> hdrRenderFuture =
renderScreenImpl(renderArea.get(), hdrTexture, regionSampling, grayscale,
- isProtected, unusedResults, displayState, layers);
+ isProtected, attachGainmap, unusedResults, displayState,
+ layers);
renderScreenImpl(args, hdrBuffer, regionSampling, grayscale, isProtected,
- captureResults, layers);
+ true, captureResults, layers);
captureResults.buffer = buffer->getBuffer();
captureResults.optionalGainMap = gainmapBuffer->getBuffer();
renderFuture =
ftl::Future(std::move(renderFuture))
@@ -7570,10 +7609,67 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
@@ -7876,7 +7913,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
.share();
} else {
renderFuture = renderScreenImpl(args, buffer, regionSampling, grayscale, isProtected,
- captureResults, layers);
+ false, captureResults, layers);
}
if (captureListener) {
@@ -7894,10 +7931,54 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
return renderFuture;
}
+ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
+ RenderAreaBuilderVariant renderAreaBuilder, GetLayerSnapshotsFunction getLayerSnapshotsFn,
+ ScreenshotArgs& args, GetLayerSnapshotsFunction getLayerSnapshotsFn,
+ const std::shared_ptr<renderengine::ExternalTexture>& buffer, bool regionSampling,
+ bool grayscale, bool isProtected, bool attachGainmap,
+ const sp<IScreenCaptureListener>& captureListener) {
+ SFTRACE_CALL();
+
+ auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES(
+ auto takeScreenshotFn = [=, this, args = std::move(args)]() REQUIRES(
+ kMainThreadContext) mutable -> ftl::SharedFuture<FenceResult> {
+ auto layers = getLayerSnapshotsFn();
+ auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder);
+
+ ScreenCaptureResults captureResults;
+ std::unique_ptr<const RenderArea> renderArea =
+ std::visit([](auto&& arg) -> std::unique_ptr<RenderArea> { return arg.build(); },
+ renderAreaBuilder);
+
+ if (!renderArea) {
+ ALOGW("Skipping screen capture because of invalid render area.");
+ if (captureListener) {
+ captureResults.fenceResult = base::unexpected(NO_MEMORY);
+ captureListener->onScreenCaptureCompleted(captureResults);
+ }
+ return ftl::yield<FenceResult>(base::unexpected(NO_ERROR)).share();
+ }
+
+ ftl::SharedFuture<FenceResult> renderFuture =
+ renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected,
+ attachGainmap, captureResults, displayState, layers);
+ renderScreenImpl(args, buffer, regionSampling, grayscale, isProtected,
+ attachGainmap, captureResults, layers);
+
+ if (captureListener) {
+ // Defer blocking on renderFuture back to the Binder thread.
@ -247,15 +328,15 @@ index 896d13d31d..852a8b81e1 100644
+}
+
ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
const RenderArea* renderArea, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
- bool regionSampling, bool grayscale, bool isProtected, ScreenCaptureResults& captureResults,
- std::optional<OutputCompositionState>& displayState,
- const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap,
+ ScreenCaptureResults& captureResults, std::optional<OutputCompositionState>& displayState,
std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ ScreenCaptureResults& captureResults, const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
SFTRACE_CALL();
@@ -7719,9 +7815,15 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
for (auto& [_, layerFE] : layers) {
@@ -8038,9 +8119,15 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
//
// TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call
// to CompositionEngine::present.
@ -275,41 +356,41 @@ index 896d13d31d..852a8b81e1 100644
return presentFuture;
}
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 1e2c08747b..835cb572b4 100644
index f0298079a0..88c1701998 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -885,10 +885,16 @@ private:
std::optional<OutputCompositionState>& displayState,
std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
@@ -943,10 +943,16 @@ private:
const std::shared_ptr<renderengine::ExternalTexture>& hdrBuffer = nullptr,
const std::shared_ptr<renderengine::ExternalTexture>& gainmapBuffer = nullptr);
+ ftl::SharedFuture<FenceResult> captureScreenshotLegacy(
+ RenderAreaBuilderVariant, GetLayerSnapshotsFunction,
+ ScreenshotArgs& args, GetLayerSnapshotsFunction,
+ const std::shared_ptr<renderengine::ExternalTexture>&, bool regionSampling,
+ bool grayscale, bool isProtected, bool attachGainmap,
+ const sp<IScreenCaptureListener>&);
+
ftl::SharedFuture<FenceResult> renderScreenImpl(
const RenderArea*, const std::shared_ptr<renderengine::ExternalTexture>&,
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>&,
- bool regionSampling, bool grayscale, bool isProtected, ScreenCaptureResults&,
- std::optional<OutputCompositionState>& displayState,
- const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap,
+ ScreenCaptureResults&, std::optional<OutputCompositionState>& displayState,
std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ ScreenCaptureResults&, const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
void readPersistentProperties();
diff --git a/services/surfaceflinger/common/FlagManager.cpp b/services/surfaceflinger/common/FlagManager.cpp
index 5e78426c77..5c417ba748 100644
index ebf451501d..6f3a58f6ff 100644
--- a/services/surfaceflinger/common/FlagManager.cpp
+++ b/services/surfaceflinger/common/FlagManager.cpp
@@ -166,6 +166,7 @@ void FlagManager::dump(std::string& result) const {
DUMP_ACONFIG_FLAG(skip_invisible_windows_in_input);
DUMP_ACONFIG_FLAG(begone_bright_hlg);
DUMP_ACONFIG_FLAG(window_blur_kawase2);
@@ -172,6 +172,7 @@ void FlagManager::dump(std::string& result) const {
DUMP_ACONFIG_FLAG(reject_dupe_layerstacks);
DUMP_ACONFIG_FLAG(renderable_buffer_usage);
DUMP_ACONFIG_FLAG(restore_blur_step);
+ DUMP_ACONFIG_FLAG(single_hop_screenshot);
#undef DUMP_ACONFIG_FLAG
#undef DUMP_LEGACY_SERVER_FLAG
@@ -259,6 +260,7 @@ FLAG_MANAGER_ACONFIG_FLAG(local_tonemap_screenshots, "debug.sf.local_tonemap_scr
DUMP_ACONFIG_FLAG(skip_invisible_windows_in_input);
DUMP_ACONFIG_FLAG(stable_edid_ids);
DUMP_ACONFIG_FLAG(synced_resolution_switch);
@@ -290,6 +291,7 @@ FLAG_MANAGER_ACONFIG_FLAG(local_tonemap_screenshots, "debug.sf.local_tonemap_scr
FLAG_MANAGER_ACONFIG_FLAG(override_trusted_overlay, "");
FLAG_MANAGER_ACONFIG_FLAG(flush_buffer_slots_to_uncache, "");
FLAG_MANAGER_ACONFIG_FLAG(force_compile_graphite_renderengine, "");
@ -318,28 +399,27 @@ index 5e78426c77..5c417ba748 100644
FLAG_MANAGER_ACONFIG_FLAG(display_config_error_hal, "");
FLAG_MANAGER_ACONFIG_FLAG(connected_display_hdr, "debug.sf.connected_display_hdr");
diff --git a/services/surfaceflinger/common/include/common/FlagManager.h b/services/surfaceflinger/common/include/common/FlagManager.h
index d8887f538f..15284ba0ee 100644
index 72b3bc302a..23232c381f 100644
--- a/services/surfaceflinger/common/include/common/FlagManager.h
+++ b/services/surfaceflinger/common/include/common/FlagManager.h
@@ -95,6 +95,7 @@ public:
bool override_trusted_overlay() const;
bool flush_buffer_slots_to_uncache() const;
bool force_compile_graphite_renderengine() const;
@@ -107,6 +107,7 @@ public:
bool reject_dupe_layerstacks() const;
bool renderable_buffer_usage() const;
bool restore_blur_step() const;
+ bool single_hop_screenshot() const;
bool trace_frame_rate_override() const;
bool true_hdr_screenshots() const;
bool display_config_error_hal() const;
bool skip_invisible_windows_in_input() const;
bool stable_edid_ids() const;
bool synced_resolution_switch() const;
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index 7f0b7a6585..fd8bc0d22d 100644
index 13c32bdf08..7e519d3842 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -475,7 +475,8 @@ public:
@@ -494,7 +494,7 @@ public:
return mFlinger->renderScreenImpl(renderArea.get(), buffer, regionSampling,
return mFlinger->renderScreenImpl(screenshotArgs, buffer, regionSampling,
false /* grayscale */, false /* isProtected */,
- captureResults, displayState, layers);
+ false /* attachGainmap */, captureResults, displayState,
+ layers);
- captureResults, layers);
+ false /*attachGainmap */, captureResults, layers);
}
auto getLayerSnapshotsForScreenshotsFn(ui::LayerStack layerStack, uint32_t uid) {

View file

@ -1,101 +0,0 @@
From 37580f1924099111b2995e910ed64bb4182b9c39 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Mon, 7 Oct 2024 22:07:58 -0400
Subject: [PATCH 3/7] vibratorservice: Support optionally ignoring vibrator
effects
On Unihertz Jelly Max the preloaded vibrator HAL is utterly broken.
Change-Id: I308190a225932fba2a4aa1c830c03ab874d8032e
---
services/vibratorservice/Android.bp | 1 +
.../vibratorservice/VibratorHalWrapper.cpp | 31 +++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/services/vibratorservice/Android.bp b/services/vibratorservice/Android.bp
index 4735ae5897..6263b0506f 100644
--- a/services/vibratorservice/Android.bp
+++ b/services/vibratorservice/Android.bp
@@ -41,6 +41,7 @@ cc_library_shared {
},
shared_libs: [
+ "libbase",
"libbinder_ndk",
"libhidlbase",
"liblog",
diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp
index 3ddc4f2aca..11178659ff 100644
--- a/services/vibratorservice/VibratorHalWrapper.cpp
+++ b/services/vibratorservice/VibratorHalWrapper.cpp
@@ -17,6 +17,7 @@
#define LOG_TAG "VibratorHalWrapper"
#include <aidl/android/hardware/vibrator/IVibrator.h>
+#include <android-base/properties.h>
#include <android/hardware/vibrator/1.3/IVibrator.h>
#include <hardware/vibrator.h>
#include <cmath>
@@ -44,6 +45,22 @@ namespace V1_2 = android::hardware::vibrator::V1_2;
namespace V1_3 = android::hardware::vibrator::V1_3;
namespace Aidl = aidl::android::hardware::vibrator;
+const Effect EFFECT_WITH_FALLBACK[] = {
+ Effect::CLICK,
+ Effect::DOUBLE_CLICK,
+ Effect::HEAVY_CLICK,
+ Effect::TICK,
+};
+
+#define RETURN_UNSUPPORTED_IF_IGNORED() \
+ bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false); \
+ auto casted_effect = static_cast<Effect>(effect); \
+ bool isEffectWithFallback = std::find(std::begin(EFFECT_WITH_FALLBACK), std::end(EFFECT_WITH_FALLBACK), casted_effect) \
+ != std::end(EFFECT_WITH_FALLBACK); \
+ if (shouldIgnoreEffects && isEffectWithFallback) { \
+ return HalResult<milliseconds>::unsupported(); \
+ }
+
namespace android {
namespace vibrator {
@@ -63,8 +80,18 @@ Info HalWrapper::getInfo() {
getCapabilities();
getPrimitiveDurations();
std::lock_guard<std::mutex> lock(mInfoMutex);
+ bool shouldIgnoreEffects = android::base::GetBoolProperty("persist.sys.phh.ignore_vibrator_effects", false);
if (mInfoCache.mSupportedEffects.isFailed()) {
mInfoCache.mSupportedEffects = getSupportedEffectsInternal();
+ if (mInfoCache.mSupportedEffects.isOk()) {
+ std::vector<Effect> filtered;
+ for (auto& effect : mInfoCache.mSupportedEffects.value()) {
+ if (std::find(std::begin(EFFECT_WITH_FALLBACK), std::end(EFFECT_WITH_FALLBACK), effect) == std::end(EFFECT_WITH_FALLBACK)) {
+ filtered.push_back(effect);
+ }
+ }
+ mInfoCache.mSupportedEffects = HalResult<std::vector<Effect>>::ok(filtered);
+ }
}
if (mInfoCache.mSupportedBraking.isFailed()) {
mInfoCache.mSupportedBraking = getSupportedBrakingInternal();
@@ -305,6 +332,8 @@ HalResult<void> AidlHalWrapper::alwaysOnDisable(int32_t id) {
HalResult<milliseconds> AidlHalWrapper::performEffect(
Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) {
+ RETURN_UNSUPPORTED_IF_IGNORED();
+
HalResult<Capabilities> capabilities = getCapabilities();
bool supportsCallback = capabilities.isOk() &&
static_cast<int32_t>(capabilities.value() & Capabilities::PERFORM_CALLBACK);
@@ -582,6 +611,8 @@ template <typename T>
HalResult<milliseconds> HidlHalWrapper<I>::performInternal(
perform_fn<T> performFn, sp<I> handle, T effect, EffectStrength strength,
const std::function<void()>& completionCallback) {
+ RETURN_UNSUPPORTED_IF_IGNORED();
+
V1_0::Status status;
int32_t lengthMs;
auto effectCallback = [&status, &lengthMs](V1_0::Status retStatus, uint32_t retLengthMs) {
--
2.48.1

View file

@ -1,46 +1,52 @@
From aa5e6f794b3e2c9f5bdbc40da702b14dd9a1764e Mon Sep 17 00:00:00 2001
From 0aeb91404524322d4b1ccd0eeb76e5b2f735691f Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:19:17 -0400
Subject: [PATCH 5/7] Revert "Reorder release fence attachment for non-threaded
Date: Sun, 15 Jun 2025 18:31:42 -0400
Subject: [PATCH 4/6] Revert "Reorder release fence attachment for non-threaded
RE"
This reverts commit 0b80c74300b73e937ee9a9cb58487bd126daa4d8.
Change-Id: I7974588c1ca5c129b81846fbfb5a3422f4f98cf5
Conflicts:
services/surfaceflinger/RegionSamplingThread.cpp
services/surfaceflinger/SurfaceFlinger.cpp
services/surfaceflinger/SurfaceFlinger.h
services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
---
.../surfaceflinger/RegionSamplingThread.cpp | 11 ++-
services/surfaceflinger/SurfaceFlinger.cpp | 97 ++++++++++---------
services/surfaceflinger/SurfaceFlinger.h | 16 ++-
.../surfaceflinger/RegionSamplingThread.cpp | 9 +-
services/surfaceflinger/SurfaceFlinger.cpp | 104 ++++++++++--------
services/surfaceflinger/SurfaceFlinger.h | 15 ++-
.../tests/unittests/TestableSurfaceFlinger.h | 3 +-
4 files changed, 69 insertions(+), 58 deletions(-)
4 files changed, 74 insertions(+), 57 deletions(-)
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp
index 08f831c8e5..011fd9e20a 100644
index e266656b5d..7e2144d6b1 100644
--- a/services/surfaceflinger/RegionSamplingThread.cpp
+++ b/services/surfaceflinger/RegionSamplingThread.cpp
@@ -354,13 +354,14 @@ void RegionSamplingThread::captureSample() {
RenderArea::Options::CAPTURE_SECURE_LAYERS);
@@ -356,12 +356,13 @@ void RegionSamplingThread::captureSample() {
screenshotArgs.seamlessTransition = false;
FenceResult fenceResult;
- if (FlagManager::getInstance().single_hop_screenshot()) {
- std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
- auto displayState =
- mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
+ if (FlagManager::getInstance().single_hop_screenshot() &&
+ mFlinger.mRenderEngine->isThreaded()) {
+ std::vector<sp<LayerFE>> layerFEs;
+ auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder,
+ getLayerSnapshotsFn, layerFEs);
fenceResult = mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling,
kGrayscale, kIsProtected, kAttachGainmap, nullptr,
- displayState, layers)
+ displayState, layerFEs)
auto displayState =
- mFlinger.getSnapshotsFromMainThread(screenshotArgs, getLayerSnapshotsFn, layers);
+ mFlinger.getSnapshotsFromMainThread(screenshotArgs, getLayerSnapshotsFn, layerFEs);
fenceResult = mFlinger.captureScreenshot(screenshotArgs, buffer, kRegionSampling,
- kGrayscale, kIsProtected, nullptr, layers)
+ kGrayscale, kIsProtected, nullptr, layerFEs)
.get();
} else {
fenceResult = mFlinger.captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn,
fenceResult = mFlinger.captureScreenshotLegacy(screenshotArgs, getLayerSnapshotsFn, buffer,
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 852a8b81e1..067a8bafe0 100644
index d601b24cbd..235ddfb762 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -7335,10 +7335,9 @@ void SurfaceFlinger::attachReleaseFenceFutureToLayer(Layer* layer, LayerFE* laye
@@ -7650,10 +7650,9 @@ void SurfaceFlinger::attachReleaseFenceFutureToLayer(Layer* layer, LayerFE* laye
// typically a layer with DRM contents, or have the GRALLOC_USAGE_PROTECTED set on the buffer.
// A protected layer has no implication on whether it's secure, which is explicitly set by
// application to avoid being screenshot or drawn via unsecure display.
@ -53,15 +59,17 @@ index 852a8b81e1..067a8bafe0 100644
protectedLayerFound |=
(layerFE->mSnapshot->isVisible && layerFE->mSnapshot->hasProtectedContent);
if (protectedLayerFound) {
@@ -7354,21 +7353,15 @@ bool SurfaceFlinger::layersHasProtectedLayer(
// risk of deadlocks.
std::optional<SurfaceFlinger::OutputCompositionState> SurfaceFlinger::getSnapshotsFromMainThread(
RenderAreaBuilderVariant& renderAreaBuilder, GetLayerSnapshotsFunction getLayerSnapshotsFn,
@@ -7669,23 +7668,17 @@ bool SurfaceFlinger::layersHasProtectedLayer(
// risk of deadlocks. Returns false if no display is found.
bool SurfaceFlinger::getSnapshotsFromMainThread(
ScreenshotArgs& args, GetLayerSnapshotsFunction getLayerSnapshotsFn,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ std::vector<sp<LayerFE>>& layerFEs) {
return mScheduler
- ->schedule([=, this, &renderAreaBuilder, &layers]() REQUIRES(kMainThreadContext) {
+ ->schedule([=, this, &renderAreaBuilder, &layerFEs]() REQUIRES(kMainThreadContext) {
- ->schedule([=, this, &args, &layers]() REQUIRES(kMainThreadContext) {
+ ->schedule([=, this, &args, &layerFEs]() REQUIRES(kMainThreadContext) {
SFTRACE_NAME_FOR_TRACK(WorkloadTracer::TRACK_NAME, "Screenshot");
mPowerAdvisor->setScreenshotWorkload();
SFTRACE_NAME("getSnapshotsFromMainThread");
- layers = getLayerSnapshotsFn();
- // Non-threaded RenderEngine eventually returns to the main thread a 2nd time
@ -78,20 +86,29 @@ index 852a8b81e1..067a8bafe0 100644
+ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK);
}
+ layerFEs = extractLayerFEs(layers);
return getDisplayStateFromRenderAreaBuilder(renderAreaBuilder);
return getDisplayStateOnMainThread(args);
})
.get();
@@ -7389,15 +7382,15 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
@@ -7706,22 +7699,22 @@ void SurfaceFlinger::captureScreenCommon(ScreenshotArgs& args,
return;
}
- if (FlagManager::getInstance().single_hop_screenshot()) {
- std::vector<std::pair<Layer*, sp<LayerFE>>> layers;
- bool hasDisplayState = getSnapshotsFromMainThread(args, getLayerSnapshotsFn, layers);
+ if (FlagManager::getInstance().single_hop_screenshot() && mRenderEngine->isThreaded()) {
+ std::vector<sp<LayerFE>> layerFEs;
auto displayState =
- getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers);
+ getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs);
+ bool hasDisplayState = getSnapshotsFromMainThread(args, getLayerSnapshotsFn, layerFEs);
if (!hasDisplayState) {
ALOGD("Display state not found");
invokeScreenCaptureError(NO_MEMORY, captureListener);
}
- const bool hasHdrLayer = std::any_of(layers.cbegin(), layers.cend(), [this](const auto& layer) {
- return isHdrLayer(*(layer.second->mSnapshot.get()));
+ const bool hasHdrLayer = std::any_of(layerFEs.cbegin(), layerFEs.cend(), [this](const auto& layer) {
+ return isHdrLayer(*(layer->mSnapshot.get()));
});
const bool supportsProtected = getRenderEngine().supportsProtectedContent();
bool hasProtectedLayer = false;
@ -101,16 +118,15 @@ index 852a8b81e1..067a8bafe0 100644
}
const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected;
const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER |
@@ -7424,7 +7417,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
WRITEABLE);
auto futureFence = captureScreenshot(renderAreaBuilder, texture, false /* regionSampling */,
grayscale, isProtected, attachGainmap, captureListener,
- displayState, layers);
+ displayState, layerFEs);
futureFence.get();
@@ -7787,14 +7780,14 @@ void SurfaceFlinger::captureScreenCommon(ScreenshotArgs& args,
auto futureFence =
captureScreenshot(args, texture, false /* regionSampling */, grayscale, isProtected,
- captureListener, layers, hdrTexture, gainmapTexture);
+ captureListener, layerFEs, hdrTexture, gainmapTexture);
futureFence.get();
} else {
@@ -7432,7 +7425,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
const bool supportsProtected = getRenderEngine().supportsProtectedContent();
bool hasProtectedLayer = false;
if (allowProtected && supportsProtected) {
auto layers = mScheduler->schedule([=]() { return getLayerSnapshotsFn(); }).get();
@ -119,8 +135,8 @@ index 852a8b81e1..067a8bafe0 100644
}
const bool isProtected = hasProtectedLayer && allowProtected && supportsProtected;
const uint32_t usage = GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_RENDER |
@@ -7500,13 +7493,22 @@ SurfaceFlinger::getDisplayStateFromRenderAreaBuilder(RenderAreaBuilderVariant& r
return std::nullopt;
@@ -7874,11 +7867,21 @@ bool SurfaceFlinger::getDisplayStateOnMainThread(ScreenshotArgs& args) {
return false;
}
+std::vector<sp<LayerFE>> SurfaceFlinger::extractLayerFEs(
@ -134,66 +150,63 @@ index 852a8b81e1..067a8bafe0 100644
+}
+
ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
const RenderAreaBuilderVariant& renderAreaBuilder,
const std::shared_ptr<renderengine::ExternalTexture>& buffer, bool regionSampling,
bool grayscale, bool isProtected, bool attachGainmap,
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
bool regionSampling, bool grayscale, bool isProtected,
const sp<IScreenCaptureListener>& captureListener,
- std::optional<OutputCompositionState>& displayState,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ std::optional<OutputCompositionState>& displayState, std::vector<sp<LayerFE>>& layerFEs) {
- const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers,
+ std::vector<sp<LayerFE>>& layerFEs,
const std::shared_ptr<renderengine::ExternalTexture>& hdrBuffer,
const std::shared_ptr<renderengine::ExternalTexture>& gainmapBuffer) {
SFTRACE_CALL();
@@ -7888,10 +7891,13 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
ScreenCaptureResults captureResults;
@@ -7525,9 +7527,11 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
float displayBrightnessNits = displayState.value().displayBrightnessNits;
float sdrWhitePointNits = displayState.value().sdrWhitePointNits;
float hdrSdrRatio = args.displayBrightnessNits / args.sdrWhitePointNits;
+ // Empty vector needed to pass into renderScreenImpl for legacy path
+ std::vector<std::pair<Layer*, sp<android::LayerFE>>> layers;
ftl::SharedFuture<FenceResult> renderFuture =
renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected,
- attachGainmap, captureResults, displayState, layers);
+ attachGainmap, captureResults, displayState, layers, layerFEs);
if (captureResults.capturedHdrLayers && attachGainmap &&
FlagManager::getInstance().true_hdr_screenshots()) {
@@ -7563,7 +7567,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
+
if (hdrBuffer && gainmapBuffer) {
ftl::SharedFuture<FenceResult> hdrRenderFuture =
renderScreenImpl(renderArea.get(), hdrTexture, regionSampling, grayscale,
isProtected, attachGainmap, unusedResults, displayState,
- layers);
+ layers, layerFEs);
renderScreenImpl(args, hdrBuffer, regionSampling, grayscale, isProtected,
- true, captureResults, layers);
+ true, captureResults, layers, layerFEs);
captureResults.buffer = buffer->getBuffer();
captureResults.optionalGainMap = gainmapBuffer->getBuffer();
renderFuture =
ftl::Future(std::move(renderFuture))
@@ -7619,6 +7623,9 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES(
@@ -7913,7 +7919,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot(
.share();
} else {
renderFuture = renderScreenImpl(args, buffer, regionSampling, grayscale, isProtected,
- false, captureResults, layers);
+ false, captureResults, layers, layerFEs);
}
if (captureListener) {
@@ -7942,11 +7948,16 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
kMainThreadContext) mutable -> ftl::SharedFuture<FenceResult> {
auto layers = getLayerSnapshotsFn();
+ for (auto& [layer, layerFE] : layers) {
+ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK);
+ }
auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder);
+
ScreenCaptureResults captureResults;
@@ -7635,9 +7642,10 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
return ftl::yield<FenceResult>(base::unexpected(NO_ERROR)).share();
}
+ auto layerFEs = extractLayerFEs(layers);
ftl::SharedFuture<FenceResult> renderFuture =
renderScreenImpl(renderArea.get(), buffer, regionSampling, grayscale, isProtected,
- attachGainmap, captureResults, displayState, layers);
+ attachGainmap, captureResults, displayState, layers, layerFEs);
renderScreenImpl(args, buffer, regionSampling, grayscale, isProtected,
- attachGainmap, captureResults, layers);
+ attachGainmap, captureResults, layers, layerFEs);
if (captureListener) {
// Defer blocking on renderFuture back to the Binder thread.
@@ -7670,10 +7678,10 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
const RenderArea* renderArea, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
@@ -7978,10 +7989,11 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap,
ScreenCaptureResults& captureResults, std::optional<OutputCompositionState>& displayState,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ std::vector<std::pair<Layer*, sp<LayerFE>>>& layers, std::vector<sp<LayerFE>>& layerFEs) {
- ScreenCaptureResults& captureResults, const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) {
+ ScreenCaptureResults& captureResults, std::vector<std::pair<Layer*, sp<LayerFE>>>& layers,
+ std::vector<sp<LayerFE>>& layerFEs) {
SFTRACE_CALL();
- for (auto& [_, layerFE] : layers) {
@ -201,7 +214,7 @@ index 852a8b81e1..067a8bafe0 100644
frontend::LayerSnapshot* snapshot = layerFE->mSnapshot.get();
captureResults.capturedSecureLayers |= (snapshot->isVisible && snapshot->isSecure);
captureResults.capturedHdrLayers |= isHdrLayer(*snapshot);
@@ -7732,32 +7740,29 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
@@ -8026,31 +8038,29 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
captureResults.buffer = capturedBuffer->getBuffer();
ui::LayerStack layerStack{ui::DEFAULT_LAYER_STACK};
@ -222,14 +235,14 @@ index 852a8b81e1..067a8bafe0 100644
+ };
+
auto present = [this, buffer = capturedBuffer, dataspace = captureResults.capturedDataspace,
sdrWhitePointNits, displayBrightnessNits, grayscale, isProtected,
- layers = std::move(layers), layerStack, regionSampling,
+ layerFEs = copyLayerFEs(), layerStack, regionSampling,
renderArea = std::move(renderArea), renderIntent,
- grayscale, isProtected, layers, layerStack, regionSampling, args, renderIntent,
+ grayscale, isProtected, layers, layerFEs = copyLayerFEs(),
+ layerStack, regionSampling, args, renderIntent,
enableLocalTonemapping]() -> FenceResult {
std::unique_ptr<compositionengine::CompositionEngine> compositionEngine =
mFactory.createCompositionEngine();
compositionEngine->setRenderEngine(mRenderEngine.get());
compositionEngine->setHwComposer(mHWComposer.get());
- std::vector<sp<compositionengine::LayerFE>> layerFEs;
- layerFEs.reserve(layers.size());
@ -246,7 +259,7 @@ index 852a8b81e1..067a8bafe0 100644
compositionengine::Output::ColorProfile colorProfile{.dataspace = dataspace,
.renderIntent = renderIntent};
@@ -7816,10 +7821,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
@@ -8120,10 +8130,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
// TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call
// to CompositionEngine::present.
ftl::SharedFuture<FenceResult> presentFuture;
@ -260,10 +273,10 @@ index 852a8b81e1..067a8bafe0 100644
presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share()
: ftl::yield(present()).share();
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 835cb572b4..1df78acbf9 100644
index 88c1701998..260fe20620 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -861,14 +861,13 @@ private:
@@ -872,7 +872,7 @@ private:
void attachReleaseFenceFutureToLayer(Layer* layer, LayerFE* layerFE, ui::LayerStack layerStack);
// Checks if a protected layer exists in a list of layers.
@ -272,17 +285,18 @@ index 835cb572b4..1df78acbf9 100644
using OutputCompositionState = compositionengine::impl::OutputCompositionState;
std::optional<OutputCompositionState> getSnapshotsFromMainThread(
RenderAreaBuilderVariant& renderAreaBuilder,
- GetLayerSnapshotsFunction getLayerSnapshotsFn,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ GetLayerSnapshotsFunction getLayerSnapshotsFn, std::vector<sp<LayerFE>>& layerFEs);
@@ -927,7 +927,7 @@ private:
void captureScreenCommon(RenderAreaBuilderVariant, GetLayerSnapshotsFunction,
ui::Size bufferSize, ui::PixelFormat, bool allowProtected,
@@ -877,13 +876,19 @@ private:
std::optional<OutputCompositionState> getDisplayStateFromRenderAreaBuilder(
RenderAreaBuilderVariant& renderAreaBuilder) REQUIRES(kMainThreadContext);
bool getSnapshotsFromMainThread(ScreenshotArgs& args,
GetLayerSnapshotsFunction getLayerSnapshotsFn,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ std::vector<sp<LayerFE>>& layerFEs);
void captureScreenCommon(ScreenshotArgs& args, GetLayerSnapshotsFunction, ui::Size bufferSize,
ui::PixelFormat, bool allowProtected, bool grayscale,
@@ -935,11 +935,17 @@ private:
bool getDisplayStateOnMainThread(ScreenshotArgs& args) REQUIRES(kMainThreadContext);
+ // Legacy layer raw pointer is not safe to access outside the main thread.
+ // Creates a new vector consisting only of LayerFEs, which can be safely
@ -291,41 +305,42 @@ index 835cb572b4..1df78acbf9 100644
+ const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers) const;
+
ftl::SharedFuture<FenceResult> captureScreenshot(
const RenderAreaBuilderVariant& renderAreaBuilder,
const std::shared_ptr<renderengine::ExternalTexture>& buffer, bool regionSampling,
bool grayscale, bool isProtected, bool attachGainmap,
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>& buffer,
bool regionSampling, bool grayscale, bool isProtected,
const sp<IScreenCaptureListener>& captureListener,
std::optional<OutputCompositionState>& displayState,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ std::vector<sp<LayerFE>>& layerFEs);
- const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers,
+ std::vector<sp<LayerFE>>& layerFEs,
const std::shared_ptr<renderengine::ExternalTexture>& hdrBuffer = nullptr,
const std::shared_ptr<renderengine::ExternalTexture>& gainmapBuffer = nullptr);
ftl::SharedFuture<FenceResult> captureScreenshotLegacy(
RenderAreaBuilderVariant, GetLayerSnapshotsFunction,
@@ -895,7 +900,8 @@ private:
const RenderArea*, const std::shared_ptr<renderengine::ExternalTexture>&,
@@ -952,7 +958,8 @@ private:
ftl::SharedFuture<FenceResult> renderScreenImpl(
ScreenshotArgs& args, const std::shared_ptr<renderengine::ExternalTexture>&,
bool regionSampling, bool grayscale, bool isProtected, bool attachGainmap,
ScreenCaptureResults&, std::optional<OutputCompositionState>& displayState,
- std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ std::vector<std::pair<Layer*, sp<LayerFE>>>& layers,
- ScreenCaptureResults&, const std::vector<std::pair<Layer*, sp<LayerFE>>>& layers);
+ ScreenCaptureResults&, std::vector<std::pair<Layer*, sp<LayerFE>>>& layers,
+ std::vector<sp<LayerFE>>& layerFEs);
void readPersistentProperties();
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index fd8bc0d22d..2ba739b462 100644
index 7e519d3842..062df4d5e2 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -472,11 +472,12 @@ public:
@@ -478,6 +478,7 @@ public:
ScreenCaptureResults captureResults;
auto displayState = std::optional{display->getCompositionDisplay()->getState()};
const auto& state = display->getCompositionDisplay()->getState();
auto layers = getLayerSnapshotsFn();
+ auto layerFEs = mFlinger->extractLayerFEs(layers);
return mFlinger->renderScreenImpl(renderArea.get(), buffer, regionSampling,
SurfaceFlinger::ScreenshotArgs screenshotArgs;
screenshotArgs.captureTypeVariant = display;
@@ -494,7 +495,7 @@ public:
return mFlinger->renderScreenImpl(screenshotArgs, buffer, regionSampling,
false /* grayscale */, false /* isProtected */,
false /* attachGainmap */, captureResults, displayState,
- layers);
+ layers, layerFEs);
- false /*attachGainmap */, captureResults, layers);
+ false /*attachGainmap */, captureResults, layers, layerFEs);
}
auto getLayerSnapshotsForScreenshotsFn(ui::LayerStack layerStack, uint32_t uid) {

View file

@ -1,11 +1,14 @@
From 76923ab930a6fee15aa477bea3638e09fe7b604a Mon Sep 17 00:00:00 2001
From 9d29befb9b5d3a9c5a893e7abdab42656d67eb14 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:25:10 -0400
Subject: [PATCH 7/7] Revert "Remove dead code from LayerFE"
Date: Sun, 15 Jun 2025 18:32:42 -0400
Subject: [PATCH 5/6] Revert "Remove dead code from LayerFE"
This reverts commit 330571240ff3d44fdbecbe513309d73ba82404e6.
Change-Id: If3af99ec76a8c595dcd1ea22965f2d126d74a315
Change-Id: Idade7d609dbec06f2b0636df2640388937f68f62
Conflicts:
services/surfaceflinger/LayerFE.cpp
---
.../CompositionEngine/include/compositionengine/LayerFE.h | 3 +++
.../include/compositionengine/mock/LayerFE.h | 3 +++
@ -14,10 +17,10 @@ Change-Id: If3af99ec76a8c595dcd1ea22965f2d126d74a315
4 files changed, 15 insertions(+)
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h
index cda4edc216..8199c929e5 100644
index e2ea0f1397..41d4afe207 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h
@@ -148,6 +148,9 @@ public:
@@ -154,6 +154,9 @@ public:
virtual std::optional<LayerSettings> prepareClientComposition(
ClientCompositionTargetSettings&) const = 0;
@ -28,7 +31,7 @@ index cda4edc216..8199c929e5 100644
// fence. This should only be called when a promise has not yet been created, or
// after the previous promise has already been fulfilled. Attempting to call this
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h
index 272fa3eef7..a236ebf180 100644
index f65a9083c5..4733939ce2 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h
@@ -50,6 +50,9 @@ public:
@ -40,21 +43,21 @@ index 272fa3eef7..a236ebf180 100644
+
MOCK_METHOD0(createReleaseFenceFuture, ftl::Future<FenceResult>());
MOCK_METHOD1(setReleaseFence, void(const FenceResult&));
MOCK_METHOD0(getReleaseFencePromiseStatus, LayerFE::ReleaseFencePromiseStatus());
MOCK_METHOD1(setReleasedBuffer, void(sp<GraphicBuffer>));
diff --git a/services/surfaceflinger/LayerFE.cpp b/services/surfaceflinger/LayerFE.cpp
index de64b271f5..012aa32c30 100644
index 3cd432cd2b..7ae407da1a 100644
--- a/services/surfaceflinger/LayerFE.cpp
+++ b/services/surfaceflinger/LayerFE.cpp
@@ -28,6 +28,7 @@
@@ -27,6 +27,7 @@
#include "LayerFE.h"
#include "SurfaceFlinger.h"
#include "common/FlagManager.h"
#include "ui/FenceResult.h"
+#include "ui/LayerStack.h"
namespace android {
@@ -355,6 +356,11 @@ CompositionResult LayerFE::stealCompositionResult() {
return result;
@@ -352,6 +353,11 @@ void LayerFE::onPictureProfileCommitted() {
mCompositionResult.pictureProfileHandle = mSnapshot->pictureProfileHandle;
}
+void LayerFE::onLayerDisplayed(ftl::SharedFuture<FenceResult> futureFenceResult,
@ -62,14 +65,14 @@ index de64b271f5..012aa32c30 100644
+ mCompositionResult.releaseFences.emplace_back(std::move(futureFenceResult), layerStack);
+}
+
const char* LayerFE::getDebugName() const {
return mName.c_str();
}
CompositionResult LayerFE::stealCompositionResult() {
CompositionResult result;
std::swap(mCompositionResult, result);
diff --git a/services/surfaceflinger/LayerFE.h b/services/surfaceflinger/LayerFE.h
index 9483aebafa..ce6d27a91a 100644
index b897a90687..fad77e92a9 100644
--- a/services/surfaceflinger/LayerFE.h
+++ b/services/surfaceflinger/LayerFE.h
@@ -25,12 +25,14 @@
@@ -26,12 +26,14 @@
#include "compositionengine/LayerFE.h"
#include "compositionengine/LayerFECompositionState.h"
#include "renderengine/LayerSettings.h"
@ -84,7 +87,7 @@ index 9483aebafa..ce6d27a91a 100644
sp<Fence> lastClientCompositionFence = nullptr;
bool wasPictureProfileCommitted = false;
// TODO(b/337330263): Why does LayerFE coming from SF have a null composition state?
@@ -46,6 +48,7 @@ public:
@@ -47,6 +49,7 @@ public:
// compositionengine::LayerFE overrides
const compositionengine::LayerFECompositionState* getCompositionState() const override;
bool onPreComposition(bool updatingOutputGeometryThisFrame) override;

View file

@ -1,11 +1,19 @@
From c2edb476e76d96dc48ed0f5b46367d1b0137e8b7 Mon Sep 17 00:00:00 2001
From b89cd9e4add465d850fe7e0bab57c6ad6f133c69 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:24:30 -0400
Subject: [PATCH 6/7] Revert "Remove release fence flags"
Date: Sun, 15 Jun 2025 18:57:59 -0400
Subject: [PATCH 6/6] Revert "Remove release fence flags"
This reverts commit 0077fde3aba6f2bde4e878f88c0dd466350fc1b1.
Change-Id: I04eb5f0a45cc63e55b6b74f2327d182cd9f15098
Change-Id: I339bebac4a7875ccef3b0c5d5111ecfdab35af99
Conflicts:
services/surfaceflinger/CompositionEngine/src/Output.cpp
services/surfaceflinger/Layer.cpp
services/surfaceflinger/SurfaceFlinger.cpp
services/surfaceflinger/common/FlagManager.cpp
services/surfaceflinger/common/include/common/FlagManager.h
services/surfaceflinger/tests/TransactionTestHarnesses.h
---
.../src/CompositionEngine.cpp | 32 +++--
.../CompositionEngine/src/Output.cpp | 15 +-
@ -15,16 +23,16 @@ Change-Id: I04eb5f0a45cc63e55b6b74f2327d182cd9f15098
services/surfaceflinger/Layer.h | 16 +++
services/surfaceflinger/LayerFE.cpp | 4 +-
.../surfaceflinger/RegionSamplingThread.cpp | 2 +-
services/surfaceflinger/SurfaceFlinger.cpp | 123 +++++++++++-----
.../TransactionCallbackInvoker.cpp | 11 +-
services/surfaceflinger/SurfaceFlinger.cpp | 96 +++++++++----
.../TransactionCallbackInvoker.cpp | 10 +-
.../TransactionCallbackInvoker.h | 1 +
.../surfaceflinger/common/FlagManager.cpp | 4 +
.../common/include/common/FlagManager.h | 2 +
.../tests/TransactionTestHarnesses.h | 15 +-
14 files changed, 364 insertions(+), 59 deletions(-)
14 files changed, 345 insertions(+), 50 deletions(-)
diff --git a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
index cfcce473a2..5c5d0cd74d 100644
index ab2a03cd60..787bc23389 100644
--- a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
@@ -198,23 +198,25 @@ void CompositionEngine::preComposition(CompositionRefreshArgs& args) {
@ -69,10 +77,10 @@ index cfcce473a2..5c5d0cd74d 100644
}
}
diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp
index f9ed92d1ee..34773de107 100644
index 00a61a5ab6..7c7537bbbe 100644
--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp
@@ -1664,7 +1664,13 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) {
@@ -1675,7 +1675,13 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) {
releaseFence =
Fence::merge("LayerRelease", releaseFence, frame.clientTargetAcquireFence);
}
@ -84,10 +92,10 @@ index f9ed92d1ee..34773de107 100644
+ .onLayerDisplayed(ftl::yield<FenceResult>(std::move(releaseFence)).share(),
+ outputState.layerFilter.layerStack);
+ }
layer->getLayerFE().setReleasedBuffer(layer->getLayerFE().getCompositionState()->buffer);
}
// We've got a list of layers needing fences, that are disjoint with
@@ -1672,7 +1678,12 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) {
@@ -1684,7 +1690,12 @@ void Output::presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) {
// supply them with the present fence.
for (auto& weakLayer : mReleasedLayers) {
if (const auto layer = weakLayer.promote()) {
@ -102,7 +110,7 @@ index f9ed92d1ee..34773de107 100644
}
diff --git a/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp b/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp
index 3e0c390a5d..deb90deaf7 100644
index 34c09db6f8..dd012dad75 100644
--- a/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/CompositionEngineTest.cpp
@@ -29,6 +29,8 @@
@ -114,7 +122,7 @@ index 3e0c390a5d..deb90deaf7 100644
using namespace com::android::graphics::surfaceflinger;
namespace android::compositionengine {
@@ -491,6 +493,9 @@ struct CompositionEnginePostCompositionTest : public CompositionEngineTest {
@@ -504,6 +506,9 @@ struct CompositionEnginePostCompositionTest : public CompositionEngineTest {
};
TEST_F(CompositionEnginePostCompositionTest, postCompositionReleasesAllFences) {
@ -125,7 +133,7 @@ index 3e0c390a5d..deb90deaf7 100644
.WillOnce(Return(LayerFE::ReleaseFencePromiseStatus::FULFILLED));
EXPECT_CALL(*mLayer2FE, getReleaseFencePromiseStatus)
diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
index 442b603ca0..eb7f0ddc37 100644
index 590626ace5..38ff11f092 100644
--- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
@@ -35,6 +35,7 @@
@ -136,7 +144,7 @@ index 442b603ca0..eb7f0ddc37 100644
#include <cstdint>
#include <variant>
@@ -3289,9 +3290,57 @@ TEST_F(OutputPostFramebufferTest, ifEnabledMustFlipThenPresentThenSendPresentCom
@@ -3304,9 +3305,57 @@ TEST_F(OutputPostFramebufferTest, ifEnabledMustFlipThenPresentThenSendPresentCom
mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled);
}
@ -194,7 +202,7 @@ index 442b603ca0..eb7f0ddc37 100644
mOutput.mState.isEnabled = true;
// Create three unique fence instances
@@ -3328,7 +3377,37 @@ TEST_F(OutputPostFramebufferTest, releaseFencesAreSetInLayerFE) {
@@ -3363,7 +3412,37 @@ TEST_F(OutputPostFramebufferTest, releaseFencesAreSetInLayerFE) {
mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled);
}
@ -232,7 +240,7 @@ index 442b603ca0..eb7f0ddc37 100644
mOutput.mState.isEnabled = true;
mOutput.mState.usesClientComposition = true;
@@ -3351,7 +3430,62 @@ TEST_F(OutputPostFramebufferTest, setReleaseFencesIncludeClientTargetAcquireFenc
@@ -3406,7 +3485,62 @@ TEST_F(OutputPostFramebufferTest, setReleaseFencesIncludeClientTargetAcquireFenc
mOutput.presentFrameAndReleaseLayers(kFlushEvenWhenDisabled);
}
@ -296,10 +304,10 @@ index 442b603ca0..eb7f0ddc37 100644
mOutput.mState.usesClientComposition = true;
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 195461f47e..a8e60f1632 100644
index 2e312827f2..cff489062c 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -805,6 +805,54 @@ void Layer::prepareReleaseCallbacks(ftl::Future<FenceResult> futureFenceResult,
@@ -812,6 +812,54 @@ void Layer::prepareReleaseCallbacks(ftl::Future<FenceResult> futureFenceResult,
}
}
@ -354,10 +362,10 @@ index 195461f47e..a8e60f1632 100644
void Layer::releasePendingBuffer(nsecs_t dequeueReadyTime) {
for (const auto& handle : mDrawingState.callbackHandles) {
handle->bufferReleaseChannel = mBufferReleaseChannel;
@@ -1117,13 +1165,22 @@ bool Layer::setTransactionCompletedListeners(const std::vector<sp<CallbackHandle
handle->acquireTimeOrFence = mCallbackHandleAcquireTimeOrFence;
@@ -1128,13 +1176,22 @@ bool Layer::setTransactionCompletedListeners(const std::vector<sp<CallbackHandle
handle->frameNumber = mDrawingState.frameNumber;
handle->previousFrameNumber = mDrawingState.previousFrameNumber;
handle->previousBuffer = mDrawingState.previousBuffer;
- if (mPreviousReleaseBufferEndpoint == handle->listener) {
+ if (FlagManager::getInstance().ce_fence_promise() &&
+ mPreviousReleaseBufferEndpoint == handle->listener) {
@ -379,10 +387,10 @@ index 195461f47e..a8e60f1632 100644
// Store so latched time and release fence can be set
mDrawingState.callbackHandles.push_back(handle);
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index c234a75693..c4ffe1ef2d 100644
index 88754f9fa3..16324a426c 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -261,6 +261,8 @@ public:
@@ -262,6 +262,8 @@ public:
bool fenceHasSignaled() const;
void onPreComposition(nsecs_t refreshStartTime);
@ -391,7 +399,7 @@ index c234a75693..c4ffe1ef2d 100644
// Tracks mLastClientCompositionFence and gets the callback handle for this layer.
sp<CallbackHandle> findCallbackHandle();
@@ -389,6 +391,20 @@ public:
@@ -390,6 +392,20 @@ public:
// from the layer.
std::vector<ui::LayerStack> mPreviouslyPresentedLayerStacks;
@ -413,7 +421,7 @@ index c234a75693..c4ffe1ef2d 100644
// callback. A release callback may not be given when capturing
// screenshots asynchronously. There may be no buffer update for the
diff --git a/services/surfaceflinger/LayerFE.cpp b/services/surfaceflinger/LayerFE.cpp
index fea7671af2..de64b271f5 100644
index 7ae407da1a..21a1ce733c 100644
--- a/services/surfaceflinger/LayerFE.cpp
+++ b/services/surfaceflinger/LayerFE.cpp
@@ -26,6 +26,7 @@
@ -422,9 +430,9 @@ index fea7671af2..de64b271f5 100644
#include "SurfaceFlinger.h"
+#include "common/FlagManager.h"
#include "ui/FenceResult.h"
#include "ui/LayerStack.h"
namespace android {
@@ -82,7 +83,8 @@ LayerFE::~LayerFE() {
@@ -83,7 +84,8 @@ LayerFE::~LayerFE() {
// Ensures that no promise is left unfulfilled before the LayerFE is destroyed.
// An unfulfilled promise could occur when a screenshot is attempted, but the
// render area is invalid and there is no memory for the capture result.
@ -435,23 +443,23 @@ index fea7671af2..de64b271f5 100644
}
}
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp
index 011fd9e20a..06c2f26a6d 100644
index 7e2144d6b1..c9f0bfb928 100644
--- a/services/surfaceflinger/RegionSamplingThread.cpp
+++ b/services/surfaceflinger/RegionSamplingThread.cpp
@@ -355,7 +355,7 @@ void RegionSamplingThread::captureSample() {
@@ -357,7 +357,7 @@ void RegionSamplingThread::captureSample() {
FenceResult fenceResult;
if (FlagManager::getInstance().single_hop_screenshot() &&
- mFlinger.mRenderEngine->isThreaded()) {
+ FlagManager::getInstance().ce_fence_promise() && mFlinger.mRenderEngine->isThreaded()) {
std::vector<sp<LayerFE>> layerFEs;
auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder,
getLayerSnapshotsFn, layerFEs);
auto displayState =
mFlinger.getSnapshotsFromMainThread(screenshotArgs, getLayerSnapshotsFn, layerFEs);
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 067a8bafe0..47a3c2c2bf 100644
index 235ddfb762..fbae69f30f 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2820,6 +2820,16 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
@@ -2918,6 +2918,16 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
compositionengine::Feature::kSnapshotLayerMetadata);
refreshArgs.bufferIdsToUncache = std::move(mBufferIdsToUncache);
@ -468,7 +476,7 @@ index 067a8bafe0..47a3c2c2bf 100644
refreshArgs.outputColorSetting = mDisplayColorSetting;
refreshArgs.forceOutputColorMode = mForceColorMode;
@@ -2883,38 +2893,54 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
@@ -2981,24 +2991,26 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
layer->onPreComposition(refreshArgs.refreshStartTime);
}
@ -512,45 +520,20 @@ index 067a8bafe0..47a3c2c2bf 100644
+ }
}
}
- }
- mCompositionEngine->present(refreshArgs);
- moveSnapshotsFromCompositionArgs(refreshArgs, layers);
+ mCompositionEngine->present(refreshArgs);
+ moveSnapshotsFromCompositionArgs(refreshArgs, layers);
- for (auto& [layer, layerFE] : layers) {
- CompositionResult compositionResult{layerFE->stealCompositionResult()};
- if (compositionResult.lastClientCompositionFence) {
- layer->setWasClientComposed(compositionResult.lastClientCompositionFence);
+ for (auto& [layer, layerFE] : layers) {
+ CompositionResult compositionResult{layerFE->stealCompositionResult()};
+ if (compositionResult.lastClientCompositionFence) {
+ layer->setWasClientComposed(compositionResult.lastClientCompositionFence);
+ }
}
- if (com_android_graphics_libgui_flags_apply_picture_profiles()) {
- mActivePictureUpdater.onLayerComposed(*layer, *layerFE, compositionResult);
+
+ } else {
+ mCompositionEngine->present(refreshArgs);
+ moveSnapshotsFromCompositionArgs(refreshArgs, layers);
+
+ for (auto [layer, layerFE] : layers) {
+ CompositionResult compositionResult{layerFE->stealCompositionResult()};
@@ -3020,6 +3032,11 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
uint64_t prevOverrideBufferId = 0;
for (auto& [layer, layerFE] : layers) {
CompositionResult compositionResult{layerFE->stealCompositionResult()};
+ if (FlagManager::getInstance().ce_fence_promise()) {
+ for (auto& [releaseFence, layerStack] : compositionResult.releaseFences) {
+ layer->onLayerDisplayed(std::move(releaseFence), layerStack);
+ }
+ if (compositionResult.lastClientCompositionFence) {
+ layer->setWasClientComposed(compositionResult.lastClientCompositionFence);
+ }
+ if (com_android_graphics_libgui_flags_apply_picture_profiles()) {
+ mActivePictureUpdater.onLayerComposed(*layer, *layerFE, compositionResult);
+ }
}
}
@@ -3196,8 +3222,13 @@ void SurfaceFlinger::onCompositionPresented(PhysicalDisplayId pacesetterId,
if (lastLayerStack != layerFE->mSnapshot->outputFilter.layerStack) {
if (lastLayerStack != ui::INVALID_LAYER_STACK) {
// add a space to separate displays
@@ -3345,8 +3362,13 @@ void SurfaceFlinger::onCompositionPresented(PhysicalDisplayId pacesetterId,
auto optDisplay = layerStackToDisplay.get(layerStack);
if (optDisplay && !optDisplay->get()->isVirtual()) {
auto fence = getHwComposer().getPresentFence(optDisplay->get()->getPhysicalId());
@ -566,7 +549,7 @@ index 067a8bafe0..47a3c2c2bf 100644
}
}
layer->releasePendingBuffer(presentTime.ns());
@@ -7382,7 +7413,8 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
@@ -7699,7 +7721,8 @@ void SurfaceFlinger::captureScreenCommon(ScreenshotArgs& args,
return;
}
@ -574,12 +557,12 @@ index 067a8bafe0..47a3c2c2bf 100644
+ if (FlagManager::getInstance().single_hop_screenshot() &&
+ FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) {
std::vector<sp<LayerFE>> layerFEs;
auto displayState =
getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs);
@@ -7623,8 +7655,10 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
auto takeScreenshotFn = [=, this, renderAreaBuilder = std::move(renderAreaBuilder)]() REQUIRES(
bool hasDisplayState = getSnapshotsFromMainThread(args, getLayerSnapshotsFn, layerFEs);
if (!hasDisplayState) {
@@ -7948,8 +7971,10 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshotLegacy(
kMainThreadContext) mutable -> ftl::SharedFuture<FenceResult> {
auto layers = getLayerSnapshotsFn();
- for (auto& [layer, layerFE] : layers) {
- attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK);
+ if (FlagManager::getInstance().ce_fence_promise()) {
@ -587,9 +570,9 @@ index 067a8bafe0..47a3c2c2bf 100644
+ attachReleaseFenceFutureToLayer(layer, layerFE.get(), ui::INVALID_LAYER_STACK);
+ }
}
auto displayState = getDisplayStateFromRenderAreaBuilder(renderAreaBuilder);
@@ -7821,13 +7855,36 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
ScreenCaptureResults captureResults;
@@ -8130,13 +8155,36 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
// TODO(b/196334700) Once we use RenderEngineThreaded everywhere we can always defer the call
// to CompositionEngine::present.
ftl::SharedFuture<FenceResult> presentFuture;
@ -628,18 +611,10 @@ index 067a8bafe0..47a3c2c2bf 100644
}
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.cpp b/services/surfaceflinger/TransactionCallbackInvoker.cpp
index b22ec66819..cc79acbbf5 100644
index 2e8c8c1111..e01c494e15 100644
--- a/services/surfaceflinger/TransactionCallbackInvoker.cpp
+++ b/services/surfaceflinger/TransactionCallbackInvoker.cpp
@@ -28,6 +28,7 @@
#include "Utils/FenceUtils.h"
#include <binder/IInterface.h>
+#include <common/FlagManager.h>
#include <common/trace.h>
#include <utils/RefBase.h>
@@ -126,8 +127,14 @@ status_t TransactionCallbackInvoker::addCallbackHandle(const sp<CallbackHandle>&
@@ -127,8 +127,14 @@ status_t TransactionCallbackInvoker::addCallbackHandle(const sp<CallbackHandle>&
if (surfaceControl) {
sp<Fence> prevFence = nullptr;
@ -657,10 +632,10 @@ index b22ec66819..cc79acbbf5 100644
handle->previousReleaseFence = prevFence;
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.h b/services/surfaceflinger/TransactionCallbackInvoker.h
index 178ddbbe79..9c7bb0d588 100644
index 34f6ffc5da..a9d62d9fd1 100644
--- a/services/surfaceflinger/TransactionCallbackInvoker.h
+++ b/services/surfaceflinger/TransactionCallbackInvoker.h
@@ -43,6 +43,7 @@ public:
@@ -44,6 +44,7 @@ public:
std::string name;
sp<Fence> previousReleaseFence;
std::vector<ftl::Future<FenceResult>> previousReleaseFences;
@ -669,49 +644,42 @@ index 178ddbbe79..9c7bb0d588 100644
nsecs_t latchTime = -1;
std::optional<uint32_t> transformHint = std::nullopt;
diff --git a/services/surfaceflinger/common/FlagManager.cpp b/services/surfaceflinger/common/FlagManager.cpp
index 5c417ba748..b86e815b57 100644
index 6f3a58f6ff..d52957876b 100644
--- a/services/surfaceflinger/common/FlagManager.cpp
+++ b/services/surfaceflinger/common/FlagManager.cpp
@@ -167,6 +167,8 @@ void FlagManager::dump(std::string& result) const {
DUMP_ACONFIG_FLAG(begone_bright_hlg);
DUMP_ACONFIG_FLAG(window_blur_kawase2);
DUMP_ACONFIG_FLAG(single_hop_screenshot);
+ DUMP_ACONFIG_FLAG(screenshot_fence_preservation);
@@ -169,6 +169,8 @@ void FlagManager::dump(std::string& result) const {
DUMP_ACONFIG_FLAG(no_vsyncs_on_screen_off);
DUMP_ACONFIG_FLAG(override_trusted_overlay);
DUMP_ACONFIG_FLAG(protected_if_client);
+ DUMP_ACONFIG_FLAG(ce_fence_promise);
#undef DUMP_ACONFIG_FLAG
#undef DUMP_LEGACY_SERVER_FLAG
@@ -268,6 +270,8 @@ FLAG_MANAGER_ACONFIG_FLAG(deprecate_frame_tracker, "");
FLAG_MANAGER_ACONFIG_FLAG(skip_invisible_windows_in_input, "");
FLAG_MANAGER_ACONFIG_FLAG(begone_bright_hlg, "debug.sf.begone_bright_hlg");
FLAG_MANAGER_ACONFIG_FLAG(window_blur_kawase2, "");
+FLAG_MANAGER_ACONFIG_FLAG(screenshot_fence_preservation, "debug.sf.screenshot_fence_preservation");
+FLAG_MANAGER_ACONFIG_FLAG(ce_fence_promise, "");
/// Trunk stable server (R/W) flags ///
FLAG_MANAGER_ACONFIG_FLAG(refresh_rate_overlay_on_external_display, "")
+ DUMP_ACONFIG_FLAG(screenshot_fence_preservation);
DUMP_ACONFIG_FLAG(reject_dupe_layerstacks);
DUMP_ACONFIG_FLAG(renderable_buffer_usage);
DUMP_ACONFIG_FLAG(restore_blur_step);
@@ -279,6 +281,8 @@ FLAG_MANAGER_ACONFIG_FLAG(no_vsyncs_on_screen_off, "debug.sf.no_vsyncs_on_screen
FLAG_MANAGER_ACONFIG_FLAG(protected_if_client, "")
FLAG_MANAGER_ACONFIG_FLAG(vrr_bugfix_24q4, "");
FLAG_MANAGER_ACONFIG_FLAG(vrr_bugfix_dropped_frame, "")
+FLAG_MANAGER_ACONFIG_FLAG(ce_fence_promise, "")
+FLAG_MANAGER_ACONFIG_FLAG(screenshot_fence_preservation, "debug.sf.screenshot_fence_preservation")
FLAG_MANAGER_ACONFIG_FLAG(graphite_renderengine, "debug.renderengine.graphite")
FLAG_MANAGER_ACONFIG_FLAG(filter_frames_before_trace_starts, "")
FLAG_MANAGER_ACONFIG_FLAG(latch_unsignaled_with_auto_refresh_changed, "");
diff --git a/services/surfaceflinger/common/include/common/FlagManager.h b/services/surfaceflinger/common/include/common/FlagManager.h
index 15284ba0ee..4766f6be38 100644
index 23232c381f..91399c1dda 100644
--- a/services/surfaceflinger/common/include/common/FlagManager.h
+++ b/services/surfaceflinger/common/include/common/FlagManager.h
@@ -74,6 +74,7 @@ public:
bool fp16_client_target() const;
bool game_default_frame_rate() const;
bool enable_layer_command_batching() const;
+ bool screenshot_fence_preservation() const;
bool vulkan_renderengine() const;
bool vrr_bugfix_24q4() const;
bool vrr_bugfix_dropped_frame() const;
@@ -82,6 +83,7 @@ public:
bool dont_skip_on_early_ro() const;
bool no_vsyncs_on_screen_off() const;
bool protected_if_client() const;
@@ -71,6 +71,8 @@ public:
/// IMPORTANT - please keep alphabetize to reduce merge conflicts
bool add_sf_skipped_frames_to_trace() const;
bool adpf_fmq_sf() const;
+ bool ce_fence_promise() const;
bool idle_screen_refresh_rate_timeout() const;
bool graphite_renderengine() const;
bool filter_frames_before_trace_starts() const;
+ bool screenshot_fence_preservation() const;
bool allow_n_vsyncs_in_targeter() const;
bool arr_setframerate_gte_enum() const;
bool begone_bright_hlg() const;
diff --git a/services/surfaceflinger/tests/TransactionTestHarnesses.h b/services/surfaceflinger/tests/TransactionTestHarnesses.h
index c95c875746..5899c7e8b6 100644
index c91f1ea760..186c3a8c5a 100644
--- a/services/surfaceflinger/tests/TransactionTestHarnesses.h
+++ b/services/surfaceflinger/tests/TransactionTestHarnesses.h
@@ -17,6 +17,7 @@
@ -722,10 +690,10 @@ index c95c875746..5899c7e8b6 100644
#include <ui/DisplayState.h>
#include "LayerTransactionTest.h"
@@ -95,8 +96,12 @@ public:
@@ -99,8 +100,12 @@ public:
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
t.setDisplayProjection(vDisplay, displayState.orientation,
Rect(displayState.layerStackSpaceRect), Rect(resolution));
t.setDisplayProjection(vDisplay, ui::Rotation::Rotation0, Rect(resolution),
Rect(resolution));
- t.setDisplayLayerStack(vDisplay, layerStack);
- t.setLayerStack(mirrorSc, layerStack);
+ if (FlagManager::getInstance().ce_fence_promise()) {
@ -737,7 +705,7 @@ index c95c875746..5899c7e8b6 100644
t.apply();
SurfaceComposerClient::Transaction().apply(true);
@@ -116,8 +121,10 @@ public:
@@ -120,8 +125,10 @@ public:
// CompositionEngine::present may attempt to be called on the same
// display multiple times. The layerStack is set to invalid here so
// that the display is ignored if that scenario occurs.

View file

@ -1,4 +1,4 @@
From 7fc0423bce6be78bf802dcd16e9c3cb2b417c19b Mon Sep 17 00:00:00 2001
From 8538024484f651aaa8b7605fa078519c76105033 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 14 Nov 2021 13:47:29 -0500
Subject: [PATCH] Pie MTK IMS calls static
@ -10,10 +10,10 @@ Change-Id: I3dd66d436629d37c8ec795df6569736195ae570e
1 file changed, 8 insertions(+)
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 217a26f..b687e4b 100644
index 37c0832..8456682 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -1679,6 +1679,14 @@ public class ImsManager implements FeatureUpdates {
@@ -1707,6 +1707,14 @@ public class ImsManager implements FeatureUpdates {
}
}
@ -29,5 +29,5 @@ index 217a26f..b687e4b 100644
* Push configuration updates to the ImsService implementation.
*/
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From b172f8039cd27e782a964dc905de2efc6f4d84e4 Mon Sep 17 00:00:00 2001
From 90088ccfac54e95806b29fc2fa12fed28ed1306c Mon Sep 17 00:00:00 2001
From: ironydelerium <42721860+ironydelerium@users.noreply.github.com>
Date: Fri, 31 Dec 2021 02:20:28 -0800
Subject: [PATCH 1/4] Reintroduce 'public void
@ -42,5 +42,5 @@ index 3fdbfe0..fb8011c 100644
* Write Send SMS event using ImsService. Expecting response from
* {@link #writeOnSmsSolicitedResponse}.
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From 7dde5cf40fdf6c8c1d968d8baa9af7cc105e3201 Mon Sep 17 00:00:00 2001
From 035ee3fa580cc494187181e76da1435670641eca Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 6 Dec 2021 16:28:22 -0500
Subject: [PATCH 2/4] Fix baseband being too long to fit into a 91 chars
@ -10,10 +10,10 @@ Change-Id: I1762e4a8cc137626be89f350229d6be162bdaf57
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 5d59327..b5f6509 100644
index f08e237..1f20e3c 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -3448,7 +3448,7 @@ public class GsmCdmaPhone extends Phone {
@@ -3447,7 +3447,7 @@ public class GsmCdmaPhone extends Phone {
String version = (String)ar.result;
if (version != null) {
int length = version.length();
@ -23,5 +23,5 @@ index 5d59327..b5f6509 100644
length <= MAX_VERSION_LEN ? version
: version.substring(length - MAX_VERSION_LEN, length));
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From f31cd295a7431bdb6c1cc126f32348d7fe84301a Mon Sep 17 00:00:00 2001
From ea3633c855860cd01b30673444d26a0b0488b8b5 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Mon, 5 Sep 2022 14:02:37 -0400
Subject: [PATCH 3/4] SubscriptionController: Do not override default calling
@ -18,10 +18,10 @@ Change-Id: Iccab64e9b3b3ab4773bd8944d47c2006f229d472
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 353493b..9857641 100644
index bedc20e..8acca40 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -86,6 +86,7 @@ import android.util.Base64;
@@ -88,6 +88,7 @@ import android.util.Base64;
import android.util.EventLog;
import android.util.IndentingPrintWriter;
import android.util.LocalLog;
@ -29,7 +29,7 @@ index 353493b..9857641 100644
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
@@ -3268,7 +3269,22 @@ public class SubscriptionManagerService extends ISub.Stub {
@@ -3291,7 +3292,22 @@ public class SubscriptionManagerService extends ISub.Stub {
TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class);
if (telecomManager != null) {
@ -54,5 +54,5 @@ index 353493b..9857641 100644
updateDefaultSubId();
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From 0dd5ea9e9e05b4ef9e01d0c9c6a66a25b321791f Mon Sep 17 00:00:00 2001
From 6bf65947854d44369512676a61c59ff5dcdcc4c9 Mon Sep 17 00:00:00 2001
From: ExactExampl <exactxmpl@pixelexperience.org>
Date: Tue, 11 Oct 2022 12:38:00 +0300
Subject: [PATCH 4/4] Conditionally revert "Block Binder thread until incoming
@ -17,7 +17,7 @@ Change-Id: I55a8f3bbca4a2b9a6bc7511e9fe2d0884a8818e5
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 26b6e18..c6b3355 100644
index f4475b5..3d0d3ec 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -70,6 +70,7 @@ import android.os.Registrant;
@ -28,7 +28,7 @@ index 26b6e18..c6b3355 100644
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
@@ -390,7 +391,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
@@ -389,7 +390,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
@Nullable
public IImsCallSessionListener onIncomingCall(
@NonNull IImsCallSession c, @Nullable String callId, @Nullable Bundle extras) {
@ -50,5 +50,5 @@ index 26b6e18..c6b3355 100644
@Override
--
2.44.0
2.48.1

View file

@ -1,24 +0,0 @@
From 6acc862452fd91732f63afa4a3829d0e249355e0 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:55:53 -0400
Subject: [PATCH 1/2] Stop using resource processor
---
Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/Android.bp b/Android.bp
index 0b368c8e..a2dff379 100644
--- a/Android.bp
+++ b/Android.bp
@@ -5,6 +5,7 @@
android_app {
name: "org.lineageos.platform-res",
+ use_resource_processor: false,
sdk_version: "core_platform",
certificate: "platform",
--
2.48.1

View file

@ -1,133 +0,0 @@
From 6cf57340bf1d906438a112942763c12eb35feb51 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:56:06 -0400
Subject: [PATCH 2/2] Add spninfo / schema
---
lib/SpnInfo.xsd | 47 +++++++++++++++++++++++++++++++++++++
lib/schema/current.txt | 40 +++++++++++++++++++++++++++++++
lib/schema/last_current.txt | 0
lib/schema/last_removed.txt | 0
lib/schema/removed.txt | 1 +
5 files changed, 88 insertions(+)
create mode 100644 lib/SpnInfo.xsd
create mode 100644 lib/schema/current.txt
create mode 100644 lib/schema/last_current.txt
create mode 100644 lib/schema/last_removed.txt
create mode 100644 lib/schema/removed.txt
diff --git a/lib/SpnInfo.xsd b/lib/SpnInfo.xsd
new file mode 100644
index 00000000..d30630dc
--- /dev/null
+++ b/lib/SpnInfo.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<xs:schema version="2.0"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="sensitivePNS">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="sensitivePN" maxOccurs="unbounded" type="sensitivePN" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:complexType name="sensitivePN">
+ <xs:sequence>
+ <xs:element name="item" maxOccurs="unbounded" type="item" />
+ </xs:sequence>
+ <xs:attribute name="network" type="xs:string" use="required" />
+ </xs:complexType>
+
+ <xs:complexType name="item">
+ <xs:sequence>
+ <xs:element name="number" type="xs:string" />
+ <xs:element name="name" minOccurs="0" type="xs:string" />
+ <xs:element name="categories" minOccurs="0" type="xs:string" />
+ <xs:element name="languages" minOccurs="0" type="xs:string" />
+ <xs:element name="organization" minOccurs="0" type="xs:string" />
+ <xs:element name="website" minOccurs="0" type="xs:anyURI" />
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
diff --git a/lib/schema/current.txt b/lib/schema/current.txt
new file mode 100644
index 00000000..13e52c67
--- /dev/null
+++ b/lib/schema/current.txt
@@ -0,0 +1,40 @@
+// Signature format: 2.0
+package org.lineageos.lib.phone.spn {
+
+ public class Item {
+ ctor public Item();
+ method public String getCategories();
+ method public String getLanguages();
+ method public String getName();
+ method public String getNumber();
+ method public String getOrganization();
+ method public String getWebsite();
+ method public void setCategories(String);
+ method public void setLanguages(String);
+ method public void setName(String);
+ method public void setNumber(String);
+ method public void setOrganization(String);
+ method public void setWebsite(String);
+ }
+
+ public class SensitivePN {
+ ctor public SensitivePN();
+ method public java.util.List<org.lineageos.lib.phone.spn.Item> getItem();
+ method public String getNetwork();
+ method public void setNetwork(String);
+ }
+
+ public class SensitivePNS {
+ ctor public SensitivePNS();
+ method public java.util.List<org.lineageos.lib.phone.spn.SensitivePN> getSensitivePN();
+ }
+
+ public class XmlParser {
+ ctor public XmlParser();
+ method public static org.lineageos.lib.phone.spn.SensitivePNS read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
diff --git a/lib/schema/last_current.txt b/lib/schema/last_current.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/schema/last_removed.txt b/lib/schema/last_removed.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/schema/removed.txt b/lib/schema/removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/lib/schema/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
--
2.48.1

View file

@ -1,24 +0,0 @@
From 4a576ac73698b2232c51a4b6b3c9a21845801136 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 6 Oct 2024 14:22:49 -0400
Subject: [PATCH 1/3] Downgrade target_sdk_version to 34 for now
---
Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/Android.bp b/Android.bp
index 388f4c00c..498e7c8f0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -207,6 +207,7 @@ android_app {
"java/com/android/voicemail/impl/configui/res",
"java/com/android/voicemail/impl/res",
],
+ target_sdk_version: "34",
sdk_version: "system_current",
srcs: [
"java/**/I*.aidl",
--
2.48.1

View file

@ -1,31 +0,0 @@
From 080c04159988f202694f087f442e3e32f18d4625 Mon Sep 17 00:00:00 2001
From: Jihoon Kang <jihoonkang@google.com>
Date: Fri, 30 Aug 2024 00:29:34 +0000
Subject: [PATCH 2/3] Make java_sdk_library dependencies explicit
modules should specify the submodule of java_sdk_library that the module
actually depends on
Test: CI
Bug: 358613520
Change-Id: I23a22e9d3dc001a5b061177273d407b01bb77a50
---
Android.bp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Android.bp b/Android.bp
index 498e7c8f0..299c1a6e7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -102,7 +102,7 @@ android_app {
exclude_srcs: ["java/com/android/dialer/rootcomponentgenerator/*.java"],
libs: [
"auto_value_annotations",
- "org.apache.http.legacy",
+ "org.apache.http.legacy.stubs.system",
],
optimize: {
proguard_flags_files: [
--
2.48.1

View file

@ -1,24 +0,0 @@
From fa83fab06f1bd59551b926a224e0cf4cdfcb86da Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sun, 16 Mar 2025 13:51:15 -0400
Subject: [PATCH 3/3] Opt-out from the resource processor (for now)
---
Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/Android.bp b/Android.bp
index 299c1a6e7..b35b8913e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -9,6 +9,7 @@ package {
android_app {
name: "Dialer",
+ use_resource_processor: false,
aaptflags: [
"--auto-add-overlay",
"--extra-packages com.android.contacts.common",
--
2.48.1

View file

@ -1,4 +1,4 @@
From 09d183a632ab5ba6ef0f1f76765fc94ef24035f4 Mon Sep 17 00:00:00 2001
From 94e3b8c516fb084eb8b76f71e3bf2de20ace6a3d Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Mon, 11 Oct 2021 20:48:44 -0700
Subject: [PATCH 1/3] Expose themed icon setting in ThemePicker
@ -10,10 +10,10 @@ Change-Id: I44e9288c3de13a3604b7a03857ec400753317d9a
2 files changed, 6 insertions(+)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 517bd6d..89291c1 100644
index 1bce9b3..030c67b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -67,6 +67,9 @@
@@ -68,6 +68,9 @@
<meta-data
android:name="com.android.launcher3.grid.control"
android:value="${packageName}.grid_control" />
@ -24,10 +24,10 @@ index 517bd6d..89291c1 100644
</application>
diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml
index 80d8154..813ef75 100644
index d6aa886..080c4d6 100644
--- a/quickstep/AndroidManifest-launcher.xml
+++ b/quickstep/AndroidManifest-launcher.xml
@@ -65,6 +65,9 @@
@@ -66,6 +66,9 @@
<meta-data
android:name="com.android.launcher3.grid.control"
android:value="${packageName}.grid_control" />

View file

@ -1,4 +1,4 @@
From c2cafe53a8b6acf97dc9a634ada0d4ab53b5fd9f Mon Sep 17 00:00:00 2001
From 02763a96fd66df156cff0d7da383d9d3d9d3d850 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Fri, 7 Jul 2023 18:13:32 -0400
Subject: [PATCH 2/3] Disable QSB in BuildConfig

View file

@ -1,4 +1,4 @@
From de7b698be0f1e01b337672d919854e3a28b8685f Mon Sep 17 00:00:00 2001
From ae08ed286496493afcf23a8abe80cdf3859926d7 Mon Sep 17 00:00:00 2001
From: Luca Stefani <luca.stefani.ge1@gmail.com>
Date: Fri, 1 Nov 2019 23:17:59 +0100
Subject: [PATCH 3/3] Properly expose GridCustomizationsProvider
@ -9,13 +9,13 @@ Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index 80d2eac..53bdfff 100644
index 46f0e41..f728b76 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -138,7 +138,9 @@
<provider
android:name="com.android.launcher3.graphics.GridCustomizationsProvider"
@@ -136,7 +136,9 @@
android:name="com.android.launcher3.graphics.LauncherCustomizationProvider"
android:authorities="${applicationId}.grid_control"
android:permission="android.permission.BIND_WALLPAPER"
- android:exported="true" />
+ android:exported="true"
+ android:writePermission="${packageName}.permission.WRITE_SETTINGS"

View file

@ -1,4 +1,4 @@
From 2002ea94d153575b5178bd4365a897f6cb468134 Mon Sep 17 00:00:00 2001
From 13f7a46bfaa8fd463e486e7ece7cfd7659305bc4 Mon Sep 17 00:00:00 2001
From: Asher Simonds <dayanhammer@gmail.com>
Date: Sun, 3 Apr 2022 12:18:21 +0200
Subject: [PATCH 1/2] Settings: Bring in the new icon
@ -30,7 +30,7 @@ Change-Id: Icdc71193c78642c9253f34b04f8629864f48212a
diff --git a/res/drawable/ic_launcher_background.xml b/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..8c65155
index 00000000000..8c651550f93
--- /dev/null
+++ b/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,18 @@
@ -54,7 +54,7 @@ index 0000000..8c65155
+</vector>
diff --git a/res/drawable/ic_launcher_foreground.xml b/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..4d28d39
index 00000000000..4d28d393e2b
--- /dev/null
+++ b/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,36 @@
@ -96,7 +96,7 @@ index 0000000..4d28d39
+</vector>
diff --git a/res/drawable/ic_launcher_monochrome.xml b/res/drawable/ic_launcher_monochrome.xml
new file mode 100644
index 0000000..087d83f
index 00000000000..087d83f82b3
--- /dev/null
+++ b/res/drawable/ic_launcher_monochrome.xml
@@ -0,0 +1,15 @@
@ -116,7 +116,7 @@ index 0000000..087d83f
+ android:fillType="evenOdd"/>
+</vector>
diff --git a/res/drawable/ic_launcher_settings.xml b/res/drawable/ic_launcher_settings.xml
index 9ede59d..b58c81f 100644
index 9ede59d3c7b..b58c81ff94f 100644
--- a/res/drawable/ic_launcher_settings.xml
+++ b/res/drawable/ic_launcher_settings.xml
@@ -1,5 +1,10 @@
@ -1605,7 +1605,7 @@ z6ETeSztRPj2WqpS>%sk}Z93Z&Tr+fZKn*nj{qN&iN>evQCB%QCz?wonp#Lib2QCjH
z>i%o42p|ibx<XR!|GxahsWW*4*KAw-N^A@R6S=SZu?z6;ukd806eTOgjf4IV%pwj@
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index 0e2e6bc..21a1525 100644
index 0e2e6bcb44c..21a1525b156 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -140,7 +140,7 @@ public class CreateShortcutPreferenceController extends BasePreferenceController

View file

@ -1,4 +1,4 @@
From c8463140729b40cca3cb143561d652fa06c6d628 Mon Sep 17 00:00:00 2001
From 5f9289f600d3c72fe261adebc1c6a3b87759771f Mon Sep 17 00:00:00 2001
From: Oliver Scott <olivercscott@gmail.com>
Date: Thu, 8 Jul 2021 10:40:49 -0400
Subject: [PATCH 2/2] Global VPN feature [2/2]
@ -14,13 +14,13 @@ Change-Id: If4a552b8f59bc15f53c324afa93a67e086b9c5a9
3 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 730c258..0feb0f6 100644
index 0c5bedca93d..17b2cf91e8c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13910,4 +13910,10 @@
<string name="search_gesture_feature_title">Circle to Search</string>
<!-- Summary text for press and hold nav handle OR home button to invoke Circle to Search. [CHAR LIMIT=NONE] -->
<string name="search_gesture_feature_summary">Touch and hold the Home button or the navigation handle to search using the content on your screen.</string>
@@ -14399,4 +14399,10 @@ Data usage charges may apply.</string>
<!-- Title for supervision PIN verification screen [CHAR LIMIT=60] -->
<string name="supervision_full_screen_pin_verification_title">Enter supervision PIN</string>
<string name="accessibility_illustration_content_description"><xliff:g id="feature" example="Select to Speak">%1$s</xliff:g> animation</string>
+
+ <!-- VPN app management screen, global VPN -->
+ <string name="global_vpn_title">Global VPN</string>
@ -29,7 +29,7 @@ index 730c258..0feb0f6 100644
+ <string name="global_vpn_summary_any_vpn_active">You need to disable all active VPN connections first to enable this</string>
</resources>
diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml
index dffbbbe..93df378 100644
index dffbbbe3116..93df378fd76 100644
--- a/res/xml/vpn_app_management.xml
+++ b/res/xml/vpn_app_management.xml
@@ -23,6 +23,12 @@
@ -46,7 +46,7 @@ index dffbbbe..93df378 100644
android:key="always_on_vpn"
android:title="@string/vpn_menu_lockdown"
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 00c8f59..c4f447f 100644
index 00c8f5994ce..c4f447f44fb 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -27,10 +27,12 @@ import android.content.pm.ApplicationInfo;

View file

@ -1,4 +1,4 @@
From bc50b3024c266f307ce804ef1887062cf1f34944 Mon Sep 17 00:00:00 2001
From 87ef7ebbcf6efe1c25a2c1d514d022859433c55f Mon Sep 17 00:00:00 2001
From: Luca Stefani <luca.stefani.ge1@gmail.com>
Date: Fri, 1 Nov 2019 21:14:29 +0100
Subject: [PATCH 1/4] Add wallpaper privapp whitelist
@ -11,10 +11,10 @@ Change-Id: I044b1d9201ac0b8780fc37a387f401f3dd0ddeac
create mode 100644 privapp_whitelist_com.android.wallpaper.xml
diff --git a/Android.bp b/Android.bp
index 58e6413..40e2241 100644
index 5efee51..1938697 100644
--- a/Android.bp
+++ b/Android.bp
@@ -140,6 +140,15 @@ android_app {
@@ -151,6 +151,15 @@ android_app {
platform_apis: true,
manifest: "AndroidManifest.xml",
additional_manifests: [":WallpaperPicker2_Manifest"],

View file

@ -1,4 +1,4 @@
From b255f705538f7e55d445c60c1a12f60dd309df1d Mon Sep 17 00:00:00 2001
From 7eae80748fa17836e787c018808d6b87458b8ea9 Mon Sep 17 00:00:00 2001
From: LuK1337 <priv.luk@gmail.com>
Date: Tue, 15 Sep 2020 03:27:19 +0200
Subject: [PATCH 2/4] Add wallpaper default permissions
@ -11,10 +11,10 @@ Change-Id: If43a594da31fbab9280ce45b049737f6c534b620
create mode 100644 default_permissions_com.android.wallpaper.xml
diff --git a/Android.bp b/Android.bp
index 40e2241..614739a 100644
index 1938697..1d475af 100644
--- a/Android.bp
+++ b/Android.bp
@@ -140,7 +140,10 @@ android_app {
@@ -151,7 +151,10 @@ android_app {
platform_apis: true,
manifest: "AndroidManifest.xml",
additional_manifests: [":WallpaperPicker2_Manifest"],
@ -26,7 +26,7 @@ index 40e2241..614739a 100644
overrides: ["WallpaperPicker", "WallpaperPicker2"],
static_libs: ["ThemePickerApplicationLib"],
}
@@ -152,3 +155,11 @@ prebuilt_etc_xml {
@@ -163,3 +166,11 @@ prebuilt_etc_xml {
filename_from_src: true,
sub_dir: "permissions",
}

View file

@ -1,4 +1,4 @@
From 623014b94ae4bb08328684bb077b05973ab858eb Mon Sep 17 00:00:00 2001
From 5e5726c6def41758424960f9f25f98a8fe6d2ef0 Mon Sep 17 00:00:00 2001
From: Luca Stefani <luca.stefani.ge1@gmail.com>
Date: Fri, 1 Nov 2019 23:17:08 +0100
Subject: [PATCH 3/4] Specify we read and write launcher settings
@ -9,7 +9,7 @@ Change-Id: Ifc8196588443b007602118389ca76d34ab531f14
1 file changed, 3 insertions(+)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f89ff6e..95f5b0e 100755
index 46f364c..5f74c5a 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -60,6 +60,9 @@

View file

@ -1,4 +1,4 @@
From 5880006d7be5eeb3fff8a6d9154ae16e2e6ffac7 Mon Sep 17 00:00:00 2001
From 987c8e91cc42db76d54b0f93ac09c3c10d1e5a0d Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Tue, 5 Oct 2021 22:40:58 -0700
Subject: [PATCH 4/4] Add permission for launcher preview rendering
@ -10,7 +10,7 @@ Change-Id: Ie707dcd98161e8f5993b0504295fddc3f395cd20
2 files changed, 2 insertions(+)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 95f5b0e..8c55499 100755
index 5f74c5a..7d43fd6 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -13,6 +13,7 @@

View file

@ -1,4 +1,4 @@
From 73a87c7bcc594cc3da4b9c2394cda066d36bb557 Mon Sep 17 00:00:00 2001
From 98f9dad6c61b807278e8eaf31f9c03dbf16d926b Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Wed, 24 Aug 2022 15:45:18 -0400
Subject: [PATCH 1/2] audio_hal_interface: Optionally use sysbta HAL
@ -15,7 +15,7 @@ Change-Id: I59973e6ec84c5923be8a7c67b36b2e237f000860
5 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc
index f022ec3ea2..283beb22fa 100644
index f022ec3..283beb2 100644
--- a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc
+++ b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.cc
@@ -58,7 +58,7 @@ BluetoothAudioClientInterface::~BluetoothAudioClientInterface() {
@ -55,7 +55,7 @@ index f022ec3ea2..283beb22fa 100644
if (provider_factory == nullptr) {
log::error("can't get capability from unknown factory");
diff --git a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h
index a45ff946f2..4c99832e1b 100644
index bf687e7..c461c1a 100644
--- a/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h
+++ b/system/audio_hal_interface/aidl/a2dp/client_interface_aidl.h
@@ -28,6 +28,7 @@
@ -66,7 +66,7 @@ index a45ff946f2..4c99832e1b 100644
// Keep after audio_aidl_interfaces.h because of <base/logging.h>
// conflicting definitions.
@@ -156,6 +157,12 @@ protected:
@@ -158,6 +159,12 @@ protected:
// "android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default";
static inline const std::string kDefaultAudioProviderFactoryInterface =
std::string() + IBluetoothAudioProviderFactory::descriptor + "/default";
@ -80,7 +80,7 @@ index a45ff946f2..4c99832e1b 100644
private:
IBluetoothTransportInstance* transport_;
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.cc b/system/audio_hal_interface/aidl/client_interface_aidl.cc
index 176b355eeb..9d8ddd2cac 100644
index 176b355..9d8ddd2 100644
--- a/system/audio_hal_interface/aidl/client_interface_aidl.cc
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.cc
@@ -69,7 +69,7 @@ BluetoothAudioClientInterface::BluetoothAudioClientInterface(IBluetoothTransport
@ -120,7 +120,7 @@ index 176b355eeb..9d8ddd2cac 100644
if (provider_factory == nullptr) {
log::error("can't get capability from unknown factory");
diff --git a/system/audio_hal_interface/aidl/client_interface_aidl.h b/system/audio_hal_interface/aidl/client_interface_aidl.h
index a3c60384ab..ee5901e32a 100644
index a3c6038..ee5901e 100644
--- a/system/audio_hal_interface/aidl/client_interface_aidl.h
+++ b/system/audio_hal_interface/aidl/client_interface_aidl.h
@@ -29,6 +29,7 @@
@ -145,7 +145,7 @@ index a3c60384ab..ee5901e32a 100644
private:
IBluetoothTransportInstance* transport_;
diff --git a/system/audio_hal_interface/hal_version_manager.cc b/system/audio_hal_interface/hal_version_manager.cc
index f9843df858..3931bc6a8d 100644
index f9843df..3931bc6 100644
--- a/system/audio_hal_interface/hal_version_manager.cc
+++ b/system/audio_hal_interface/hal_version_manager.cc
@@ -20,6 +20,7 @@

View file

@ -1,4 +1,4 @@
From 29c09f59e76930a00cefd474c96eb40e63a475f5 Mon Sep 17 00:00:00 2001
From 59adcdccddda720e26386e758e015240dfce73ad Mon Sep 17 00:00:00 2001
From: DerTeufel <dominik-kassel@gmx.de>
Date: Wed, 4 Jan 2023 21:39:37 +0100
Subject: [PATCH 2/2] Don't crash on status:UNSUPPORTED_REMOTE_OR_LMP_FEATURE
@ -11,10 +11,10 @@ Change-Id: Ic57d6631185370cbfdeafdac00801c6ca27fb755
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/system/gd/hci/hci_layer.cc b/system/gd/hci/hci_layer.cc
index 1311815633..7b913888b2 100644
index da370a7..06677cb 100644
--- a/system/gd/hci/hci_layer.cc
+++ b/system/gd/hci/hci_layer.cc
@@ -238,8 +238,10 @@ struct HciLayer::impl {
@@ -244,8 +244,10 @@ struct HciLayer::impl {
using WaitingFor = CommandQueueEntry::WaitingFor;
WaitingFor waiting_for = command_queue_.front().waiting_for_;
CommandStatusView status_view = CommandStatusView::Create(event);

View file

@ -1,4 +1,4 @@
From c632ab2581f8dbff4381aba8fd94979e71edc356 Mon Sep 17 00:00:00 2001
From 10d2007f5120cd3e9a7f775b0ae5e2f1a69474fc Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Sat, 16 Mar 2024 15:27:27 -0400
Subject: [PATCH] Revert "drop support for V gsi on pixel 5 R base kernel"
@ -9,7 +9,7 @@ This reverts commit bbbd18a71368a80f689b924dcf82062c2ee351b2.
1 file changed, 13 insertions(+)
diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
index c0082bb..619f4a3 100644
index 622fba8..d419480 100644
--- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
+++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
@@ -91,6 +91,11 @@ static void verifyPerms(const char * const path,
@ -40,5 +40,5 @@ index c0082bb..619f4a3 100644
}
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From bb84dbc1eafbe7604912a7cba72ae65417c2923d Mon Sep 17 00:00:00 2001
From dec8e279b0e806ba98e9457e5c4be87dd7f53259 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 23 Feb 2022 17:37:47 -0500
Subject: [PATCH 1/2] init: Override select system properties
@ -11,10 +11,10 @@ Change-Id: I94efa3f108ae97711026f099f367b6bea325629f
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/init/property_service.cpp b/init/property_service.cpp
index f2606e3..d12fac1 100644
index 83e9a0d..97d2fe0 100644
--- a/init/property_service.cpp
+++ b/init/property_service.cpp
@@ -797,13 +797,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename,
@@ -795,13 +795,20 @@ static void LoadProperties(char* data, const char* filter, const char* filename,
std::string error;
if (CheckPermissions(key, value, context, cr, &error) == PROP_SUCCESS) {
auto it = properties->find(key);
@ -40,5 +40,5 @@ index f2606e3..d12fac1 100644
LOG(ERROR) << "Do not have permissions to set '" << key << "' to '" << value
<< "' in property file '" << filename << "': " << error;
--
2.44.0
2.48.1

View file

@ -1,4 +1,4 @@
From f1bdfa28ee093ca4db697560ccd4b1e4b24be937 Mon Sep 17 00:00:00 2001
From 1fba99a3d1ffe80ef978a4d99c79a83218e3b5bd Mon Sep 17 00:00:00 2001
From: Isaac Chen <tingyi364@gmail.com>
Date: Wed, 23 Jun 2021 13:07:30 +0800
Subject: [PATCH 2/2] init: Do not start console service when debuggable
@ -13,10 +13,10 @@ Change-Id: I34cfd6b42d3b9aee4b3e63181480cfb8b1255f29
1 file changed, 3 deletions(-)
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 1acd637..c3d963f 100644
index 471059b..0019c38 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -1355,9 +1355,6 @@ on property:ro.debuggable=1
@@ -1315,9 +1315,6 @@ on property:ro.debuggable=1
# Give reads to anyone for the accessibility trace folder on debug builds.
chmod 0775 /data/misc/a11ytrace
@ -27,5 +27,5 @@ index 1acd637..c3d963f 100644
on property:persist.device_config.mglru_native.lru_gen_config=none
write /sys/kernel/mm/lru_gen/enabled 0
--
2.44.0
2.48.1