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 ce4b574633545e36439c14202768319cf32b3a59..0cf031bc02b7a8ca5af8f2404781ca41c6cf922c 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()); |
mRequestContext.onRequestStarted(); |
if (mInitialMethod != null) { |
if (!nativeSetHttpMethod(mUrlRequestAdapter, mInitialMethod)) { |
@@ -429,7 +432,6 @@ public final class CronetUrlRequest implements UrlRequest { |
mRequestMetricsAccumulator.onRequestFinished(); |
} |
nativeDestroy(mUrlRequestAdapter, sendOnCanceled); |
- mRequestContext.reportFinished(getRequestFinishedInfo()); |
mRequestContext.onRequestDestroyed(); |
mUrlRequestAdapter = 0; |
if (mOnDestroyedCallbackForTesting != null) { |
@@ -699,11 +701,31 @@ 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); |
+ } |
+ mRequestContext.reportFinished(getRequestFinishedInfo()); |
+ } |
+ |
private 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); |