@@ -48,6 +48,7 @@ public final class BinderClientTransportFactory implements ClientTransportFactor
4848 final BinderChannelCredentials channelCredentials ;
4949 final Executor mainThreadExecutor ;
5050 final ObjectPool <ScheduledExecutorService > scheduledExecutorPool ;
51+ final ObjectPool <? extends Executor > transportExecutorPool ;
5152 final ObjectPool <? extends Executor > offloadExecutorPool ;
5253 final SecurityPolicy securityPolicy ;
5354 @ Nullable final UserHandle defaultTargetUserHandle ;
@@ -58,6 +59,7 @@ public final class BinderClientTransportFactory implements ClientTransportFactor
5859
5960 ScheduledExecutorService executorService ;
6061 Executor offloadExecutor ;
62+ Executor transportExecutor ;
6163 private boolean closed ;
6264
6365 private BinderClientTransportFactory (Builder builder ) {
@@ -69,6 +71,8 @@ private BinderClientTransportFactory(Builder builder) {
6971 : ContextCompat .getMainExecutor (sourceContext );
7072 scheduledExecutorPool = checkNotNull (builder .scheduledExecutorPool );
7173 offloadExecutorPool = checkNotNull (builder .offloadExecutorPool );
74+ transportExecutorPool = builder .transportExecutorPool != null ?
75+ builder .transportExecutorPool : builder .offloadExecutorPool ;
7276 securityPolicy = checkNotNull (builder .securityPolicy );
7377 defaultTargetUserHandle = builder .defaultTargetUserHandle ;
7478 bindServiceFlags = checkNotNull (builder .bindServiceFlags );
@@ -78,6 +82,7 @@ private BinderClientTransportFactory(Builder builder) {
7882
7983 executorService = scheduledExecutorPool .getObject ();
8084 offloadExecutor = offloadExecutorPool .getObject ();
85+ transportExecutor = transportExecutorPool .getObject ();
8186 }
8287
8388 @ Override
@@ -103,6 +108,7 @@ public SwapChannelCredentialsResult swapChannelCredentials(ChannelCredentials ch
103108 public void close () {
104109 closed = true ;
105110 executorService = scheduledExecutorPool .returnObject (executorService );
111+ transportExecutor = transportExecutorPool .returnObject (transportExecutor );
106112 offloadExecutor = offloadExecutorPool .returnObject (offloadExecutor );
107113 }
108114
@@ -120,6 +126,7 @@ public static final class Builder implements ClientTransportFactoryBuilder {
120126 // Optional.
121127 BinderChannelCredentials channelCredentials = BinderChannelCredentials .forDefault ();
122128 Executor mainThreadExecutor ; // Default filled-in at build time once sourceContext is decided.
129+ ObjectPool <? extends Executor > transportExecutorPool ; // Default filled-in at build time.
123130 ObjectPool <ScheduledExecutorService > scheduledExecutorPool =
124131 SharedResourcePool .forResource (GrpcUtil .TIMER_SERVICE );
125132 SecurityPolicy securityPolicy = SecurityPolicies .internalOnly ();
@@ -139,6 +146,11 @@ public Builder setSourceContext(Context sourceContext) {
139146 return this ;
140147 }
141148
149+ public Builder setTransportExecutorPool (ObjectPool <? extends Executor > transportExecutorPool ) {
150+ this .transportExecutorPool = checkNotNull (transportExecutorPool , "transportExecutorPool" );
151+ return this ;
152+ }
153+
142154 public Builder setOffloadExecutorPool (ObjectPool <? extends Executor > offloadExecutorPool ) {
143155 this .offloadExecutorPool = checkNotNull (offloadExecutorPool , "offloadExecutorPool" );
144156 return this ;
0 commit comments