core,grpclb: Resolve isAndroid only once on class loading (#10345)

Motivation:

When multiple NameResolvers are created, the Classloader is scanned every time trying to figure out if the Platform is Android. This expensive work could be done only once.

Modification:

Cache isAndroid resolution in a constant.

Result:

Less expensive multiple NameResolvers instantiation.
This commit is contained in:
Stephane Landelle 2023-07-06 22:42:43 +02:00 committed by GitHub
parent 0b53dd7304
commit 1e30cb6601
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

View File

@ -46,6 +46,9 @@ public final class DnsNameResolverProvider extends NameResolverProvider {
private static final String SCHEME = "dns";
private static final boolean IS_ANDROID = InternalServiceProviders
.isAndroid(DnsNameResolverProvider.class.getClassLoader());
@Override
public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
if (SCHEME.equals(targetUri.getScheme())) {
@ -60,7 +63,7 @@ public final class DnsNameResolverProvider extends NameResolverProvider {
args,
GrpcUtil.SHARED_CHANNEL_EXECUTOR,
Stopwatch.createUnstarted(),
InternalServiceProviders.isAndroid(getClass().getClassLoader())),
IS_ANDROID),
new BackoffPolicyRetryScheduler(
new ExponentialBackoffPolicy.Provider(),
args.getScheduledExecutorService(),

View File

@ -53,6 +53,9 @@ final class SecretGrpclbNameResolverProvider {
private static final String SCHEME = "dns";
private static final boolean IS_ANDROID = InternalServiceProviders
.isAndroid(SecretGrpclbNameResolverProvider.class.getClassLoader());
@Override
public GrpclbNameResolver newNameResolver(URI targetUri, Args args) {
if (SCHEME.equals(targetUri.getScheme())) {
@ -68,7 +71,7 @@ final class SecretGrpclbNameResolverProvider {
args,
GrpcUtil.SHARED_CHANNEL_EXECUTOR,
Stopwatch.createUnstarted(),
InternalServiceProviders.isAndroid(getClass().getClassLoader()));
IS_ANDROID);
} else {
return null;
}