Bug 1794598 - Optimize string allocation in ClassOfService::ToString() r=necko-reviewers,valentin

We want to save heap allocations in this important codepath.

Differential Revision: https://phabricator.services.mozilla.com/D159626
This commit is contained in:
Andrew Creskey
2022-10-24 16:28:15 +00:00
parent 8c375fa746
commit 9635acd94b
3 changed files with 14 additions and 12 deletions

View File

@@ -26,12 +26,12 @@ class ClassOfService {
bool Incremental() const { return mIncremental; }
void SetIncremental(bool incremental) { mIncremental = incremental; }
static nsCString ToString(const ClassOfService cos) {
return ToString(cos.Flags());
static void ToString(const ClassOfService aCos, nsACString& aOut) {
return ToString(aCos.Flags(), aOut);
}
static nsCString ToString(unsigned long flags) {
return nsCString(std::bitset<32>(flags).to_string());
static void ToString(unsigned long aFlags, nsACString& aOut) {
aOut = nsPrintfCString("%lX", aFlags);
}
private:

View File

@@ -452,18 +452,18 @@ void HttpChannelChild::OnStartRequest(
ResourceTimingStructArgsToTimingsStruct(aArgs.timing(), mTransactionTimings);
nsAutoCString cosString;
ClassOfService::ToString(mClassOfService, cosString);
if (!mAsyncOpenTime.IsNull() &&
!aArgs.timing().transactionPending().IsNull()) {
Telemetry::AccumulateTimeDelta(
Telemetry::NETWORK_ASYNC_OPEN_CHILD_TO_TRANSACTION_PENDING_EXP_MS,
ClassOfService::ToString(mClassOfService), mAsyncOpenTime,
aArgs.timing().transactionPending());
cosString, mAsyncOpenTime, aArgs.timing().transactionPending());
}
if (!aArgs.timing().responseStart().IsNull()) {
Telemetry::AccumulateTimeDelta(
Telemetry::NETWORK_RESPONSE_START_PARENT_TO_CONTENT_EXP_MS,
ClassOfService::ToString(mClassOfService),
Telemetry::NETWORK_RESPONSE_START_PARENT_TO_CONTENT_EXP_MS, cosString,
aArgs.timing().responseStart(), TimeStamp::Now());
}

View File

@@ -1231,14 +1231,16 @@ HttpChannelParent::OnStartRequest(nsIRequest* aRequest) {
if (!args.timing().domainLookupEnd().IsNull() &&
!args.timing().connectStart().IsNull()) {
nsCString protocolVersion;
nsAutoCString protocolVersion;
mChannel->GetProtocolVersion(protocolVersion);
uint32_t classOfServiceFlags = 0;
mChannel->GetClassFlags(&classOfServiceFlags);
nsAutoCString cosString;
ClassOfService::ToString(classOfServiceFlags, cosString);
nsAutoCString key(
nsPrintfCString("%s_%s", protocolVersion.get(), cosString.get()));
Telemetry::AccumulateTimeDelta(
Telemetry::NETWORK_DNS_END_TO_CONNECT_START_EXP_MS,
protocolVersion + "_"_ns +
ClassOfService::ToString(classOfServiceFlags),
Telemetry::NETWORK_DNS_END_TO_CONNECT_START_EXP_MS, key,
args.timing().domainLookupEnd(), args.timing().connectStart());
}