Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(838)

Unified Diff: components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java

Issue 2283243002: Allow direct executors in cronet. (Closed)
Patch Set: Improve thread checking Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
index e1035c47f58a0088b4efac593beb52c0edc9b51a..783267ea4c2cc2ca5a3b2091fd0e3aade1f9dd39 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
@@ -61,7 +61,15 @@ public class CronetUrlRequestContext extends CronetEngine {
private final ConditionVariable mInitCompleted = new ConditionVariable(false);
private final AtomicInteger mActiveRequestCount = new AtomicInteger(0);
+ @GuardedBy("mLock")
private long mUrlRequestContextAdapter = 0;
+ /**
+ * This field is accessed without synchronization, but only for the purposes of reference
+ * equality comparison with other threads. If such a comparison is performed on the network
+ * thread, then there is a happens-before edge between the write of this field and the
+ * subsequent read; if it's performed on another thread, then observing a value of null won't
+ * change the result of the comparison.
+ */
private Thread mNetworkThread;
private boolean mNetworkQualityEstimatorEnabled;
@@ -182,7 +190,7 @@ public class CronetUrlRequestContext extends CronetEngine {
@Override
public UrlRequest createRequest(String url, UrlRequest.Callback callback, Executor executor,
int priority, Collection<Object> requestAnnotations, boolean disableCache,
- boolean disableConnectionMigration) {
+ boolean disableConnectionMigration, boolean allowDirectExecutor) {
synchronized (mLock) {
checkHaveAdapter();
boolean metricsCollectionEnabled = false;
@@ -190,7 +198,8 @@ public class CronetUrlRequestContext extends CronetEngine {
metricsCollectionEnabled = !mFinishedListenerList.isEmpty();
}
return new CronetUrlRequest(this, url, priority, callback, executor, requestAnnotations,
- metricsCollectionEnabled, disableCache, disableConnectionMigration);
+ metricsCollectionEnabled, disableCache, disableConnectionMigration,
+ allowDirectExecutor);
}
}
@@ -320,7 +329,9 @@ public class CronetUrlRequestContext extends CronetEngine {
throw new IllegalStateException("Network quality estimator must be enabled");
}
synchronized (mNetworkQualityLock) {
- checkHaveAdapter();
+ synchronized (mLock) {
+ checkHaveAdapter();
+ }
return mEffectiveConnectionType;
}
}
@@ -463,12 +474,14 @@ public class CronetUrlRequestContext extends CronetEngine {
}
}
+ @GuardedBy("mLock")
private void checkHaveAdapter() throws IllegalStateException {
if (!haveRequestContextAdapter()) {
throw new IllegalStateException("Engine is shut down.");
}
}
+ @GuardedBy("mLock")
private boolean haveRequestContextAdapter() {
return mUrlRequestContextAdapter != 0;
}
@@ -492,10 +505,8 @@ public class CronetUrlRequestContext extends CronetEngine {
@SuppressWarnings("unused")
@CalledByNative
private void initNetworkThread() {
- synchronized (mLock) {
- mNetworkThread = Thread.currentThread();
- mInitCompleted.open();
- }
+ mNetworkThread = Thread.currentThread();
+ mInitCompleted.open();
Thread.currentThread().setName("ChromiumNet");
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
}
@@ -626,4 +637,8 @@ public class CronetUrlRequestContext extends CronetEngine {
@NativeClassQualifiedName("CronetURLRequestContextAdapter")
private native void nativeProvideThroughputObservations(long nativePtr, boolean should);
+
+ public boolean isNetworkThread(Thread thread) {
+ return thread == mNetworkThread;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698