Chromium Code Reviews| Index: components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
| diff --git a/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java b/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4fbe1c9cb03d0fd048e1a1a5063614fa6b8cea5c |
| --- /dev/null |
| +++ b/components/cronet/android/api/src/org/chromium/net/JavaCronetEngine.java |
| @@ -0,0 +1,141 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.net; |
| + |
| +import static android.os.Process.THREAD_PRIORITY_BACKGROUND; |
| +import static android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE; |
| + |
| +import java.io.IOException; |
| +import java.net.Proxy; |
| +import java.net.URL; |
| +import java.net.URLConnection; |
| +import java.net.URLStreamHandler; |
| +import java.net.URLStreamHandlerFactory; |
| +import java.util.List; |
| +import java.util.Map; |
| +import java.util.concurrent.Executor; |
| +import java.util.concurrent.ExecutorService; |
| +import java.util.concurrent.Executors; |
| +import java.util.concurrent.ThreadFactory; |
| + |
| +/** |
| + * {@link java.net.HttpURLConnection} backed CronetEngine. |
| + * |
| + * <p>Does not support netlogs, transferred data measurement, bidistream, cache, or priority. |
| + */ |
| +final class JavaCronetEngine extends CronetEngine { |
| + private final String mUserAgent; |
| + |
| + private final ExecutorService mExecutorService = |
| + Executors.newCachedThreadPool(new ThreadFactory() { |
| + @Override |
| + public Thread newThread(final Runnable r) { |
| + return Executors.defaultThreadFactory().newThread(new Runnable() { |
| + @Override |
| + public void run() { |
| + Thread.currentThread().setName("JavaCronetEngine"); |
| + // On android, all background threads (and all threads that are part |
| + // of background processes) are put in a cgroup that is allowed to |
| + // consume up to 5% of CPU - these worker threads spend the vast |
| + // majority of their time waiting on I/O, so making them contend with |
| + // background applications for a slice of CPU doesn't make much sense. |
| + // We want to hurry up and get idle. |
| + android.os.Process.setThreadPriority( |
| + THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE); |
| + r.run(); |
| + } |
| + }); |
| + } |
| + }); |
| + |
| + JavaCronetEngine(String userAgent) { |
| + this.mUserAgent = userAgent; |
| + } |
| + |
| + @Override |
| + public UrlRequest createRequest(String url, UrlRequest.Callback callback, Executor executor) { |
| + return new JavaUrlRequest(callback, mExecutorService, executor, url, mUserAgent); |
|
pauljensen
2015/12/14 20:02:05
can we make this call createRequest(blah, blah, bl
Charles
2015/12/15 22:32:36
Done.
|
| + } |
| + |
| + @Override |
| + public UrlRequest createRequest( |
| + String url, UrlRequest.Callback callback, Executor executor, int priority) { |
| + return new JavaUrlRequest(callback, mExecutorService, executor, url, mUserAgent); |
| + } |
| + |
| + @Override |
| + BidirectionalStream createBidirectionalStream(String url, BidirectionalStream.Callback callback, |
| + Executor executor, String httpMethod, List<Map.Entry<String, String>> requestHeaders) { |
| + throw new UnsupportedOperationException( |
| + "Can't create a bidi stream - httpurlconnection doesn't have those APIs"); |
| + } |
| + |
| + @Override |
| + boolean isEnabled() { |
| + return true; |
| + } |
| + |
| + @Override |
| + public String getVersionString() { |
| + return "CronetHttpURLConnection/" + Version.getVersion(); |
| + } |
| + |
| + @Override |
| + public void shutdown() { |
| + mExecutorService.shutdown(); |
| + } |
| + |
| + @Override |
| + public void startNetLogToFile(String fileName, boolean logAll) {} |
| + |
| + @Override |
| + public void stopNetLog() {} |
| + |
| + @Override |
| + public byte[] getGlobalMetricsDeltas() { |
| + return new byte[0]; |
| + } |
| + |
| + @Override |
| + public void enableNetworkQualityEstimator(Executor executor) {} |
| + |
| + @Override |
| + void enableNetworkQualityEstimatorForTesting( |
| + boolean useLocalHostRequests, boolean useSmallerResponses, Executor executor) {} |
| + |
| + @Override |
| + public void addRttListener(NetworkQualityRttListener listener) {} |
| + |
| + @Override |
| + public void removeRttListener(NetworkQualityRttListener listener) {} |
| + |
| + @Override |
| + public void addThroughputListener(NetworkQualityThroughputListener listener) {} |
| + |
| + @Override |
| + public void removeThroughputListener(NetworkQualityThroughputListener listener) {} |
| + |
| + @Override |
| + public URLConnection openConnection(URL url) throws IOException { |
| + return url.openConnection(); |
| + } |
| + |
| + @Override |
| + public URLConnection openConnection(URL url, Proxy proxy) throws IOException { |
| + return url.openConnection(proxy); |
| + } |
| + |
| + @Override |
| + public URLStreamHandlerFactory createURLStreamHandlerFactory() { |
| + // Returning null causes this factory to pass though, which ends up using the platform's |
| + // implementation. |
|
pauljensen
2015/12/14 20:02:05
Hmm this isn't documented anywhere that I can find
Charles
2015/12/15 22:32:36
Acknowledged.
|
| + return new URLStreamHandlerFactory() { |
| + @Override |
| + public URLStreamHandler createURLStreamHandler(String protocol) { |
| + return null; |
| + } |
| + }; |
| + } |
| +} |