summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-01-29 00:40:24 +0100
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-01-29 00:40:24 +0100
commitabcaa560fcaf2f814fc40eef46557033c910eb96 (patch)
tree22acce9135d8f314d3e690cd743b42bcda968d52
parent3476c1d60ec29c5497123194acd7a9310b1023d2 (diff)
downloadUXP-abcaa560fcaf2f814fc40eef46557033c910eb96.tar
UXP-abcaa560fcaf2f814fc40eef46557033c910eb96.tar.gz
UXP-abcaa560fcaf2f814fc40eef46557033c910eb96.tar.lz
UXP-abcaa560fcaf2f814fc40eef46557033c910eb96.tar.xz
UXP-abcaa560fcaf2f814fc40eef46557033c910eb96.zip
Revert "Reduce number of allocations in AutoStopwatch"
This reverts commit 3476c1d60ec29c5497123194acd7a9310b1023d2.
-rw-r--r--js/src/jsapi.h2
-rw-r--r--js/src/vm/Stopwatch.cpp24
-rw-r--r--toolkit/components/perfmonitoring/nsPerformanceStats.cpp8
-rw-r--r--toolkit/components/perfmonitoring/nsPerformanceStats.h2
4 files changed, 11 insertions, 25 deletions
diff --git a/js/src/jsapi.h b/js/src/jsapi.h
index 799396a0a..0983f034f 100644
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -6566,7 +6566,7 @@ struct JS_PUBLIC_API(PerformanceGroup) {
uint64_t refCount_;
};
-using PerformanceGroupVector = mozilla::Vector<RefPtr<js::PerformanceGroup>, 8, SystemAllocPolicy>;
+using PerformanceGroupVector = mozilla::Vector<RefPtr<js::PerformanceGroup>, 0, SystemAllocPolicy>;
/**
* Commit any Performance Monitoring data.
diff --git a/js/src/vm/Stopwatch.cpp b/js/src/vm/Stopwatch.cpp
index 49b70c478..7a6acb970 100644
--- a/js/src/vm/Stopwatch.cpp
+++ b/js/src/vm/Stopwatch.cpp
@@ -136,9 +136,6 @@ PerformanceMonitoring::start()
bool
PerformanceMonitoring::commit()
{
- // Maximum initialization size, in elements for the vector of groups.
- static const size_t MAX_GROUPS_INIT_CAPACITY = 1024;
-
#if !defined(MOZ_HAVE_RDTSC)
// The AutoStopwatch is only executed if `MOZ_HAVE_RDTSC`.
return false;
@@ -155,19 +152,12 @@ PerformanceMonitoring::commit()
return true;
}
- // The move operation is generally constant time, unless `recentGroups_.length()` is very small, in which case it's
- // fast anyway because it's small.
- PerformanceGroupVector recentGroups(Move(recentGroups_));
- recentGroups_ = PerformanceGroupVector(); // Reconstruct after `Move`.
+ PerformanceGroupVector recentGroups;
+ recentGroups_.swap(recentGroups);
bool success = true;
- if (stopwatchCommitCallback) {
- success = stopwatchCommitCallback(iteration_, recentGroups, stopwatchCommitClosure);
- }
-
- // Heuristic use: we expect to have roughly the same number of groups as in the previous iteration.
- const size_t capacity = std::min(recentGroups.capacity(), MAX_GROUPS_INIT_CAPACITY);
- success = recentGroups_.reserve(capacity) && success;
+ if (stopwatchCommitCallback)
+ success = stopwatchCommitCallback(iteration_, recentGroups, stopwatchCommitClosure);
// Reset immediately, to make sure that we're not hit by the end
// of a nested event loop (which would cause `commit` to be called
@@ -237,7 +227,7 @@ AutoStopwatch::AutoStopwatch(JSContext* cx MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IM
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JSCompartment* compartment = cx_->compartment();
- if (MOZ_UNLIKELY(compartment->scheduledForDestruction))
+ if (compartment->scheduledForDestruction)
return;
JSRuntime* runtime = cx_->runtime();
@@ -276,11 +266,11 @@ AutoStopwatch::~AutoStopwatch()
}
JSCompartment* compartment = cx_->compartment();
- if (MOZ_UNLIKELY(compartment->scheduledForDestruction))
+ if (compartment->scheduledForDestruction)
return;
JSRuntime* runtime = cx_->runtime();
- if (MOZ_UNLIKELY(iteration_ != runtime->performanceMonitoring.iteration())) {
+ if (iteration_ != runtime->performanceMonitoring.iteration()) {
// We have entered a nested event loop at some point.
// Any information we may have is obsolete.
return;
diff --git a/toolkit/components/perfmonitoring/nsPerformanceStats.cpp b/toolkit/components/perfmonitoring/nsPerformanceStats.cpp
index 03e63a461..6c470356a 100644
--- a/toolkit/components/perfmonitoring/nsPerformanceStats.cpp
+++ b/toolkit/components/perfmonitoring/nsPerformanceStats.cpp
@@ -1310,12 +1310,8 @@ nsPerformanceStatsService::GetResources(uint64_t* userTime,
void
nsPerformanceStatsService::NotifyJankObservers(const mozilla::Vector<uint64_t>& aPreviousJankLevels) {
-
- // The move operation is generally constant time, unless `mPendingAlerts.length()` is very small, in which case it's
- // fast anyway.
- GroupVector alerts(Move(mPendingAlerts));
- mPendingAlerts = GroupVector(); // Reconstruct after `Move`.
-
+ GroupVector alerts;
+ mPendingAlerts.swap(alerts);
if (!mPendingAlertsCollector) {
// We are shutting down.
return;
diff --git a/toolkit/components/perfmonitoring/nsPerformanceStats.h b/toolkit/components/perfmonitoring/nsPerformanceStats.h
index 661a78a1a..6902c840d 100644
--- a/toolkit/components/perfmonitoring/nsPerformanceStats.h
+++ b/toolkit/components/perfmonitoring/nsPerformanceStats.h
@@ -19,7 +19,7 @@
class nsPerformanceGroup;
class nsPerformanceGroupDetails;
-typedef mozilla::Vector<RefPtr<nsPerformanceGroup>, 8> GroupVector;
+typedef mozilla::Vector<RefPtr<nsPerformanceGroup>> GroupVector;
/**
* A data structure for registering observers interested in