diff options
11 files changed, 67 insertions, 32 deletions
diff --git a/apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java b/apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java index 73bff08c626d..af0237491639 100644 --- a/apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java +++ b/apct-tests/perftests/utils/src/android/perftests/utils/BenchmarkState.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.app.Instrumentation; import android.os.Bundle; import android.os.Debug; +import android.os.Trace; import android.util.Log; import androidx.test.InstrumentationRegistry; @@ -129,17 +130,23 @@ public final class BenchmarkState { } private void beginWarmup() { + Trace.beginSection("Warmup"); mStartTimeNs = System.nanoTime(); mIteration = 0; mState = WARMUP; } + private void endWarmup() { + Trace.endSection(); + } + private void beginBenchmark(long warmupDuration, int iterations) { if (ENABLE_PROFILING) { File f = new File(InstrumentationRegistry.getContext().getDataDir(), "benchprof"); Log.d(TAG, "Tracing to: " + f.getAbsolutePath()); Debug.startMethodTracingSampling(f.getAbsolutePath(), 16 * 1024 * 1024, 100); } + Trace.beginSection("Benchmark"); mMaxIterations = (int) (TARGET_TEST_DURATION_NS / (warmupDuration / iterations)); mMaxIterations = Math.min(MAX_TEST_ITERATIONS, Math.max(mMaxIterations, MIN_TEST_ITERATIONS)); @@ -150,6 +157,10 @@ public final class BenchmarkState { mStartTimeNs = System.nanoTime(); } + private void endBenchmark() { + Trace.endSection(); + } + private boolean startNextTestRun() { final long currentTime = System.nanoTime(); mResults.add((currentTime - mStartTimeNs - mPausedDurationNs) / mMaxIterations); @@ -165,6 +176,7 @@ public final class BenchmarkState { return true; } mState = FINISHED; + endBenchmark(); return false; } mPausedDurationNs = 0; @@ -189,6 +201,7 @@ public final class BenchmarkState { // don't yet have a target iteration count. final long duration = System.nanoTime() - mStartTimeNs; if (mIteration >= WARMUP_MIN_ITERATIONS && duration >= WARMUP_DURATION_NS) { + endWarmup(); beginBenchmark(duration, mIteration); } return true; @@ -208,6 +221,7 @@ public final class BenchmarkState { mCustomizedIterations++; if (mCustomizedIterations >= mMaxCustomizedIterations) { mState = FINISHED; + endBenchmark(); return false; } mCustomizedIterationListener.onStart(mCustomizedIterations); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 59327c8afecc..7862a361997b 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2385,6 +2385,12 @@ package android.os { method @NonNull public static byte[] digest(@NonNull java.io.InputStream, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException; } + public class Handler { + method @FlaggedApi("android.os.mainline_vcn_platform_api") public final boolean hasMessagesOrCallbacks(); + method @FlaggedApi("android.os.mainline_vcn_platform_api") public final void removeCallbacksAndEqualMessages(@Nullable Object); + method @FlaggedApi("android.os.mainline_vcn_platform_api") public final void removeEqualMessages(int, @Nullable Object); + } + public class IpcDataCache<Query, Result> extends android.app.PropertyInvalidatedCache<Query,Result> { ctor public IpcDataCache(int, @NonNull String, @NonNull String, @NonNull String, @NonNull android.os.IpcDataCache.QueryHandler<Query,Result>); method public static void disableForCurrentProcess(@NonNull String); diff --git a/core/java/android/net/flags.aconfig b/core/java/android/net/flags.aconfig index f7dc7906d50d..a30cd5cfe23a 100644 --- a/core/java/android/net/flags.aconfig +++ b/core/java/android/net/flags.aconfig @@ -28,3 +28,11 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "mdns_improvement_for_25q2" + is_exported: true + namespace: "android_core_networking" + description: "Flag for MDNS quality, reliability and performance improvement in 25Q2" + bug: "373270045" +} diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java index d0828c384664..eaecd34b9d75 100644 --- a/core/java/android/os/Handler.java +++ b/core/java/android/os/Handler.java @@ -20,6 +20,7 @@ import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.util.Log; import android.util.Printer; @@ -839,6 +840,7 @@ public class Handler { *@hide */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + @TestApi @FlaggedApi(android.os.Flags.FLAG_MAINLINE_VCN_PLATFORM_API) public final void removeEqualMessages(int what, @Nullable Object object) { mQueue.removeEqualMessages(this, what, disallowNullArgumentIfShared(object)); @@ -872,6 +874,7 @@ public class Handler { *@hide */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + @TestApi @FlaggedApi(android.os.Flags.FLAG_MAINLINE_VCN_PLATFORM_API) public final void removeCallbacksAndEqualMessages(@Nullable Object token) { mQueue.removeCallbacksAndEqualMessages(this, disallowNullArgumentIfShared(token)); @@ -889,6 +892,7 @@ public class Handler { * @hide */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + @TestApi @FlaggedApi(android.os.Flags.FLAG_MAINLINE_VCN_PLATFORM_API) public final boolean hasMessagesOrCallbacks() { return mQueue.hasMessages(this); diff --git a/nfc/Android.bp b/nfc/Android.bp index b82dec88993d..c33665aef41d 100644 --- a/nfc/Android.bp +++ b/nfc/Android.bp @@ -56,7 +56,7 @@ java_sdk_library { ], defaults: ["framework-module-defaults"], sdk_version: "module_current", - min_sdk_version: "current", + min_sdk_version: "35", // Make it 36 once available. installable: true, optimize: { enabled: false, diff --git a/services/art-wear-profile b/services/art-wear-profile index 47bdb1385137..42c4a01c5c2f 100644 --- a/services/art-wear-profile +++ b/services/art-wear-profile @@ -7419,7 +7419,7 @@ PLcom/android/server/app/GameManagerService;->sendUserMessage(IILjava/lang/Strin PLcom/android/server/app/GameManagerService;->updateConfigsForUser(IZ[Ljava/lang/String;)V PLcom/android/server/app/GameManagerService;->writeGameModeInterventionsToFile(I)V PLcom/android/server/app/GameManagerSettings;-><init>(Ljava/io/File;)V -HPLcom/android/server/app/GameManagerSettings;->getConfigOverride(Ljava/lang/String;)Lcom/android/server/app/GameManagerService$GamePackageConfiguration; +HPLcom/android/server/app/GameManagerSettings;->getConfigOverrideLocked(Ljava/lang/String;)Lcom/android/server/app/GameManagerService$GamePackageConfiguration; HPLcom/android/server/app/GameManagerSettings;->getGameModeLocked(Ljava/lang/String;)I PLcom/android/server/app/GameManagerSettings;->readPersistentDataLocked()Z PLcom/android/server/appbinding/AppBindingConstants;-><init>(Ljava/lang/String;)V diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 5f637a39674d..58ef814b67df 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1422,10 +1422,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } final GameManagerSettings settings = mSettings.get(userId); // look for the existing GamePackageConfiguration override - configOverride = settings.getConfigOverride(packageName); + configOverride = settings.getConfigOverrideLocked(packageName); if (configOverride == null) { configOverride = new GamePackageConfiguration(packageName); - settings.setConfigOverride(packageName, configOverride); + settings.setConfigOverrideLocked(packageName, configOverride); } } GamePackageConfiguration.GameModeConfiguration internalConfig = @@ -1758,10 +1758,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } final GameManagerSettings settings = mSettings.get(userId); // look for the existing GamePackageConfiguration override - configOverride = settings.getConfigOverride(packageName); + configOverride = settings.getConfigOverrideLocked(packageName); if (configOverride == null) { configOverride = new GamePackageConfiguration(packageName); - settings.setConfigOverride(packageName, configOverride); + settings.setConfigOverrideLocked(packageName, configOverride); } } // modify GameModeConfiguration intervention settings @@ -1800,7 +1800,7 @@ public final class GameManagerService extends IGameManagerService.Stub { } final GameManagerSettings settings = mSettings.get(userId); if (gameModeToReset != -1) { - final GamePackageConfiguration configOverride = settings.getConfigOverride( + final GamePackageConfiguration configOverride = settings.getConfigOverrideLocked( packageName); if (configOverride == null) { return; @@ -1811,10 +1811,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } configOverride.removeModeConfig(gameModeToReset); if (!configOverride.hasActiveGameModeConfig()) { - settings.removeConfigOverride(packageName); + settings.removeConfigOverrideLocked(packageName); } } else { - settings.removeConfigOverride(packageName); + settings.removeConfigOverrideLocked(packageName); } } @@ -2029,7 +2029,7 @@ public final class GameManagerService extends IGameManagerService.Stub { synchronized (mLock) { if (mSettings.containsKey(userId)) { - overrideConfig = mSettings.get(userId).getConfigOverride(packageName); + overrideConfig = mSettings.get(userId).getConfigOverrideLocked(packageName); } } if (overrideConfig == null || config == null) { @@ -2074,7 +2074,7 @@ public final class GameManagerService extends IGameManagerService.Stub { } synchronized (mLock) { if (mSettings.containsKey(userId)) { - mSettings.get(userId).removeGame(packageName); + mSettings.get(userId).removeGameLocked(packageName); } sendUserMessage(userId, WRITE_SETTINGS, Intent.ACTION_PACKAGE_REMOVED, WRITE_DELAY_MILLIS); diff --git a/services/core/java/com/android/server/app/GameManagerSettings.java b/services/core/java/com/android/server/app/GameManagerSettings.java index b084cf3c3b12..c57a1f73d7d7 100644 --- a/services/core/java/com/android/server/app/GameManagerSettings.java +++ b/services/core/java/com/android/server/app/GameManagerSettings.java @@ -116,7 +116,7 @@ public class GameManagerSettings { * Removes all game settings of a given package. * This operation must be synced with an external lock. */ - void removeGame(String packageName) { + void removeGameLocked(String packageName) { mGameModes.remove(packageName); mConfigOverrides.remove(packageName); } @@ -125,7 +125,7 @@ public class GameManagerSettings { * Returns the game config override of a given package or null if absent. * This operation must be synced with an external lock. */ - GamePackageConfiguration getConfigOverride(String packageName) { + GamePackageConfiguration getConfigOverrideLocked(String packageName) { return mConfigOverrides.get(packageName); } @@ -133,7 +133,7 @@ public class GameManagerSettings { * Sets the game config override of a given package. * This operation must be synced with an external lock. */ - void setConfigOverride(String packageName, GamePackageConfiguration configOverride) { + void setConfigOverrideLocked(String packageName, GamePackageConfiguration configOverride) { mConfigOverrides.put(packageName, configOverride); } @@ -141,7 +141,7 @@ public class GameManagerSettings { * Removes the game mode config override of a given package. * This operation must be synced with an external lock. */ - void removeConfigOverride(String packageName) { + void removeConfigOverrideLocked(String packageName) { mConfigOverrides.remove(packageName); } diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java index ecffd382f542..3f9144f0d980 100644 --- a/services/core/java/com/android/server/policy/AppOpsPolicy.java +++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java @@ -136,7 +136,8 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat final LocationManagerInternal locationManagerInternal = LocalServices.getService( LocationManagerInternal.class); - locationManagerInternal.setLocationPackageTagsListener( + if (locationManagerInternal != null) { + locationManagerInternal.setLocationPackageTagsListener( (uid, packageTagsList) -> { synchronized (mLock) { if (packageTagsList.isEmpty()) { @@ -158,6 +159,7 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat mLocationTags); } }); + } final IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 673d82d4d35f..fcb603628240 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3254,7 +3254,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // just kill it. And if it is a window of foreground activity, the activity can be // restarted automatically if needed. Slog.w(TAG, "Exception thrown during dispatchAppVisibility " + this, e); - if (android.os.Process.getUidForPid(mSession.mPid) == mSession.mUid) { + if (android.os.Process.getUidForPid(mSession.mPid) == mSession.mUid + && android.os.Process.getThreadGroupLeader(mSession.mPid) == mSession.mPid) { android.os.Process.killProcess(mSession.mPid); } } diff --git a/services/tests/servicestests/src/com/android/server/app/GameManagerServiceSettingsTests.java b/services/tests/servicestests/src/com/android/server/app/GameManagerServiceSettingsTests.java index fde3422b1ff3..17f5ebb3b02a 100644 --- a/services/tests/servicestests/src/com/android/server/app/GameManagerServiceSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/app/GameManagerServiceSettingsTests.java @@ -130,9 +130,9 @@ public class GameManagerServiceSettingsTests { assertEquals(GameManager.GAME_MODE_STANDARD, settings.getGameModeLocked(PACKAGE_NAME_4)); // test game mode configs - assertNull(settings.getConfigOverride(PACKAGE_NAME_1)); - assertNull(settings.getConfigOverride(PACKAGE_NAME_3)); - GamePackageConfiguration config = settings.getConfigOverride(PACKAGE_NAME_2); + assertNull(settings.getConfigOverrideLocked(PACKAGE_NAME_1)); + assertNull(settings.getConfigOverrideLocked(PACKAGE_NAME_3)); + GamePackageConfiguration config = settings.getConfigOverrideLocked(PACKAGE_NAME_2); assertNotNull(config); assertNull(config.getGameModeConfiguration(GameManager.GAME_MODE_STANDARD)); @@ -152,7 +152,7 @@ public class GameManagerServiceSettingsTests { assertEquals(batteryConfig.getFpsStr(), GameModeConfiguration.DEFAULT_FPS); assertFalse(batteryConfig.getUseAngle()); - config = settings.getConfigOverride(PACKAGE_NAME_4); + config = settings.getConfigOverrideLocked(PACKAGE_NAME_4); assertNotNull(config); GameModeConfiguration customConfig = config.getGameModeConfiguration( GameManager.GAME_MODE_CUSTOM); @@ -177,7 +177,7 @@ public class GameManagerServiceSettingsTests { GameManagerSettings settings = new GameManagerSettings(context.getFilesDir()); assertTrue(settings.readPersistentDataLocked()); - final GamePackageConfiguration config = settings.getConfigOverride(PACKAGE_NAME_1); + final GamePackageConfiguration config = settings.getConfigOverrideLocked(PACKAGE_NAME_1); assertNotNull(config); final GameModeConfiguration batteryConfig = config.getGameModeConfiguration( GameManager.GAME_MODE_BATTERY); @@ -218,7 +218,7 @@ public class GameManagerServiceSettingsTests { assertEquals(2, settings.getGameModeLocked(PACKAGE_NAME_2)); assertEquals(3, settings.getGameModeLocked(PACKAGE_NAME_3)); - final GamePackageConfiguration config = settings.getConfigOverride(PACKAGE_NAME_2); + final GamePackageConfiguration config = settings.getConfigOverrideLocked(PACKAGE_NAME_2); assertNotNull(config); final GameModeConfiguration batteryConfig = config.getGameModeConfiguration( GameManager.GAME_MODE_BATTERY); @@ -248,7 +248,7 @@ public class GameManagerServiceSettingsTests { GameModeConfiguration batteryConfig = config.getOrAddDefaultGameModeConfiguration( GameManager.GAME_MODE_BATTERY); batteryConfig.setScaling(0.77f); - settings.setConfigOverride(PACKAGE_NAME_2, config); + settings.setConfigOverrideLocked(PACKAGE_NAME_2, config); // set config for app4 config = new GamePackageConfiguration(PACKAGE_NAME_4); @@ -256,15 +256,15 @@ public class GameManagerServiceSettingsTests { GameManager.GAME_MODE_CUSTOM); customConfig.setScaling(0.4f); customConfig.setFpsStr("30"); - settings.setConfigOverride(PACKAGE_NAME_4, config); + settings.setConfigOverrideLocked(PACKAGE_NAME_4, config); settings.writePersistentDataLocked(); // clear the settings in memory - settings.removeGame(PACKAGE_NAME_1); - settings.removeGame(PACKAGE_NAME_2); - settings.removeGame(PACKAGE_NAME_3); - settings.removeGame(PACKAGE_NAME_4); + settings.removeGameLocked(PACKAGE_NAME_1); + settings.removeGameLocked(PACKAGE_NAME_2); + settings.removeGameLocked(PACKAGE_NAME_3); + settings.removeGameLocked(PACKAGE_NAME_4); // read back in and verify assertTrue(settings.readPersistentDataLocked()); @@ -273,9 +273,9 @@ public class GameManagerServiceSettingsTests { assertEquals(1, settings.getGameModeLocked(PACKAGE_NAME_3)); assertEquals(1, settings.getGameModeLocked(PACKAGE_NAME_4)); - config = settings.getConfigOverride(PACKAGE_NAME_1); + config = settings.getConfigOverrideLocked(PACKAGE_NAME_1); assertNull(config); - config = settings.getConfigOverride(PACKAGE_NAME_2); + config = settings.getConfigOverrideLocked(PACKAGE_NAME_2); assertNotNull(config); batteryConfig = config.getGameModeConfiguration(GameManager.GAME_MODE_BATTERY); assertNotNull(batteryConfig); @@ -292,7 +292,7 @@ public class GameManagerServiceSettingsTests { assertEquals(performanceConfig.getFpsStr(), "60"); assertTrue(performanceConfig.getUseAngle()); - config = settings.getConfigOverride(PACKAGE_NAME_4); + config = settings.getConfigOverrideLocked(PACKAGE_NAME_4); assertNotNull(config); customConfig = config.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM); assertNotNull(customConfig); |