Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d84f539 authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Add an additional lock in the ActivityManagerService" into sc-dev

parents bb85ae96 cfeb2866
Loading
Loading
Loading
Loading
+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 {};
}
+29 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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 {};
}
+3 −3
Original line number Diff line number Diff line
@@ -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"],
+4 −4
Original line number Diff line number Diff line
@@ -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;

@@ -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];

@@ -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);
+255 −233

File changed.

Preview size limit exceeded, changes collapsed.

Loading