mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 07:15:46 +00:00
Bug 1696945 - Part 1: Extend PerfStats to record arbitrary durations r=bas,necko-reviewers,valentin
Add PerfStats::RecordMeasurement( metric, duration ) api so we can record timings for async metrics where details are not always known until completion. Differential Revision: https://phabricator.services.mozilla.com/D107496
This commit is contained in:
parent
2640df5e01
commit
3227459668
@ -26,7 +26,12 @@ static const char* const sMetricNames[] = {"DisplayList Building",
|
||||
"Layer Transactions",
|
||||
"Compositing",
|
||||
"Reflowing",
|
||||
"Styling"};
|
||||
"Styling",
|
||||
"HttpChannelCompletion_Network",
|
||||
"HttpChannelCompletion_Cache"};
|
||||
|
||||
static_assert(sizeof(sMetricNames) / sizeof(sMetricNames[0]) ==
|
||||
static_cast<uint64_t>(PerfStats::Metric::Max));
|
||||
|
||||
PerfStats::MetricMask PerfStats::sCollectionMask = 0;
|
||||
StaticMutex PerfStats::sMutex;
|
||||
@ -90,6 +95,16 @@ void PerfStats::RecordMeasurementEndInternal(Metric aMetric) {
|
||||
.ToMilliseconds();
|
||||
}
|
||||
|
||||
void PerfStats::RecordMeasurementInternal(Metric aMetric,
|
||||
TimeDuration aDuration) {
|
||||
StaticMutexAutoLock lock(sMutex);
|
||||
|
||||
MOZ_ASSERT(sSingleton);
|
||||
|
||||
sSingleton->mRecordedTimes[static_cast<size_t>(aMetric)] +=
|
||||
aDuration.ToMilliseconds();
|
||||
}
|
||||
|
||||
struct StringWriteFunc : public JSONWriteFunc {
|
||||
nsCString& mString;
|
||||
|
||||
|
@ -29,6 +29,8 @@ class PerfStats {
|
||||
Compositing,
|
||||
Reflowing,
|
||||
Styling,
|
||||
HttpChannelCompletion_Network,
|
||||
HttpChannelCompletion_Cache,
|
||||
Max
|
||||
};
|
||||
|
||||
@ -50,6 +52,13 @@ class PerfStats {
|
||||
RecordMeasurementEndInternal(aMetric);
|
||||
}
|
||||
|
||||
static void RecordMeasurement(Metric aMetric, TimeDuration aDuration) {
|
||||
if (!(sCollectionMask & (1 << static_cast<uint64_t>(aMetric)))) {
|
||||
return;
|
||||
}
|
||||
RecordMeasurementInternal(aMetric, aDuration);
|
||||
}
|
||||
|
||||
template <Metric N>
|
||||
class AutoMetricRecording {
|
||||
public:
|
||||
@ -71,6 +80,7 @@ class PerfStats {
|
||||
static PerfStats* GetSingleton();
|
||||
static void RecordMeasurementStartInternal(Metric aMetric);
|
||||
static void RecordMeasurementEndInternal(Metric aMetric);
|
||||
static void RecordMeasurementInternal(Metric aMetric, TimeDuration aDuration);
|
||||
|
||||
RefPtr<PerfStatsPromise> CollectPerfStatsJSONInternal();
|
||||
nsCString CollectLocalPerfStatsJSONInternal();
|
||||
|
Loading…
Reference in New Issue
Block a user