Merge "Reduce Integer allocations in ThreadLocalWorkSource"

This commit is contained in:
Orion Hodson
2022-12-20 21:47:04 +00:00
committed by Gerrit Code Review

View File

@@ -39,8 +39,8 @@ package android.os;
*/ */
public final class ThreadLocalWorkSource { public final class ThreadLocalWorkSource {
public static final int UID_NONE = Message.UID_NONE; public static final int UID_NONE = Message.UID_NONE;
private static final ThreadLocal<Integer> sWorkSourceUid = private static final ThreadLocal<int []> sWorkSourceUid =
ThreadLocal.withInitial(() -> UID_NONE); ThreadLocal.withInitial(() -> new int[] {UID_NONE});
/** /**
* Returns the UID to blame for the code currently executed on this thread. * Returns the UID to blame for the code currently executed on this thread.
@@ -50,7 +50,7 @@ public final class ThreadLocalWorkSource {
* <p>It can also be set manually using {@link #setUid(int)}. * <p>It can also be set manually using {@link #setUid(int)}.
*/ */
public static int getUid() { public static int getUid() {
return sWorkSourceUid.get(); return sWorkSourceUid.get()[0];
} }
/** /**
@@ -65,7 +65,7 @@ public final class ThreadLocalWorkSource {
*/ */
public static long setUid(int uid) { public static long setUid(int uid) {
final long token = getToken(); final long token = getToken();
sWorkSourceUid.set(uid); sWorkSourceUid.get()[0] = uid;
return token; return token;
} }
@@ -73,7 +73,7 @@ public final class ThreadLocalWorkSource {
* Restores the state using the provided token. * Restores the state using the provided token.
*/ */
public static void restore(long token) { public static void restore(long token) {
sWorkSourceUid.set(parseUidFromToken(token)); sWorkSourceUid.get()[0] = parseUidFromToken(token);
} }
/** /**
@@ -88,7 +88,7 @@ public final class ThreadLocalWorkSource {
* </pre> * </pre>
* *
* @return a token that can be used to restore the state. * @return a token that can be used to restore the state.
**/ */
public static long clear() { public static long clear() {
return setUid(UID_NONE); return setUid(UID_NONE);
} }
@@ -98,7 +98,7 @@ public final class ThreadLocalWorkSource {
} }
private static long getToken() { private static long getToken() {
return sWorkSourceUid.get(); return sWorkSourceUid.get()[0];
} }
private ThreadLocalWorkSource() { private ThreadLocalWorkSource() {