mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-26 02:17:34 +09:00
DevTools - network - implement the secureConnectionStart property for the PerformanceTiming
https://github.com/MoonchildProductions/moebius/pull/116 ("/testing" and "/toolkit" in in the previous commit)
This commit is contained in:
parent
38e95f9e35
commit
54f2e6eafd
32 changed files with 263 additions and 13 deletions
|
|
@ -2277,6 +2277,15 @@ Http2Session::OnTransportStatus(nsITransport* aTransport,
|
|||
case NS_NET_STATUS_TLS_HANDSHAKE_ENDED:
|
||||
{
|
||||
Http2Stream *target = mStreamIDHash.Get(1);
|
||||
if (!target) {
|
||||
// any transaction will do if we can't find the low numbered one
|
||||
// generally this happens when the initial transaction hasn't been
|
||||
// assigned a stream id yet.
|
||||
auto iter = mStreamTransactionHash.Iter();
|
||||
if (!iter.Done()) {
|
||||
target = iter.Data();
|
||||
}
|
||||
}
|
||||
nsAHttpTransaction *transaction = target ? target->Transaction() : nullptr;
|
||||
if (transaction)
|
||||
transaction->OnTransportStatus(aTransport, aStatus, aProgress);
|
||||
|
|
|
|||
|
|
@ -3448,6 +3448,12 @@ HttpBaseChannel::GetConnectStart(TimeStamp* _retval) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpBaseChannel::GetSecureConnectionStart(TimeStamp* _retval) {
|
||||
*_retval = mTransactionTimings.secureConnectionStart;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpBaseChannel::GetConnectEnd(TimeStamp* _retval) {
|
||||
*_retval = mTransactionTimings.connectEnd;
|
||||
|
|
@ -3517,6 +3523,7 @@ IMPL_TIMING_ATTR(AsyncOpen)
|
|||
IMPL_TIMING_ATTR(DomainLookupStart)
|
||||
IMPL_TIMING_ATTR(DomainLookupEnd)
|
||||
IMPL_TIMING_ATTR(ConnectStart)
|
||||
IMPL_TIMING_ATTR(SecureConnectionStart)
|
||||
IMPL_TIMING_ATTR(ConnectEnd)
|
||||
IMPL_TIMING_ATTR(RequestStart)
|
||||
IMPL_TIMING_ATTR(ResponseStart)
|
||||
|
|
|
|||
|
|
@ -893,6 +893,7 @@ HttpChannelChild::OnStopRequest(const nsresult& channelStatus,
|
|||
mTransactionTimings.domainLookupStart = timing.domainLookupStart;
|
||||
mTransactionTimings.domainLookupEnd = timing.domainLookupEnd;
|
||||
mTransactionTimings.connectStart = timing.connectStart;
|
||||
mTransactionTimings.secureConnectionStart = timing.secureConnectionStart;
|
||||
mTransactionTimings.connectEnd = timing.connectEnd;
|
||||
mTransactionTimings.requestStart = timing.requestStart;
|
||||
mTransactionTimings.responseStart = timing.responseStart;
|
||||
|
|
|
|||
|
|
@ -1216,6 +1216,7 @@ HttpChannelParent::OnStopRequest(nsIRequest *aRequest,
|
|||
mChannel->GetDomainLookupStart(&timing.domainLookupStart);
|
||||
mChannel->GetDomainLookupEnd(&timing.domainLookupEnd);
|
||||
mChannel->GetConnectStart(&timing.connectStart);
|
||||
mChannel->GetSecureConnectionStart(&timing.secureConnectionStart);
|
||||
mChannel->GetConnectEnd(&timing.connectEnd);
|
||||
mChannel->GetRequestStart(&timing.requestStart);
|
||||
mChannel->GetResponseStart(&timing.responseStart);
|
||||
|
|
|
|||
|
|
@ -585,6 +585,13 @@ NullHttpChannel::GetConnectStart(mozilla::TimeStamp *aConnectStart)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
NullHttpChannel::GetSecureConnectionStart(mozilla::TimeStamp *aSecureConnectionStart)
|
||||
{
|
||||
*aSecureConnectionStart = mAsyncOpenTime;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
NullHttpChannel::GetConnectEnd(mozilla::TimeStamp *aConnectEnd)
|
||||
{
|
||||
|
|
@ -757,6 +764,7 @@ IMPL_TIMING_ATTR(AsyncOpen)
|
|||
IMPL_TIMING_ATTR(DomainLookupStart)
|
||||
IMPL_TIMING_ATTR(DomainLookupEnd)
|
||||
IMPL_TIMING_ATTR(ConnectStart)
|
||||
IMPL_TIMING_ATTR(SecureConnectionStart)
|
||||
IMPL_TIMING_ATTR(ConnectEnd)
|
||||
IMPL_TIMING_ATTR(RequestStart)
|
||||
IMPL_TIMING_ATTR(ResponseStart)
|
||||
|
|
|
|||
|
|
@ -162,6 +162,30 @@ void
|
|||
NullHttpTransaction::OnTransportStatus(nsITransport* transport,
|
||||
nsresult status, int64_t progress)
|
||||
{
|
||||
if (status == NS_NET_STATUS_RESOLVING_HOST) {
|
||||
if (mTimings.domainLookupStart.IsNull()) {
|
||||
mTimings.domainLookupStart = TimeStamp::Now();
|
||||
}
|
||||
} else if (status == NS_NET_STATUS_RESOLVED_HOST) {
|
||||
if (mTimings.domainLookupEnd.IsNull()) {
|
||||
mTimings.domainLookupEnd = TimeStamp::Now();
|
||||
}
|
||||
} else if (status == NS_NET_STATUS_CONNECTING_TO) {
|
||||
if (mTimings.connectStart.IsNull()) {
|
||||
mTimings.connectStart = TimeStamp::Now();
|
||||
}
|
||||
} else if (status == NS_NET_STATUS_CONNECTED_TO) {
|
||||
if (mTimings.connectEnd.IsNull()) {
|
||||
mTimings.connectEnd = TimeStamp::Now();
|
||||
}
|
||||
} else if (status == NS_NET_STATUS_TLS_HANDSHAKE_ENDED) {
|
||||
if (mTimings.secureConnectionStart.IsNull() &&
|
||||
!mTimings.connectEnd.IsNull()) {
|
||||
mTimings.secureConnectionStart = mTimings.connectEnd;
|
||||
}
|
||||
mTimings.connectEnd = TimeStamp::Now();;
|
||||
}
|
||||
|
||||
if (mActivityDistributor) {
|
||||
NS_DispatchToMainThread(new CallObserveActivity(mActivityDistributor,
|
||||
mConnectionInfo->GetOrigin(),
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include "nsAHttpTransaction.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "TimingStruct.h"
|
||||
|
||||
// This is the minimal nsAHttpTransaction implementation. A NullHttpTransaction
|
||||
// can be used to drive connection level semantics (such as SSL handshakes
|
||||
|
|
@ -49,6 +50,8 @@ public:
|
|||
return PR_SecondsToInterval(15);
|
||||
}
|
||||
|
||||
TimingStruct Timings() { return mTimings; }
|
||||
|
||||
protected:
|
||||
virtual ~NullHttpTransaction();
|
||||
|
||||
|
|
@ -68,6 +71,7 @@ private:
|
|||
Atomic<uint32_t> mCapsToClear;
|
||||
bool mIsDone;
|
||||
bool mClaimed;
|
||||
TimingStruct mTimings;
|
||||
|
||||
protected:
|
||||
RefPtr<nsAHttpConnection> mConnection;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ struct TimingStruct {
|
|||
TimeStamp domainLookupStart;
|
||||
TimeStamp domainLookupEnd;
|
||||
TimeStamp connectStart;
|
||||
TimeStamp secureConnectionStart;
|
||||
TimeStamp connectEnd;
|
||||
TimeStamp requestStart;
|
||||
TimeStamp responseStart;
|
||||
|
|
|
|||
|
|
@ -6429,6 +6429,15 @@ nsHttpChannel::GetConnectStart(TimeStamp* _retval) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHttpChannel::GetSecureConnectionStart(TimeStamp* _retval) {
|
||||
if (mTransaction)
|
||||
*_retval = mTransaction->GetSecureConnectionStart();
|
||||
else
|
||||
*_retval = mTransactionTimings.secureConnectionStart;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHttpChannel::GetConnectEnd(TimeStamp* _retval) {
|
||||
if (mTransaction)
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ public:
|
|||
NS_IMETHOD GetDomainLookupStart(mozilla::TimeStamp *aDomainLookupStart) override;
|
||||
NS_IMETHOD GetDomainLookupEnd(mozilla::TimeStamp *aDomainLookupEnd) override;
|
||||
NS_IMETHOD GetConnectStart(mozilla::TimeStamp *aConnectStart) override;
|
||||
NS_IMETHOD GetSecureConnectionStart(mozilla::TimeStamp *aSecureConnectionStart) override;
|
||||
NS_IMETHOD GetConnectEnd(mozilla::TimeStamp *aConnectEnd) override;
|
||||
NS_IMETHOD GetRequestStart(mozilla::TimeStamp *aRequestStart) override;
|
||||
NS_IMETHOD GetResponseStart(mozilla::TimeStamp *aResponseStart) override;
|
||||
|
|
|
|||
|
|
@ -527,8 +527,15 @@ npnComplete:
|
|||
mNPNComplete = true;
|
||||
|
||||
mTransaction->OnTransportStatus(mSocketTransport,
|
||||
NS_NET_STATUS_TLS_HANDSHAKE_ENDED,
|
||||
0);
|
||||
NS_NET_STATUS_TLS_HANDSHAKE_ENDED, 0);
|
||||
|
||||
// this is happening after the bootstrap was originally written to. so update it.
|
||||
if (mBootstrappedTimings.secureConnectionStart.IsNull() &&
|
||||
!mBootstrappedTimings.connectEnd.IsNull()) {
|
||||
mBootstrappedTimings.secureConnectionStart = mBootstrappedTimings.connectEnd;
|
||||
mBootstrappedTimings.connectEnd = TimeStamp::Now();
|
||||
}
|
||||
|
||||
if (mWaitingFor0RTTResponse) {
|
||||
// Didn't get 0RTT OK, back out of the "attempting 0RTT" state
|
||||
mWaitingFor0RTTResponse = false;
|
||||
|
|
@ -572,8 +579,14 @@ nsHttpConnection::Activate(nsAHttpTransaction *trans, uint32_t caps, int32_t pri
|
|||
LOG(("nsHttpConnection::Activate [this=%p trans=%p caps=%x]\n",
|
||||
this, trans, caps));
|
||||
|
||||
if (!trans->IsNullTransaction())
|
||||
if (!mExperienced && !trans->IsNullTransaction()) {
|
||||
mExperienced = true;
|
||||
nsHttpTransaction *hTrans = trans->QueryHttpTransaction();
|
||||
if (hTrans) {
|
||||
hTrans->BootstrapTimings(mBootstrappedTimings);
|
||||
}
|
||||
mBootstrappedTimings = TimingStruct();
|
||||
}
|
||||
|
||||
mTransactionCaps = caps;
|
||||
mPriority = pri;
|
||||
|
|
@ -2414,5 +2427,11 @@ nsHttpConnection::CheckForTraffic(bool check)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsHttpConnection::BootstrapTimings(TimingStruct times)
|
||||
{
|
||||
mBootstrappedTimings = times;
|
||||
}
|
||||
|
||||
} // namespace net
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "TunnelUtils.h"
|
||||
#include "mozilla/Mutex.h"
|
||||
#include "ARefBase.h"
|
||||
#include "TimingStruct.h"
|
||||
|
||||
#include "nsIAsyncInputStream.h"
|
||||
#include "nsIAsyncOutputStream.h"
|
||||
|
|
@ -379,6 +380,11 @@ private:
|
|||
bool mEarlyDataNegotiated; //Only used for telemetry
|
||||
nsCString mEarlyNegotiatedALPN;
|
||||
bool mDid0RTTSpdy;
|
||||
|
||||
public:
|
||||
void BootstrapTimings(TimingStruct times);
|
||||
private:
|
||||
TimingStruct mBootstrappedTimings;
|
||||
};
|
||||
|
||||
} // namespace net
|
||||
|
|
|
|||
|
|
@ -3314,6 +3314,11 @@ nsHalfOpenSocket::OnOutputStreamReady(nsIAsyncOutputStream *out)
|
|||
LOG(("nsHalfOpenSocket::OnOutputStreamReady "
|
||||
"Created new nshttpconnection %p\n", conn.get()));
|
||||
|
||||
NullHttpTransaction *nullTrans = mTransaction->QueryNullTransaction();
|
||||
if (nullTrans) {
|
||||
conn->BootstrapTimings(nullTrans->Timings());
|
||||
}
|
||||
|
||||
// Some capabilities are needed before a transaciton actually gets
|
||||
// scheduled (e.g. how to negotiate false start)
|
||||
conn->SetTransactionCaps(mTransaction->Caps());
|
||||
|
|
|
|||
|
|
@ -623,6 +623,14 @@ nsHttpTransaction::OnTransportStatus(nsITransport* transport,
|
|||
} else if (status == NS_NET_STATUS_CONNECTED_TO) {
|
||||
SetConnectEnd(TimeStamp::Now(), true);
|
||||
} else if (status == NS_NET_STATUS_TLS_HANDSHAKE_ENDED) {
|
||||
{
|
||||
// before overwriting connectEnd, copy it to secureConnectionStart
|
||||
MutexAutoLock lock(mLock);
|
||||
if (mTimings.secureConnectionStart.IsNull() &&
|
||||
!mTimings.connectEnd.IsNull()) {
|
||||
mTimings.secureConnectionStart = mTimings.connectEnd;
|
||||
}
|
||||
}
|
||||
SetConnectEnd(TimeStamp::Now(), false);
|
||||
}
|
||||
}
|
||||
|
|
@ -2135,6 +2143,13 @@ nsHttpTransaction::Timings()
|
|||
return timings;
|
||||
}
|
||||
|
||||
void
|
||||
nsHttpTransaction::BootstrapTimings(TimingStruct times)
|
||||
{
|
||||
mozilla::MutexAutoLock lock(mLock);
|
||||
mTimings = times;
|
||||
}
|
||||
|
||||
void
|
||||
nsHttpTransaction::SetDomainLookupStart(mozilla::TimeStamp timeStamp, bool onlyIfNull)
|
||||
{
|
||||
|
|
@ -2226,6 +2241,13 @@ nsHttpTransaction::GetConnectStart()
|
|||
return mTimings.connectStart;
|
||||
}
|
||||
|
||||
mozilla::TimeStamp
|
||||
nsHttpTransaction::GetSecureConnectionStart()
|
||||
{
|
||||
mozilla::MutexAutoLock lock(mLock);
|
||||
return mTimings.secureConnectionStart;
|
||||
}
|
||||
|
||||
mozilla::TimeStamp
|
||||
nsHttpTransaction::GetConnectEnd()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ public:
|
|||
|
||||
// Locked methods to get and set timing info
|
||||
const TimingStruct Timings();
|
||||
void BootstrapTimings(TimingStruct times);
|
||||
void SetDomainLookupStart(mozilla::TimeStamp timeStamp, bool onlyIfNull = false);
|
||||
void SetDomainLookupEnd(mozilla::TimeStamp timeStamp, bool onlyIfNull = false);
|
||||
void SetConnectStart(mozilla::TimeStamp timeStamp, bool onlyIfNull = false);
|
||||
|
|
@ -160,6 +161,8 @@ public:
|
|||
mozilla::TimeStamp GetDomainLookupStart();
|
||||
mozilla::TimeStamp GetDomainLookupEnd();
|
||||
mozilla::TimeStamp GetConnectStart();
|
||||
mozilla::TimeStamp GetSecureConnectionStart();
|
||||
|
||||
mozilla::TimeStamp GetConnectEnd();
|
||||
mozilla::TimeStamp GetRequestStart();
|
||||
mozilla::TimeStamp GetResponseStart();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue