Loading core/java/com/android/internal/annotations/CompositeRWLock.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * 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. */ package com.android.internal.annotations; import static java.lang.annotation.ElementType.FIELD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Specifies a list of locks which are required for read/write operations on a data field. * * <p> * To annotate methods accessing the data field with the annotation {@link CompositeRWLock}, * use {@link GuardedBy#value} to annotate method w/ write and/or read access to the data field, * use {@link GuardedBy#anyOf} to annotate method w/ read only access to the data field. * </p> * * <p> * When its {@link #value()} consists of multiple locks: * <ul> * <li>To write to the protected data, acquire <b>all</b> of the locks * in the order of the appearance in the {@link #value}.</li> * <li>To read from the protected data, acquire any of the locks in the {@link #value}.</li> * </ul> * </p> */ @Target({FIELD}) @Retention(RetentionPolicy.CLASS) public @interface CompositeRWLock { String[] value() default {}; } core/java/com/android/internal/annotations/GuardedBy.java +29 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package com.android.internal.annotations; import java.lang.annotation.ElementType; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Loading @@ -25,8 +27,32 @@ import java.lang.annotation.Target; * Annotation type used to mark a method or field that can only be accessed when * holding the referenced locks. */ @Target({ ElementType.FIELD, ElementType.METHOD }) @Target({FIELD, METHOD}) @Retention(RetentionPolicy.CLASS) public @interface GuardedBy { String[] value(); /** * Specifies a list of locks to be held in order to access the field/method * annotated with this; when used in conjunction with the {@link CompositeRWLock}, locks * should be acquired in the order of the appearance in the {@link #value} here. * * <p> * If specified, {@link #anyOf()} must be null. * </p> * * @see CompositeRWLock */ String[] value() default {}; /** * Specifies a list of locks where at least one of them must be held in order to access * the field/method annotated with this; it should be <em>only</em> used in the conjunction * with the {@link CompositeRWLock}. * * <p> * If specified, {@link #allOf()} must be null. * </p> * * @see CompositeRWLock */ String[] anyOf() default {}; } services/core/Android.bp +3 −3 Original line number Diff line number Diff line Loading @@ -158,9 +158,9 @@ java_genrule { srcs: [":services.core.unboosted"], tools: ["lockedregioncodeinjection"], cmd: "$(location lockedregioncodeinjection) " + " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " + " --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " + " --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " + " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " + " --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " + " --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " + " -o $(out) " + " -i $(in)", out: ["services.core.priorityboosted.jar"], Loading services/core/java/com/android/server/LockGuard.java +4 −4 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import com.android.internal.os.BackgroundThread; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -74,8 +72,9 @@ public class LockGuard { public static final int INDEX_PACKAGES = 3; public static final int INDEX_STORAGE = 4; public static final int INDEX_WINDOW = 5; public static final int INDEX_ACTIVITY = 6; public static final int INDEX_DPMS = 7; public static final int INDEX_PROC = 6; public static final int INDEX_ACTIVITY = 7; public static final int INDEX_DPMS = 8; private static Object[] sKnownFixed = new Object[INDEX_DPMS + 1]; Loading Loading @@ -229,6 +228,7 @@ public class LockGuard { case INDEX_PACKAGES: return "PACKAGES"; case INDEX_STORAGE: return "STORAGE"; case INDEX_WINDOW: return "WINDOW"; case INDEX_PROC: return "PROCESS"; case INDEX_ACTIVITY: return "ACTIVITY"; case INDEX_DPMS: return "DPMS"; default: return Integer.toString(index); Loading services/core/java/com/android/server/am/ActiveServices.java +255 −233 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/com/android/internal/annotations/CompositeRWLock.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * 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. */ package com.android.internal.annotations; import static java.lang.annotation.ElementType.FIELD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Specifies a list of locks which are required for read/write operations on a data field. * * <p> * To annotate methods accessing the data field with the annotation {@link CompositeRWLock}, * use {@link GuardedBy#value} to annotate method w/ write and/or read access to the data field, * use {@link GuardedBy#anyOf} to annotate method w/ read only access to the data field. * </p> * * <p> * When its {@link #value()} consists of multiple locks: * <ul> * <li>To write to the protected data, acquire <b>all</b> of the locks * in the order of the appearance in the {@link #value}.</li> * <li>To read from the protected data, acquire any of the locks in the {@link #value}.</li> * </ul> * </p> */ @Target({FIELD}) @Retention(RetentionPolicy.CLASS) public @interface CompositeRWLock { String[] value() default {}; }
core/java/com/android/internal/annotations/GuardedBy.java +29 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package com.android.internal.annotations; import java.lang.annotation.ElementType; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Loading @@ -25,8 +27,32 @@ import java.lang.annotation.Target; * Annotation type used to mark a method or field that can only be accessed when * holding the referenced locks. */ @Target({ ElementType.FIELD, ElementType.METHOD }) @Target({FIELD, METHOD}) @Retention(RetentionPolicy.CLASS) public @interface GuardedBy { String[] value(); /** * Specifies a list of locks to be held in order to access the field/method * annotated with this; when used in conjunction with the {@link CompositeRWLock}, locks * should be acquired in the order of the appearance in the {@link #value} here. * * <p> * If specified, {@link #anyOf()} must be null. * </p> * * @see CompositeRWLock */ String[] value() default {}; /** * Specifies a list of locks where at least one of them must be held in order to access * the field/method annotated with this; it should be <em>only</em> used in the conjunction * with the {@link CompositeRWLock}. * * <p> * If specified, {@link #allOf()} must be null. * </p> * * @see CompositeRWLock */ String[] anyOf() default {}; }
services/core/Android.bp +3 −3 Original line number Diff line number Diff line Loading @@ -158,9 +158,9 @@ java_genrule { srcs: [":services.core.unboosted"], tools: ["lockedregioncodeinjection"], cmd: "$(location lockedregioncodeinjection) " + " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " + " --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " + " --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " + " --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " + " --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " + " --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " + " -o $(out) " + " -i $(in)", out: ["services.core.priorityboosted.jar"], Loading
services/core/java/com/android/server/LockGuard.java +4 −4 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import com.android.internal.os.BackgroundThread; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -74,8 +72,9 @@ public class LockGuard { public static final int INDEX_PACKAGES = 3; public static final int INDEX_STORAGE = 4; public static final int INDEX_WINDOW = 5; public static final int INDEX_ACTIVITY = 6; public static final int INDEX_DPMS = 7; public static final int INDEX_PROC = 6; public static final int INDEX_ACTIVITY = 7; public static final int INDEX_DPMS = 8; private static Object[] sKnownFixed = new Object[INDEX_DPMS + 1]; Loading Loading @@ -229,6 +228,7 @@ public class LockGuard { case INDEX_PACKAGES: return "PACKAGES"; case INDEX_STORAGE: return "STORAGE"; case INDEX_WINDOW: return "WINDOW"; case INDEX_PROC: return "PROCESS"; case INDEX_ACTIVITY: return "ACTIVITY"; case INDEX_DPMS: return "DPMS"; default: return Integer.toString(index); Loading
services/core/java/com/android/server/am/ActiveServices.java +255 −233 File changed.Preview size limit exceeded, changes collapsed. Show changes