diff options
author | alk3pInjection <webmaster@raspii.tech> | 2022-08-05 20:43:06 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2022-08-05 20:43:06 +0800 |
commit | 6bf5529a1dc2fe7c6269298fa98a0982f6cea2d5 (patch) | |
tree | 76b090ba1598e728ec85a8afbb88c909d076bf1b | |
parent | f637d7a7cafb1540448d3622285bd6080e492a54 (diff) | |
parent | 9b46e1caea3e666973508df4f2013ec4a954bb8f (diff) |
Merge tag 'LA.QSSI.12.0.r1-08300-qssi.0' into sugisawa-mr1
"LA.QSSI.12.0.r1-08300-qssi.0"
Change-Id: Ie275081952d33914848f88404af4b28f7b3dea92
9 files changed, 178 insertions, 128 deletions
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java index 39beeeae11de..c3511e7c036d 100644 --- a/core/java/android/view/Choreographer.java +++ b/core/java/android/view/Choreographer.java @@ -844,6 +844,10 @@ public final class Choreographer { mLastVsyncEventData = vsyncEventData; } + if (frameIntervalNanos > 0 && frameIntervalNanos != mFrameIntervalNanos) { + mFrameIntervalNanos = frameIntervalNanos; + ScrollOptimizer.setFrameInterval(mFrameIntervalNanos); + } ScrollOptimizer.setUITaskStatus(true); AnimationUtils.lockAnimationClock(frameTimeNanos / TimeUtils.NANOS_PER_MS); diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 806ea95424a7..1ed5840c4ab4 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -2031,9 +2031,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { case MESSAGE_ENABLE: int quietEnable = msg.arg1; int isBle = msg.arg2; + Slog.d(TAG, "MESSAGE_ENABLE: isBle: " + isBle + " msg.obj : " + msg.obj); if (mHandler.hasMessages(MESSAGE_HANDLE_DISABLE_DELAYED) || mHandler.hasMessages(MESSAGE_HANDLE_ENABLE_DELAYED)) { - if (msg.arg2 == 0) { + if (msg.obj == null) { int delay = ENABLE_DISABLE_DELAY_MS; if (mHandler.hasMessages(MESSAGE_DISABLE)) { @@ -2044,11 +2045,11 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mHandler.removeMessages(MESSAGE_ENABLE); // We are handling enable or disable right now, wait for it. mHandler.sendMessageDelayed(mHandler.obtainMessage( - MESSAGE_ENABLE, quietEnable, 1), delay); + MESSAGE_ENABLE, quietEnable, isBle, 1), delay); Slog.d(TAG, "Queue new MESSAGE_ENABLE"); } else { mHandler.sendMessageDelayed(mHandler.obtainMessage( - MESSAGE_ENABLE, quietEnable, 1), ENABLE_DISABLE_DELAY_MS); + MESSAGE_ENABLE, quietEnable, isBle, 1), ENABLE_DISABLE_DELAY_MS); Slog.d(TAG, "Re-Queue previous MESSAGE_ENABLE"); if (mHandler.hasMessages(MESSAGE_DISABLE)) { // Ensure the original order of just entering the queue @@ -2060,10 +2061,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } } break; - } else if(msg.arg2 == 0 && mHandler.hasMessages(MESSAGE_DISABLE)) { + } else if(msg.obj == null && mHandler.hasMessages(MESSAGE_DISABLE)) { mHandler.removeMessages(MESSAGE_ENABLE); mHandler.sendMessageDelayed(mHandler.obtainMessage( - MESSAGE_ENABLE, quietEnable, 1), ENABLE_DISABLE_DELAY_MS * 2); + MESSAGE_ENABLE, quietEnable, isBle, 1), ENABLE_DISABLE_DELAY_MS * 2); Slog.d(TAG, "MESSAGE_DISABLE exist. Queue new MESSAGE_ENABLE"); break; } @@ -2088,11 +2089,14 @@ class BluetoothManagerService extends IBluetoothManager.Stub { int state = mBluetooth.getState(); switch (state) { case BluetoothAdapter.STATE_BLE_ON: - if (isBle == 1) { - Slog.i(TAG, "Already at BLE_ON State"); - } else { - Slog.w(TAG, "BT Enable in BLE_ON State, going to ON"); + if (isBluetoothPersistedStateOnBluetooth() || + mEnableExternal) { + Slog.w(TAG, "BLE_ON State:Enable from Settings or" + + "BT on persisted, going to ON"); mBluetooth.onLeServiceUp(mContext.getAttributionSource()); + } else if (isBle == 1) { + Slog.w(TAG, "BLE_ON State:Queued enable from ble app," + + " stay in ble on"); } break; case BluetoothAdapter.STATE_BLE_TURNING_ON: @@ -2165,8 +2169,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub { // if MESSAGE_DISABLE present mHandler.removeMessages(MESSAGE_ENABLE); mHandler.sendMessageDelayed(mHandler.obtainMessage( - MESSAGE_ENABLE, mQuietEnableExternal ? 1: 0, 1), - ENABLE_DISABLE_DELAY_MS * 2); + MESSAGE_ENABLE, mQuietEnableExternal ? 1: 0, + mEnableExternal ? 0:1, 1), ENABLE_DISABLE_DELAY_MS * 2); Slog.d(TAG, "Re-Queue previous MESSAGE_ENABLE"); } } diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 3e905960d4df..ee5bc5374df0 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -306,6 +306,9 @@ public final class ActiveServices { private IServicetracker mServicetracker; + private final boolean isLowRamDevice = + SystemProperties.getBoolean("ro.config.low_ram", false); + String mLastAnrDump; AppWidgetManagerInternal mAppWidgetManagerInternal; @@ -2848,28 +2851,30 @@ public final class ActiveServices { } clist.add(c); - ServiceData sData = new ServiceData(); - sData.packageName = s.packageName; - sData.processName = s.shortInstanceName; - sData.lastActivity = s.lastActivity; - if (s.app != null) { - sData.pid = s.app.getPid(); - sData.serviceB = s.app.mState.isServiceB(); - } else { - sData.pid = -1; - sData.serviceB = false; - } + if (!isLowRamDevice) { + ServiceData sData = new ServiceData(); + sData.packageName = s.packageName; + sData.processName = s.shortInstanceName; + sData.lastActivity = s.lastActivity; + if (s.app != null) { + sData.pid = s.app.getPid(); + sData.serviceB = s.app.mState.isServiceB(); + } else { + sData.pid = -1; + sData.serviceB = false; + } - ClientData cData = new ClientData(); - cData.processName = callerApp.processName; - cData.pid = callerApp.getPid(); - try { - if (getServicetrackerInstance()) { - mServicetracker.bindService(sData, cData); + ClientData cData = new ClientData(); + cData.processName = callerApp.processName; + cData.pid = callerApp.getPid(); + try { + if (getServicetrackerInstance()) { + mServicetracker.bindService(sData, cData); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to send bind details to servicetracker HAL", e); + mServicetracker = null; } - } catch (RemoteException e) { - Slog.e(TAG, "Failed to send bind details to servicetracker HAL", e); - mServicetracker = null; } boolean needOomAdj = false; @@ -3054,28 +3059,30 @@ public final class ActiveServices { try { while (clist.size() > 0) { ConnectionRecord r = clist.get(0); - ServiceData sData = new ServiceData(); - sData.packageName = r.binding.service.packageName; - sData.processName = r.binding.service.shortInstanceName; - sData.lastActivity = r.binding.service.lastActivity; - if(r.binding.service.app != null) { - sData.pid = r.binding.service.app.getPid(); - sData.serviceB = r.binding.service.app.mState.isServiceB(); - } else { - sData.pid = -1; - sData.serviceB = false; - } + if (!isLowRamDevice) { + ServiceData sData = new ServiceData(); + sData.packageName = r.binding.service.packageName; + sData.processName = r.binding.service.shortInstanceName; + sData.lastActivity = r.binding.service.lastActivity; + if(r.binding.service.app != null) { + sData.pid = r.binding.service.app.getPid(); + sData.serviceB = r.binding.service.app.mState.isServiceB(); + } else { + sData.pid = -1; + sData.serviceB = false; + } - ClientData cData = new ClientData(); - cData.processName = r.binding.client.processName; - cData.pid = r.binding.client.getPid(); - try { - if (getServicetrackerInstance()) { - mServicetracker.unbindService(sData, cData); + ClientData cData = new ClientData(); + cData.processName = r.binding.client.processName; + cData.pid = r.binding.client.getPid(); + try { + if (getServicetrackerInstance()) { + mServicetracker.unbindService(sData, cData); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to send unbind details to servicetracker HAL", e); + mServicetracker = null; } - } catch (RemoteException e) { - Slog.e(TAG, "Failed to send unbind details to servicetracker HAL", e); - mServicetracker = null; } removeConnectionLocked(r, null, null, true); if (clist.size() > 0 && clist.get(0) == r) { @@ -4086,20 +4093,22 @@ public final class ActiveServices { r.postNotification(); created = true; - ServiceData sData = new ServiceData(); - sData.packageName = r.packageName; - sData.processName = r.shortInstanceName; - sData.pid = r.app.getPid(); - sData.lastActivity = r.lastActivity; - sData.serviceB = r.app.mState.isServiceB(); + if (!isLowRamDevice) { + ServiceData sData = new ServiceData(); + sData.packageName = r.packageName; + sData.processName = r.shortInstanceName; + sData.pid = r.app.getPid(); + sData.lastActivity = r.lastActivity; + sData.serviceB = r.app.mState.isServiceB(); - try { - if (getServicetrackerInstance()) { - mServicetracker.startService(sData); + try { + if (getServicetrackerInstance()) { + mServicetracker.startService(sData); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to send start details to servicetracker HAL", e); + mServicetracker = null; } - } catch (RemoteException e) { - Slog.e(TAG, "Failed to send start details to servicetracker HAL", e); - mServicetracker = null; } } catch (DeadObjectException e) { Slog.w(TAG, "Application dead when creating service " + r); @@ -4300,24 +4309,26 @@ public final class ActiveServices { private void bringDownServiceLocked(ServiceRecord r, boolean enqueueOomAdj) { //Slog.i(TAG, "Bring down service:"); //r.dump(" "); - ServiceData sData = new ServiceData(); - sData.packageName = r.packageName; - sData.processName = r.shortInstanceName; - sData.lastActivity = r.lastActivity; - if (r.app != null) { - sData.pid = r.app.getPid(); - } else { - sData.pid = -1; - sData.serviceB = false; - } + if (!isLowRamDevice) { + ServiceData sData = new ServiceData(); + sData.packageName = r.packageName; + sData.processName = r.shortInstanceName; + sData.lastActivity = r.lastActivity; + if (r.app != null) { + sData.pid = r.app.getPid(); + } else { + sData.pid = -1; + sData.serviceB = false; + } - try { - if (getServicetrackerInstance()) { - mServicetracker.destroyService(sData); + try { + if (getServicetrackerInstance()) { + mServicetracker.destroyService(sData); + } + } catch (RemoteException e) { + Slog.e(TAG, "Failed to send destroy details to servicetracker HAL", e); + mServicetracker = null; } - } catch (RemoteException e) { - Slog.e(TAG, "Failed to send destroy details to servicetracker HAL", e); - mServicetracker = null; } // Report to all of the connections that the service is no longer // available. @@ -5065,7 +5076,7 @@ public final class ActiveServices { } try { - if (getServicetrackerInstance()) { + if (!isLowRamDevice && getServicetrackerInstance()) { mServicetracker.killProcess(app.getPid()); } } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index dbdb2ab54e89..3e3a4a51f372 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6447,7 +6447,6 @@ public class ActivityManagerService extends IActivityManager.Stub reportCurWakefulnessUsageEvent(); mActivityTaskManager.onScreenAwakeChanged(isAwake); mOomAdjProfiler.onWakefulnessChanged(wakefulness); - mOomAdjuster.onWakefulnessChanged(wakefulness); } updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY); } diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 30b63940de7f..2aba375fc40b 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1128,15 +1128,6 @@ public final class CachedAppOptimizer { } } - void onWakefulnessChanged(int wakefulness) { - if(wakefulness == PowerManagerInternal.WAKEFULNESS_AWAKE) { - // Remove any pending compaction we may have scheduled to happen while screen was off - Slog.e(TAG_AM, "Cancel pending or running compactions as system is awake"); - mPendingCompactionProcesses.clear(); - cancelCompaction(); - } - } - @GuardedBy({"mService", "mProcLock"}) void onOomAdjustChanged(int oldAdj, int newAdj, ProcessRecord app) { // Cancel any currently executing compactions diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 2ed6fc483e31..e94c2fa60fc1 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -2687,10 +2687,6 @@ public class OomAdjuster { } } - void onWakefulnessChanged(int wakefulness) { - mCachedAppOptimizer.onWakefulnessChanged(wakefulness); - } - /** Applies the computed oomadj, procstate and sched group values and freezes them in set* */ @GuardedBy({"mService", "mProcLock"}) private boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now, diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 96557f79a554..48d923b38c4e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -900,7 +900,8 @@ public class PackageManagerService extends IPackageManager.Stub * List of packages path on the file system. */ final private List<String> mPackagesPathToBeDisabledForQSPA = new ArrayList<String>(); - final private boolean mQspaEnabled = SystemProperties.getBoolean("ro.config.qspa.apps", false); + final private boolean mQspaEnabled = SystemProperties.getBoolean( + "ro.vendor.config.qspa.apps", false); /** * Tracks new system packages [received in an OTA] that we expect to diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 55ac7ccdcaaf..b713e82b8534 100755..100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -284,6 +284,7 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; +import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; import android.service.contentcapture.ActivityEvent; @@ -613,6 +614,9 @@ public final class ActivityRecord extends WindowToken implements WindowManagerSe public BoostFramework mPerf = null; public BoostFramework mPerf_iop = null; + private final boolean isLowRamDevice = + SystemProperties.getBoolean("ro.config.low_ram", false); + boolean mVoiceInteraction; private int mPendingRelaunchCount; @@ -5270,18 +5274,21 @@ public final class ActivityRecord extends WindowToken implements WindowManagerSe aState = ActivityStates.RESTARTING_PROCESS; break; } - if(DEBUG_SERVICETRACKER) { - Slog.v(TAG, "Calling mServicetracker.OnActivityStateChange with flag " + early_notify + " state " + state); - } - try { - mServicetracker = mAtmService.mTaskSupervisor.getServicetrackerInstance(); - if (mServicetracker != null) - mServicetracker.OnActivityStateChange(aState, aDetails, aStats, early_notify); - else - Slog.e(TAG, "Unable to get servicetracker HAL instance"); - } catch (RemoteException e) { - Slog.e(TAG, "Failed to send activity state change details to servicetracker HAL", e); - mAtmService.mTaskSupervisor.destroyServicetrackerInstance(); + if (!isLowRamDevice) { + if(DEBUG_SERVICETRACKER) { + Slog.v(TAG, "Calling mServicetracker.OnActivityStateChange with flag " + + early_notify + " state " + state); + } + try { + mServicetracker = mAtmService.mTaskSupervisor.getServicetrackerInstance(); + if (mServicetracker != null) + mServicetracker.OnActivityStateChange(aState, aDetails, aStats, early_notify); + else + Slog.e(TAG, "Unable to get servicetracker HAL instance"); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to send activity state change details to servicetracker HAL", e); + mAtmService.mTaskSupervisor.destroyServicetrackerInstance(); + } } } diff --git a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp index 619b612b0374..636ca4143a33 100644 --- a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp +++ b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp @@ -88,9 +88,7 @@ static inline void compactProcessProcfs(int pid, const std::string& compactionTy // If any VMA fails compaction due to -EINVAL it will be skipped and continue. // However, if it fails for any other reason, it will bail out and forward the error static int64_t compactMemory(const std::vector<Vma>& vmas, int pid, int madviseType) { - // UIO_MAXIOV is currently a small value and we might have more addresses - // we do multiple syscalls if we exceed its maximum - static struct iovec vmasToKernel[UIO_MAXIOV]; + static struct iovec vmasToKernel[MAX_VMAS_PER_COMPACTION]; if (vmas.empty()) { return 0; @@ -104,33 +102,72 @@ static int64_t compactMemory(const std::vector<Vma>& vmas, int pid, int madviseT compactionInProgress = true; cancelRunningCompaction = false; - int64_t totalBytesCompacted = 0; - for (int iBase = 0; iBase < vmas.size(); iBase += UIO_MAXIOV) { - if (CC_UNLIKELY(cancelRunningCompaction)) { - // There could be a significant delay betweenwhen a compaction - // is requested and when it is handled during this time - // our OOM adjust could have improved. + int64_t totalBytesProcessed = 0; + + int64_t vmaOffset = 0; + for (int iVma = 0; iVma < vmas.size();) { + uint64_t bytesSentToCompact = 0; + int iVec = 0; + while (iVec < MAX_VMAS_PER_COMPACTION && iVma < vmas.size()) { + if (CC_UNLIKELY(cancelRunningCompaction)) { + // There could be a significant delay between when a compaction + // is requested and when it is handled during this time our + // OOM adjust could have improved. + LOG(DEBUG) << "Cancelled running compaction for " << pid; + break; + } + + uint64_t vmaStart = vmas[iVma].start + vmaOffset; + uint64_t vmaSize = vmas[iVma].end - vmaStart; + if (vmaSize == 0) { + goto next_vma; + } + vmasToKernel[iVec].iov_base = (void*)vmaStart; + if (vmaSize > MAX_BYTES_PER_COMPACTION - bytesSentToCompact) { + // Exceeded the max bytes that could be sent, so clamp + // the end to avoid exceeding limit and issue compaction + vmaSize = MAX_BYTES_PER_COMPACTION - bytesSentToCompact; + } + + vmasToKernel[iVec].iov_len = vmaSize; + bytesSentToCompact += vmaSize; + ++iVec; + if (bytesSentToCompact >= MAX_BYTES_PER_COMPACTION) { + // Ran out of bytes within iovec, dispatch compaction. + vmaOffset += vmaSize; + break; + } + + next_vma: + // Finished current VMA, and have more bytes remaining + vmaOffset = 0; + ++iVma; + } + + if (cancelRunningCompaction) { cancelRunningCompaction = false; break; } - int totalVmasToKernel = std::min(UIO_MAXIOV, (int)(vmas.size() - iBase)); - for (int iVec = 0, iVma = iBase; iVec < totalVmasToKernel; ++iVec, ++iVma) { - vmasToKernel[iVec].iov_base = (void*)vmas[iVma].start; - vmasToKernel[iVec].iov_len = vmas[iVma].end - vmas[iVma].start; - } - auto bytesCompacted = - process_madvise(pidfd, vmasToKernel, totalVmasToKernel, madviseType, 0); - if (CC_UNLIKELY(bytesCompacted == -1)) { - compactionInProgress = false; - return -errno; + auto bytesProcessed = process_madvise(pidfd, vmasToKernel, iVec, madviseType, 0); + + if (CC_UNLIKELY(bytesProcessed == -1)) { + if (errno == EINVAL) { + // This error is somewhat common due to an unevictable VMA if this is + // the case silently skip the bad VMA and continue compacting the rest. + continue; + } else { + // Forward irrecoverable errors and bail out compaction + compactionInProgress = false; + return -errno; + } } - totalBytesCompacted += bytesCompacted; + totalBytesProcessed += bytesProcessed; } compactionInProgress = false; - return totalBytesCompacted; + return totalBytesProcessed; } static int getFilePageAdvice(const Vma& vma) { |