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

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java

Issue 2351793003: Implement timing metrics for UrlRequest (Closed)
Patch Set: add more testing, and other comments 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/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
index b96cf5d7d46b19a9c2899fa4570792cb7ef0db09..3fc4edf6cf67c31b31c1cb768ea13f704e76d769 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java
@@ -84,8 +84,8 @@ public class RequestFinishedInfoTest extends CronetTestBase {
}
}
- private static class TestRequestFinishedListener extends RequestFinishedInfo.Listener {
- private RequestFinishedInfo mRequestInfo;
+ static class TestRequestFinishedListener extends RequestFinishedInfo.Listener {
xunjieli 2016/09/20 21:53:33 Instead of making these classes packet protected,
mgersh 2016/09/30 23:47:14 Done.
+ RequestFinishedInfo mRequestInfo;
public TestRequestFinishedListener(Executor executor) {
super(executor);
@@ -97,9 +97,67 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertNotNull(requestInfo);
mRequestInfo = requestInfo;
}
+
+ public void reset() {
+ mRequestInfo = null;
+ }
+ }
+
+ /**
+ * Check existence of all the timing metrics that apply to most test requests,
+ * except those that come from net::LoadTimingInfo::ConnectTiming.
+ * Also check some timing differences, focusing on things we can't check with asserts in the
+ * CronetMetrics constructor.
+ * Don't check push times here.
+ */
+ static void checkTimingMetrics(
+ RequestFinishedInfo.Metrics metrics, Date startTime, Date endTime) {
+ assertNotNull(metrics.getRequestStart());
+ assertTrue(metrics.getRequestStart().after(startTime));
+ assertNotNull(metrics.getSendingStart());
+ assertTrue(metrics.getSendingStart().after(startTime));
+ assertNotNull(metrics.getSendingEnd());
+ assertTrue(metrics.getSendingEnd().before(endTime));
+ assertNotNull(metrics.getResponseStart());
+ assertTrue(metrics.getResponseStart().after(startTime));
+ assertNotNull(metrics.getResponseEnd());
+ assertTrue(metrics.getResponseEnd().before(endTime));
+ // Entire request should take more than 0 ms
+ assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart().getTime() > 0);
+ }
+
+ static void checkHasConnectTiming(
+ RequestFinishedInfo.Metrics metrics, Date startTime, Date endTime, boolean isSsl) {
+ assertNotNull(metrics.getDnsStart());
+ assertTrue(metrics.getDnsStart().after(startTime));
+ assertNotNull(metrics.getDnsEnd());
+ assertTrue(metrics.getDnsEnd().before(endTime));
+ assertNotNull(metrics.getConnectStart());
+ assertTrue(metrics.getConnectStart().after(startTime));
+ assertNotNull(metrics.getConnectEnd());
+ assertTrue(metrics.getConnectEnd().before(endTime));
+ if (isSsl) {
+ assertNotNull(metrics.getSslStart());
+ assertTrue(metrics.getSslStart().after(startTime));
+ assertNotNull(metrics.getSslEnd());
+ assertTrue(metrics.getSslEnd().before(endTime));
+ } else {
+ assertNull(metrics.getSslStart());
+ assertNull(metrics.getSslEnd());
+ }
+ }
+
+ static void checkNoConnectTiming(RequestFinishedInfo.Metrics metrics) {
xunjieli 2016/09/20 21:53:33 It will be great if you can move these to a standa
mgersh 2016/09/30 23:47:14 Done.
+ assertNull(metrics.getDnsStart());
+ assertNull(metrics.getDnsEnd());
+ assertNull(metrics.getSslStart());
+ assertNull(metrics.getSslEnd());
+ assertNull(metrics.getConnectStart());
+ assertNull(metrics.getConnectEnd());
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListener() throws Exception {
@@ -111,11 +169,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
+ Date startTime = new Date();
urlRequestBuilder.addRequestAnnotation("request annotation")
.addRequestAnnotation(this)
.build()
.start();
callback.blockForDone();
+ Date endTime = new Date();
testExecutor.runAllTasks();
RequestFinishedInfo requestInfo = requestFinishedListener.mRequestInfo;
@@ -126,13 +186,21 @@ public class RequestFinishedInfoTest extends CronetTestBase {
new HashSet<Object>(requestInfo.getAnnotations()));
RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
+ // Check old (deprecated) timing metrics
assertTrue(metrics.getTotalTimeMs() > 0);
assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
+ // Check new timing metrics
+ checkTimingMetrics(metrics, startTime, endTime);
+ checkHasConnectTiming(metrics, startTime, endTime, false);
+ assertNull(metrics.getPushStart());
+ assertNull(metrics.getPushEnd());
+ // Check data use metrics
assertTrue(metrics.getReceivedBytesCount() > 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerDirectExecutor() throws Exception {
@@ -144,11 +212,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
+ Date startTime = new Date();
urlRequestBuilder.addRequestAnnotation("request annotation")
.addRequestAnnotation(this)
.build()
.start();
callback.blockForDone();
+ Date endTime = new Date();
RequestFinishedInfo requestInfo = requestFinishedListener.mRequestInfo;
assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo);
@@ -160,11 +230,14 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metrics);
assertTrue(metrics.getTotalTimeMs() > 0);
assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
+ checkTimingMetrics(metrics, startTime, endTime);
+ checkHasConnectTiming(metrics, startTime, endTime, false);
assertTrue(metrics.getReceivedBytesCount() > 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerDifferentThreads() throws Exception {
@@ -177,11 +250,13 @@ public class RequestFinishedInfoTest extends CronetTestBase {
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
+ Date startTime = new Date();
urlRequestBuilder.addRequestAnnotation("request annotation")
.addRequestAnnotation(this)
.build()
.start();
callback.blockForDone();
+ Date endTime = new Date();
testExecutor.joinAll();
RequestFinishedInfo firstRequestInfo = firstListener.mRequestInfo;
@@ -200,16 +275,21 @@ public class RequestFinishedInfoTest extends CronetTestBase {
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", firstMetrics);
assertTrue(firstMetrics.getTotalTimeMs() > 0);
assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs());
+ checkTimingMetrics(firstMetrics, startTime, endTime);
+ checkHasConnectTiming(firstMetrics, startTime, endTime, false);
assertTrue(firstMetrics.getReceivedBytesCount() > 0);
RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics();
assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secondMetrics);
assertTrue(secondMetrics.getTotalTimeMs() > 0);
assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs());
+ checkTimingMetrics(secondMetrics, startTime, endTime);
+ checkHasConnectTiming(secondMetrics, startTime, endTime, false);
assertTrue(secondMetrics.getReceivedBytesCount() > 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerFailedRequest() throws Exception {
@@ -222,8 +302,10 @@ public class RequestFinishedInfoTest extends CronetTestBase {
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connectionRefusedUrl,
callback, callback.getExecutor(), mTestFramework.mCronetEngine);
+ Date startTime = new Date();
urlRequestBuilder.build().start();
callback.blockForDone();
+ Date endTime = new Date();
assertTrue(callback.mOnErrorCalled);
testExecutor.runAllTasks();
@@ -236,11 +318,25 @@ public class RequestFinishedInfoTest extends CronetTestBase {
// The failure is occasionally fast enough that time reported is 0, so just check for null
assertNotNull(metrics.getTotalTimeMs());
assertNull(metrics.getTtfbMs());
+
+ // Check the timing metrics
+ assertNotNull(metrics.getRequestStart());
+ assertTrue(metrics.getRequestStart().after(startTime));
+ checkNoConnectTiming(metrics);
+ assertNull(metrics.getSendingStart());
+ assertNull(metrics.getSendingEnd());
+ assertNull(metrics.getResponseStart());
+ assertNotNull(metrics.getResponseEnd());
+ assertTrue(metrics.getResponseEnd().before(endTime));
+ // Entire request should take more than 0 ms
+ assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart().getTime() > 0);
+
assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceivedBytesCount() == 0);
mTestFramework.mCronetEngine.shutdown();
}
@SmallTest
+ @OnlyRunNativeCronet
@Feature({"Cronet"})
@SuppressWarnings("deprecation")
public void testRequestFinishedListenerRemoved() throws Exception {
@@ -249,11 +345,12 @@ public class RequestFinishedInfoTest extends CronetTestBase {
TestRequestFinishedListener requestFinishedListener =
new TestRequestFinishedListener(testExecutor);
mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedListener);
- mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinishedListener);
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
- urlRequestBuilder.build().start();
+ UrlRequest request = urlRequestBuilder.build();
+ mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinishedListener);
+ request.start();
callback.blockForDone();
testExecutor.runAllTasks();

Powered by Google App Engine
This is Rietveld 408576698