/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim:set expandtab ts=4 sw=2 sts=2 cin: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Bug 1919148 - Moved aClassOfServiceStr here to ensure that we call // aWriter.StringProperty before the lifetime of nsAutoCString ends
nsAutoCString aClassOfServiceStr;
GetClassOfService(aClassOfServiceStr, aClassOfServiceFlag);
MOZ_ASSERT(aClassOfServiceStr.Length() > 0, "aClassOfServiceStr should be set after GetClassOfService");
aWriter.StringProperty("classOfService",
MakeStringSpan(aClassOfServiceStr.get()));
static Span<constchar> GetNetworkState(NetworkLoadType aType) { switch (aType) { case NetworkLoadType::LOAD_START: return MakeStringSpan("STATUS_START"); case NetworkLoadType::LOAD_STOP: return MakeStringSpan("STATUS_STOP"); case NetworkLoadType::LOAD_REDIRECT: return MakeStringSpan("STATUS_REDIRECT"); case NetworkLoadType::LOAD_CANCEL: return MakeStringSpan("STATUS_CANCEL"); default:
MOZ_ASSERT(false, "Unexpected NetworkLoadType enum value."); return MakeStringSpan("");
}
}
static Span<constchar> GetCacheState(
net::CacheDisposition aCacheDisposition) { switch (aCacheDisposition) { case net::kCacheUnresolved: return MakeStringSpan("Unresolved"); case net::kCacheHit: return MakeStringSpan("Hit"); case net::kCacheHitViaReval: return MakeStringSpan("HitViaReval"); case net::kCacheMissedViaReval: return MakeStringSpan("MissedViaReval"); case net::kCacheMissed: return MakeStringSpan("Missed"); case net::kCacheUnknown: return MakeStringSpan(""); default:
MOZ_ASSERT(false, "Unexpected CacheDisposition enum value."); return MakeStringSpan("");
}
}
static Span<constchar> getRedirectType(uint32_t aRedirectFlags) {
MOZ_ASSERT(aRedirectFlags != 0, "aRedirectFlags should be non-zero"); if (aRedirectFlags & nsIChannelEventSink::REDIRECT_TEMPORARY) { return MakeStringSpan("Temporary");
} if (aRedirectFlags & nsIChannelEventSink::REDIRECT_PERMANENT) { return MakeStringSpan("Permanent");
} if (aRedirectFlags & nsIChannelEventSink::REDIRECT_INTERNAL) { return MakeStringSpan("Internal");
}
MOZ_ASSERT(false, "Couldn't find a redirect type from aRedirectFlags"); return MakeStringSpan("");
}
// Update an empty string aClassOfServiceStr based on aClassOfServiceFlag staticvoid GetClassOfService(nsAutoCString& aClassOfServiceStr, unsignedlong aClassOfServiceFlag) {
MOZ_ASSERT(aClassOfServiceStr.IsEmpty(), "Flags should not be appended to aClassOfServiceStr before " "calling GetClassOfService");
if (aClassOfServiceFlag & nsIClassOfService::Leader) {
aClassOfServiceStr.Append("Leader | ");
} if (aClassOfServiceFlag & nsIClassOfService::Follower) {
aClassOfServiceStr.Append("Follower | ");
} if (aClassOfServiceFlag & nsIClassOfService::Speculative) {
aClassOfServiceStr.Append("Speculative | ");
} if (aClassOfServiceFlag & nsIClassOfService::Background) {
aClassOfServiceStr.Append("Background | ");
} if (aClassOfServiceFlag & nsIClassOfService::Unblocked) {
aClassOfServiceStr.Append("Unblocked | ");
} if (aClassOfServiceFlag & nsIClassOfService::Throttleable) {
aClassOfServiceStr.Append("Throttleable | ");
} if (aClassOfServiceFlag & nsIClassOfService::UrgentStart) {
aClassOfServiceStr.Append("UrgentStart | ");
} if (aClassOfServiceFlag & nsIClassOfService::DontThrottle) {
aClassOfServiceStr.Append("DontThrottle | ");
} if (aClassOfServiceFlag & nsIClassOfService::Tail) {
aClassOfServiceStr.Append("Tail | ");
} if (aClassOfServiceFlag & nsIClassOfService::TailAllowed) {
aClassOfServiceStr.Append("TailAllowed | ");
} if (aClassOfServiceFlag & nsIClassOfService::TailForbidden) {
aClassOfServiceStr.Append("TailForbidden | ");
}
if (aClassOfServiceStr.IsEmpty()) {
aClassOfServiceStr.Append("Unset"); return;
}
MOZ_ASSERT(aClassOfServiceStr.Length() > 3, "aClassOfServiceStr must be at least 4 characters long to " "include two blank spaces and a '|' character."); // Remove the trailing '|'
aClassOfServiceStr.Truncate(aClassOfServiceStr.Length() - 3);
}
};
} // namespace mozilla::net
if (aIsPrivateBrowsing) { auto* privateBrowsingArg = ctx.event()->add_debug_annotations();
privateBrowsingArg->set_name("isPrivateBrowsing");
privateBrowsingArg->set_bool_value(aIsPrivateBrowsing);
}
if (aType != mozilla::net::NetworkLoadType::LOAD_START) {
mozilla::TimeStamp startTime; auto addNetworkTimingAnnotation =
[&startTime, &ctx, &aStart](const mozilla::TimeStamp& endTime, constchar* name) { if (endTime) { // If startTime is not defined, redefine the name of this to // "Waiting for Socket Thread". if (!startTime) {
name = "Waiting for Socket Thread (us)";
startTime = aStart;
}
mozilla::TimeDuration duration = endTime - startTime; auto* arg = ctx.event()->add_debug_annotations();
arg->set_name(name);
arg->set_int_value(duration.ToMilliseconds());
startTime = endTime;
}
};
addNetworkTimingAnnotation(aTimings.domainLookupStart, "Waiting for Socket Thread");
addNetworkTimingAnnotation(aTimings.domainLookupEnd, "DNS Request");
addNetworkTimingAnnotation(aTimings.connectStart, "After DNS Request");
addNetworkTimingAnnotation(aTimings.tcpConnectEnd, "TCP connection");
addNetworkTimingAnnotation(aTimings.secureConnectionStart, "After TCP connection");
addNetworkTimingAnnotation(aTimings.connectEnd, "Establishing TLS session");
addNetworkTimingAnnotation(aTimings.requestStart, "Waiting for HTTP request");
addNetworkTimingAnnotation(aTimings.responseStart, "HTTP request and waiting for response");
addNetworkTimingAnnotation(aTimings.responseEnd, "HTTP response");
addNetworkTimingAnnotation(aEnd, "Waiting to transmit the response");
}
});
} #endif// MOZ_PERFETTO
nsAutoCStringN<2048> name;
name.AppendASCII("Load "); // top 32 bits are process id of the load
name.AppendInt(aChannelId & 0xFFFFFFFFu);
// These can do allocations/frees/etc; avoid if not active
nsAutoCStringN<2048> spec; if (aURI) {
aURI->GetAsciiSpec(spec);
name.AppendASCII(": ");
name.Append(spec);
}
nsAutoCString redirect_spec; if (aRedirectURI) {
aRedirectURI->GetAsciiSpec(redirect_spec);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.