Merge "Consolidate handler thread check functions in HandlerUtils" into main

This commit is contained in:
Treehugger Robot 2024-10-17 02:25:57 +00:00 • committed by Gerrit Code Review
commit b0e3eaf70b
10 changed files with 62 additions and 24 deletions

View file

@ -35,7 +35,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.net.module.util.DnsUtils;
import com.android.net.module.util.HandlerUtils;
import com.android.net.module.util.SharedLog;
import com.android.server.connectivity.mdns.util.MdnsUtils;
import java.io.IOException;
import java.io.PrintWriter;
@ -211,7 +210,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
void ensureRunningOnHandlerThread() {
synchronized (pendingTasks) {
MdnsUtils.ensureRunningOnHandlerThread(handler);
HandlerUtils.ensureRunningOnHandlerThread(handler);
}
}

View file

@ -16,7 +16,7 @@
package com.android.server.connectivity.mdns;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import android.annotation.NonNull;
import android.annotation.Nullable;

View file

@ -16,9 +16,9 @@
package com.android.server.connectivity.mdns;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import static com.android.server.connectivity.mdns.MdnsConstants.IPV4_SOCKET_ADDR;
import static com.android.server.connectivity.mdns.MdnsConstants.IPV6_SOCKET_ADDR;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import android.annotation.NonNull;
import android.annotation.RequiresApi;

View file

@ -18,8 +18,8 @@ package com.android.server.connectivity.mdns;
import static com.android.net.module.util.DnsUtils.equalsIgnoreDnsCase;
import static com.android.net.module.util.DnsUtils.toDnsUpperCase;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import static com.android.server.connectivity.mdns.MdnsResponse.EXPIRATION_NEVER;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import static java.lang.Math.min;

View file

@ -16,12 +16,12 @@
package com.android.server.connectivity.mdns;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import static com.android.server.connectivity.mdns.MdnsSearchOptions.AGGRESSIVE_QUERY_MODE;
import static com.android.server.connectivity.mdns.MdnsServiceCache.ServiceExpiredCallback;
import static com.android.server.connectivity.mdns.MdnsServiceCache.findMatchedResponse;
import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock;
import static com.android.server.connectivity.mdns.util.MdnsUtils.buildMdnsServiceInfoFromResponse;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import android.annotation.NonNull;
import android.annotation.Nullable;

View file

@ -19,7 +19,8 @@ package com.android.server.connectivity.mdns;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import static com.android.server.connectivity.mdns.util.MdnsUtils.isNetworkMatched;
import android.annotation.NonNull;

View file

@ -16,7 +16,7 @@
package com.android.server.connectivity.mdns;
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread;
import android.annotation.NonNull;
import android.os.Handler;

View file

@ -24,7 +24,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.Network;
import android.os.Build;
import android.os.Handler;
import android.os.SystemClock;
import android.util.ArraySet;
import android.util.Pair;
@ -88,21 +87,6 @@ public class MdnsUtils {
}
}
/*** Ensure that current running thread is same as given handler thread */
public static void ensureRunningOnHandlerThread(@NonNull Handler handler) {
if (!isRunningOnHandlerThread(handler)) {
throw new IllegalStateException(
"Not running on Handler thread: " + Thread.currentThread().getName());
}
}
/*** Check that current running thread is same as given handler thread */
public static boolean isRunningOnHandlerThread(@NonNull Handler handler) {
if (handler.getLooper().getThread() == Thread.currentThread()) {
return true;
}
return false;
}
/*** Check whether the target network matches the current network */
public static boolean isNetworkMatched(@Nullable Network targetNetwork,

View file

@ -102,4 +102,37 @@ public class HandlerUtils {
if (e != null) throw e;
return true;
}
/**
* Ensures that the current running thread is the same as the thread associated with the given
* handler.
*
* @param handler The handler whose thread to compare.
* @throws IllegalStateException if the thread associated with the given handler is not the same
* as the current running thread.
* @hide
*/
public static void ensureRunningOnHandlerThread(@NonNull Handler handler) {
if (!isRunningOnHandlerThread(handler)) {
throw new IllegalStateException(
"Not running on Handler thread: " + Thread.currentThread().getName());
}
}
/**
* Checks if the current running thread is the same as the thread associated with the given
* handler.
*
* @param handler The handler whose thread to compare.
* @return {@code true} if the thread associated with the given handler is the same as the
* current running thread, {@code false} otherwise.
*
* @hide
*/
public static boolean isRunningOnHandlerThread(@NonNull Handler handler) {
if (handler.getLooper().getThread() == Thread.currentThread()) {
return true;
}
return false;
}
}

View file

@ -19,11 +19,14 @@ package com.android.net.module.util
import android.os.HandlerThread
import com.android.testutils.DevSdkIgnoreRunner
import com.android.testutils.DevSdkIgnoreRunner.MonitorThreadLeak
import com.android.testutils.waitForIdle
import kotlin.test.assertEquals
import kotlin.test.assertTrue
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
const val THREAD_BLOCK_TIMEOUT_MS = 1000L
const val TEST_REPEAT_COUNT = 100
@ -52,6 +55,24 @@ class HandlerUtilsTest {
}
}
@Test
fun testIsRunningOnHandlerThread() {
assertFalse(HandlerUtils.isRunningOnHandlerThread(handler))
handler.post{
assertTrue(HandlerUtils.isRunningOnHandlerThread(handler))
}
handler.waitForIdle(THREAD_BLOCK_TIMEOUT_MS)
}
@Test
fun testEnsureRunningOnHandlerThread() {
assertFailsWith<IllegalStateException>{ HandlerUtils.ensureRunningOnHandlerThread(handler) }
handler.post{
HandlerUtils.ensureRunningOnHandlerThread(handler)
}
handler.waitForIdle(THREAD_BLOCK_TIMEOUT_MS)
}
@After
fun tearDown() {
handlerThread.quitSafely()