Skip to content

Commit

Permalink
internal change
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 516708468
  • Loading branch information
sjudd authored and glide-copybara-robot committed Mar 15, 2023
1 parent 295d92d commit eaef0b9
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,18 @@ public final int compareTo(PriorityRunnable another) {
GLIDE_TO_CHROMIUM_PRIORITY.put(Priority.LOW, UrlRequest.Builder.REQUEST_PRIORITY_LOWEST);
}

private final JobPool jobPool = new JobPool();
private final JobPool jobPool;
private final Map<GlideUrl, Job> jobs = new HashMap<>();
private final CronetRequestFactory requestFactory;
@Nullable private final DataLogger dataLogger;

ChromiumRequestSerializer(CronetRequestFactory requestFactory, @Nullable DataLogger dataLogger) {
ChromiumRequestSerializer(
CronetRequestFactory requestFactory,
@Nullable DataLogger dataLogger,
@Nullable GlideExecutor executor) {
this.requestFactory = requestFactory;
this.dataLogger = dataLogger;
this.jobPool = new JobPool(executor);
}

void startRequest(Priority priority, GlideUrl glideUrl, Listener listener) {
Expand Down Expand Up @@ -178,6 +182,11 @@ private class Job extends Callback {
private long responseStartTimeMs;
private volatile boolean isCancelled;
private BufferQueue.Builder builder;
@Nullable private final GlideExecutor executor;

Job(@Nullable GlideExecutor executor) {
this.executor = executor;
}

void init(GlideUrl glideUrl) {
startTime = System.currentTimeMillis();
Expand Down Expand Up @@ -233,8 +242,7 @@ public void onReadCompleted(

@Override
public void onSucceeded(UrlRequest request, final UrlResponseInfo info) {
GLIDE_EXECUTOR_SUPPLIER
.get()
getExecutor()
.execute(
new PriorityRunnable(priority) {
@Override
Expand All @@ -251,8 +259,7 @@ public void run() {
@Override
public void onFailed(
UrlRequest urlRequest, final UrlResponseInfo urlResponseInfo, final CronetException e) {
GLIDE_EXECUTOR_SUPPLIER
.get()
getExecutor()
.execute(
new PriorityRunnable(priority) {
@Override
Expand All @@ -264,8 +271,7 @@ public void run() {

@Override
public void onCanceled(UrlRequest urlRequest, @Nullable final UrlResponseInfo urlResponseInfo) {
GLIDE_EXECUTOR_SUPPLIER
.get()
getExecutor()
.execute(
new PriorityRunnable(priority) {
@Override
Expand Down Expand Up @@ -360,16 +366,29 @@ private void clearListeners() {
isCancelled = false;
}
}

private Executor getExecutor() {
if (this.executor == null) {
return GLIDE_EXECUTOR_SUPPLIER.get();
} else {
return this.executor;
}
}
}

private class JobPool {
private static final int MAX_POOL_SIZE = 50;
private final ArrayDeque<Job> pool = new ArrayDeque<>();
@Nullable private final GlideExecutor executor;

public JobPool(@Nullable GlideExecutor executor) {
this.executor = executor;
}

public synchronized Job get(GlideUrl glideUrl) {
Job job = pool.poll();
if (job == null) {
job = new Job();
job = new Job(this.executor);
}
job.init(glideUrl);
return job;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import androidx.annotation.Nullable;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.load.engine.executor.GlideExecutor;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoaderFactory;
Expand All @@ -29,7 +30,17 @@ public final class ChromiumUrlLoader<T> implements ModelLoader<GlideUrl, T> {
CronetRequestFactory requestFactory,
@Nullable DataLogger dataLogger) {
this.parser = parser;
requestSerializer = new ChromiumRequestSerializer(requestFactory, dataLogger);
requestSerializer =
new ChromiumRequestSerializer(requestFactory, dataLogger, /* executor= */ null);
}

ChromiumUrlLoader(
ByteBufferParser<T> parser,
CronetRequestFactory requestFactory,
@Nullable DataLogger dataLogger,
@Nullable GlideExecutor executor) {
this.parser = parser;
requestSerializer = new ChromiumRequestSerializer(requestFactory, dataLogger, executor);
}

@Override
Expand All @@ -49,15 +60,26 @@ public static final class StreamFactory

private CronetRequestFactory requestFactory;
@Nullable private final DataLogger dataLogger;
@Nullable private final GlideExecutor executor;

public StreamFactory(CronetRequestFactory requestFactory, @Nullable DataLogger dataLogger) {
this.requestFactory = requestFactory;
this.dataLogger = dataLogger;
this.executor = null;
}

public StreamFactory(
CronetRequestFactory requestFactory,
@Nullable DataLogger dataLogger,
@Nullable GlideExecutor executor) {
this.requestFactory = requestFactory;
this.dataLogger = dataLogger;
this.executor = executor;
}

@Override
public ModelLoader<GlideUrl, InputStream> build(MultiModelLoaderFactory multiFactory) {
return new ChromiumUrlLoader<>(this /*parser*/, requestFactory, dataLogger);
return new ChromiumUrlLoader<>(/* parser= */ this, requestFactory, dataLogger, executor);
}

@Override
Expand All @@ -80,15 +102,26 @@ public static final class ByteBufferFactory

private CronetRequestFactory requestFactory;
@Nullable private final DataLogger dataLogger;
@Nullable private final GlideExecutor executor;

public ByteBufferFactory(CronetRequestFactory requestFactory, @Nullable DataLogger dataLogger) {
this.requestFactory = requestFactory;
this.dataLogger = dataLogger;
this.executor = null;
}

public ByteBufferFactory(
CronetRequestFactory requestFactory,
@Nullable DataLogger dataLogger,
@Nullable GlideExecutor executor) {
this.requestFactory = requestFactory;
this.dataLogger = dataLogger;
this.executor = executor;
}

@Override
public ModelLoader<GlideUrl, ByteBuffer> build(MultiModelLoaderFactory multiFactory) {
return new ChromiumUrlLoader<>(this /*parser*/, requestFactory, dataLogger);
return new ChromiumUrlLoader<>(/* parser= */ this, requestFactory, dataLogger, executor);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ public ByteBuffer answer(InvocationOnMock invocation) throws Throwable {
glideUrl = new GlideUrl("http://www.google.com");

urlRequestListenerCaptor = ArgumentCaptor.forClass(UrlRequest.Callback.class);
serializer = new ChromiumRequestSerializer(cronetRequestFactory, null /*dataLogger*/);
serializer =
new ChromiumRequestSerializer(
cronetRequestFactory, /* dataLogger= */ null, /* executor= */ null);
fetcher = new ChromiumUrlFetcher<>(serializer, parser, glideUrl);
builder =
cronetEngine.newUrlRequestBuilder(
Expand Down

0 comments on commit eaef0b9

Please sign in to comment.