Summary:
This is an experimental diff that may improve the performance of `HHWheelTimer::cancelAll`. If there are no timers to cancel, then it can bail early.
Since perflab is unlikely to be conclusive, and since this diff looks like a strict improvement, I'll proceed with landing it.
Reviewed By: djwatson
Differential Revision:
D2735297
fb-gh-sync-id:
9f5a811ee6d9fa9434576e9abd3ef3443a7579b7
}
size_t HHWheelTimer::cancelAll() {
}
size_t HHWheelTimer::cancelAll() {
- decltype(buckets_) buckets;
+ size_t count = 0;
+
+ if (count_ != 0) {
+ decltype(buckets_) buckets;
// Work around std::swap() bug in libc++
//
// http://llvm.org/bugs/show_bug.cgi?id=22106
#if FOLLY_USE_LIBCPP
// Work around std::swap() bug in libc++
//
// http://llvm.org/bugs/show_bug.cgi?id=22106
#if FOLLY_USE_LIBCPP
- for (size_t i = 0; i < WHEEL_BUCKETS; ++i) {
- for (size_t ii = 0; ii < WHEEL_SIZE; ++ii) {
- std::swap(buckets_[i][ii], buckets[i][ii]);
+ for (size_t i = 0; i < WHEEL_BUCKETS; ++i) {
+ for (size_t ii = 0; ii < WHEEL_SIZE; ++ii) {
+ std::swap(buckets_[i][ii], buckets[i][ii]);
+ }
- std::swap(buckets, buckets_);
+ std::swap(buckets, buckets_);
- size_t count = 0;
-
- for (auto& tick : buckets) {
- for (auto& bucket : tick) {
- while (!bucket.empty()) {
- auto& cb = bucket.front();
- cb.cancelTimeout();
- cb.callbackCanceled();
- count++;
+ for (auto& tick : buckets) {
+ for (auto& bucket : tick) {
+ while (!bucket.empty()) {
+ auto& cb = bucket.front();
+ cb.cancelTimeout();
+ cb.callbackCanceled();
+ count++;
+ }