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:
@@ -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:
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user