| Index: components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea96bddb2037526fdc9f57ddf9d645a34ccb9db5
|
| --- /dev/null
|
| +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java
|
| @@ -0,0 +1,219 @@
|
| +// Copyright 2016 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.impl;
|
| +
|
| +import android.support.annotation.Nullable;
|
| +
|
| +import org.chromium.base.VisibleForTesting;
|
| +import org.chromium.net.RequestFinishedInfo;
|
| +
|
| +import java.util.Date;
|
| +
|
| +/**
|
| + * Implementation of {@link RequestFinishedInfo.Metrics}.
|
| + */
|
| +@VisibleForTesting
|
| +public final class CronetMetrics extends RequestFinishedInfo.Metrics {
|
| + private final long mRequestStartMs;
|
| + private final long mDnsStartMs;
|
| + private final long mDnsEndMs;
|
| + private final long mConnectStartMs;
|
| + private final long mConnectEndMs;
|
| + private final long mSslStartMs;
|
| + private final long mSslEndMs;
|
| + private final long mSendingStartMs;
|
| + private final long mSendingEndMs;
|
| + private final long mPushStartMs;
|
| + private final long mPushEndMs;
|
| + private final long mResponseStartMs;
|
| + private final long mResponseEndMs;
|
| + private final boolean mSocketReused;
|
| +
|
| + // TODO(mgersh): Delete after the switch to the new API http://crbug.com/629194
|
| + @Nullable
|
| + private final Long mTtfbMs;
|
| + // TODO(mgersh): Delete after the switch to the new API http://crbug.com/629194
|
| + @Nullable
|
| + private final Long mTotalTimeMs;
|
| + @Nullable
|
| + private final Long mSentBytesCount;
|
| + @Nullable
|
| + private final Long mReceivedBytesCount;
|
| +
|
| + @Nullable
|
| + private static Date toDate(long timestamp) {
|
| + if (timestamp != -1) {
|
| + return new Date(timestamp);
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + private static boolean checkOrder(long start, long end) {
|
| + // If end doesn't exist, start can be anything, including also not existing
|
| + // If end exists, start must also exist and be before end
|
| + return (end >= start && start != -1) || end == -1;
|
| + }
|
| +
|
| + /**
|
| + * Old-style constructor
|
| + * TODO(mgersh): Delete after the switch to the new API http://crbug.com/629194
|
| + */
|
| + public CronetMetrics(@Nullable Long ttfbMs, @Nullable Long totalTimeMs,
|
| + @Nullable Long sentBytesCount, @Nullable Long receivedBytesCount) {
|
| + mTtfbMs = ttfbMs;
|
| + mTotalTimeMs = totalTimeMs;
|
| + mSentBytesCount = sentBytesCount;
|
| + mReceivedBytesCount = receivedBytesCount;
|
| +
|
| + // Everything else is -1 (translates to null) for now
|
| + mRequestStartMs = -1;
|
| + mDnsStartMs = -1;
|
| + mDnsEndMs = -1;
|
| + mConnectStartMs = -1;
|
| + mConnectEndMs = -1;
|
| + mSslStartMs = -1;
|
| + mSslEndMs = -1;
|
| + mSendingStartMs = -1;
|
| + mSendingEndMs = -1;
|
| + mPushStartMs = -1;
|
| + mPushEndMs = -1;
|
| + mResponseStartMs = -1;
|
| + mResponseEndMs = -1;
|
| + mSocketReused = false;
|
| + }
|
| +
|
| + /**
|
| + * New-style constructor
|
| + */
|
| + public CronetMetrics(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) {
|
| + // Check that no end times are before corresponding start times,
|
| + // or exist when start time doesn't.
|
| + assert checkOrder(dnsStartMs, dnsEndMs);
|
| + assert checkOrder(connectStartMs, connectEndMs);
|
| + assert checkOrder(sslStartMs, sslEndMs);
|
| + assert checkOrder(sendingStartMs, sendingEndMs);
|
| + assert checkOrder(pushStartMs, pushEndMs);
|
| + assert checkOrder(responseStartMs, responseEndMs);
|
| + // Spot-check some of the other orderings
|
| + assert dnsStartMs >= requestStartMs || dnsStartMs == -1;
|
| + assert sendingStartMs >= requestStartMs || sendingStartMs == -1;
|
| + assert sslStartMs >= connectStartMs || sslStartMs == -1;
|
| + assert responseStartMs >= sendingStartMs || responseStartMs == -1;
|
| + mRequestStartMs = requestStartMs;
|
| + mDnsStartMs = dnsStartMs;
|
| + mDnsEndMs = dnsEndMs;
|
| + mConnectStartMs = connectStartMs;
|
| + mConnectEndMs = connectEndMs;
|
| + mSslStartMs = sslStartMs;
|
| + mSslEndMs = sslEndMs;
|
| + mSendingStartMs = sendingStartMs;
|
| + mSendingEndMs = sendingEndMs;
|
| + mPushStartMs = pushStartMs;
|
| + mPushEndMs = pushEndMs;
|
| + mResponseStartMs = responseStartMs;
|
| + mResponseEndMs = responseEndMs;
|
| + mSocketReused = socketReused;
|
| + mSentBytesCount = sentBytesCount;
|
| + mReceivedBytesCount = receivedBytesCount;
|
| +
|
| + // Don't care about these anymore
|
| + mTtfbMs = null;
|
| + mTotalTimeMs = null;
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getRequestStart() {
|
| + return toDate(mRequestStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getDnsStart() {
|
| + return toDate(mDnsStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getDnsEnd() {
|
| + return toDate(mDnsEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getConnectStart() {
|
| + return toDate(mConnectStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getConnectEnd() {
|
| + return toDate(mConnectEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getSslStart() {
|
| + return toDate(mSslStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getSslEnd() {
|
| + return toDate(mSslEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getSendingStart() {
|
| + return toDate(mSendingStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getSendingEnd() {
|
| + return toDate(mSendingEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getPushStart() {
|
| + return toDate(mPushStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getPushEnd() {
|
| + return toDate(mPushEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getResponseStart() {
|
| + return toDate(mResponseStartMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public Date getResponseEnd() {
|
| + return toDate(mResponseEndMs);
|
| + }
|
| +
|
| + @Nullable
|
| + public boolean getSocketReused() {
|
| + return mSocketReused;
|
| + }
|
| +
|
| + @Nullable
|
| + public Long getTtfbMs() {
|
| + return mTtfbMs;
|
| + }
|
| +
|
| + @Nullable
|
| + public Long getTotalTimeMs() {
|
| + return mTotalTimeMs;
|
| + }
|
| +
|
| + @Nullable
|
| + public Long getSentBytesCount() {
|
| + return mSentBytesCount;
|
| + }
|
| +
|
| + @Nullable
|
| + public Long getReceivedBytesCount() {
|
| + return mReceivedBytesCount;
|
| + }
|
| +}
|
|
|