Index: components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java |
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java |
index 52afc3744099eafb412170514194f809a0133ce1..31a7d04c01339683d618200550342e8319a23aab 100644 |
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java |
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java |
@@ -65,6 +65,8 @@ public final class CronetUrlRequest implements UrlRequest { |
@GuardedBy("mUrlRequestAdapterLock") |
@Nullable |
private final UrlRequestMetricsAccumulator mRequestMetricsAccumulator; |
+ @GuardedBy("mUrlRequestAdapterLock") |
+ private RequestFinishedInfo.Metrics mMetrics; |
/* |
* Synchronize access to mUrlRequestAdapter, mStarted, mWaitingOnRedirect, |
@@ -201,7 +203,8 @@ public final class CronetUrlRequest implements UrlRequest { |
try { |
mUrlRequestAdapter = |
nativeCreateRequestAdapter(mRequestContext.getUrlRequestContextAdapter(), |
- mInitialUrl, mPriority, mDisableCache, mDisableConnectionMigration); |
+ mInitialUrl, mPriority, mDisableCache, mDisableConnectionMigration, |
+ mRequestContext.hasRequestFinishedListener()); |
xunjieli
2016/09/20 21:53:33
Can we just use the metricsCollectionEnabled field
mgersh
2016/09/30 23:47:14
I was actually planning on deleting that field, so
xunjieli
2016/10/01 13:43:49
Why do you plan to delete that field? We don't win
mgersh
2016/10/04 21:14:58
Mostly because I prefer not having that informatio
xunjieli
2016/10/04 22:29:23
Acknowledged.
|
mRequestContext.onRequestStarted(); |
if (mInitialMethod != null) { |
if (!nativeSetHttpMethod(mUrlRequestAdapter, mInitialMethod)) { |
@@ -699,11 +702,30 @@ public final class CronetUrlRequest implements UrlRequest { |
postTaskToExecutor(task); |
} |
+ /** |
+ * Called by the native code to report metrics. |
+ */ |
+ @SuppressWarnings("unused") |
+ @CalledByNative |
+ private void onMetricsCollected(long requestStartMs, long dnsStartMs, long dnsEndMs, |
+ long connectStartMs, long connectEndMs, long sslStartMs, long sslEndMs, |
+ long sendingStartMs, long sendingEndMs, long pushStartMs, long pushEndMs, |
+ long responseStartMs, long responseEndMs, boolean socketReused, long sentBytesCount, |
+ long receivedBytesCount) { |
+ synchronized (mUrlRequestAdapterLock) { |
+ if (mMetrics != null) { |
+ throw new IllegalStateException("Metrics collection should only happen once."); |
+ } |
+ mMetrics = new CronetMetrics(requestStartMs, dnsStartMs, dnsEndMs, connectStartMs, |
+ connectEndMs, sslStartMs, sslEndMs, sendingStartMs, sendingEndMs, pushStartMs, |
+ pushEndMs, responseStartMs, responseEndMs, socketReused, sentBytesCount, |
+ receivedBytesCount); |
+ } |
+ } |
+ |
RequestFinishedInfo getRequestFinishedInfo() { |
// TODO(mgersh): fill in real values for finishedReason and exception |
- return new RequestFinishedInfo(mInitialUrl, mRequestAnnotations, |
- (mRequestMetricsAccumulator != null ? mRequestMetricsAccumulator.getRequestMetrics() |
- : EMPTY_METRICS), |
+ return new RequestFinishedInfo(mInitialUrl, mRequestAnnotations, mMetrics, |
RequestFinishedInfo.SUCCEEDED, mResponseInfo, null); |
} |
@@ -751,7 +773,8 @@ public final class CronetUrlRequest implements UrlRequest { |
// Native methods are implemented in cronet_url_request_adapter.cc. |
private native long nativeCreateRequestAdapter(long urlRequestContextAdapter, String url, |
- int priority, boolean disableCache, boolean disableConnectionMigration); |
+ int priority, boolean disableCache, boolean disableConnectionMigration, |
+ boolean enableMetrics); |
@NativeClassQualifiedName("CronetURLRequestAdapter") |
private native boolean nativeSetHttpMethod(long nativePtr, String method); |