Cheaper bumpHandlingTime
authorPavlo Kushnir <pavlo@fb.com>
Wed, 27 Apr 2016 07:20:04 +0000 (00:20 -0700)
committerFacebook Github Bot 1 <facebook-github-bot-1-bot@fb.com>
Wed, 27 Apr 2016 07:20:24 +0000 (00:20 -0700)
Summary: no need in virtual call from EventHandler.

Reviewed By: yfeldblum

Differential Revision: D3226960

fb-gh-sync-id: eb9c191630e1a1ac022666201100e3778eb7b611
fbshipit-source-id: eb9c191630e1a1ac022666201100e3778eb7b611

folly/io/async/AsyncTimeout.cpp
folly/io/async/EventBase.cpp
folly/io/async/EventBase.h
folly/io/async/EventHandler.cpp
folly/io/async/TimeoutManager.h
folly/io/async/test/MockTimeoutManager.h

index 50399767b1e53bc848bbf27de13d9233c55f678f..6758aec7660737e081f9d1af9d25a554c7642757 100644 (file)
@@ -150,7 +150,7 @@ void AsyncTimeout::libeventCallback(int fd, short events, void* arg) {
   assert((event_ref_flags(&timeout->event_) & ~EVLIST_INTERNAL) == EVLIST_INIT);
 
   // this can't possibly fire if timeout->eventBase_ is nullptr
-  (void) timeout->timeoutManager_->bumpHandlingTime();
+  timeout->timeoutManager_->bumpHandlingTime();
 
   auto old_ctx =
     RequestContext::setContext(timeout->context_);
index 7f2d923952ae02db21121c92cddcff7aa2799f6d..6f7e9a27425e264be6539998aaa73d87a55fdd28 100644 (file)
@@ -380,9 +380,7 @@ bool EventBase::loopBody(int flags) {
       idleStart = std::chrono::duration_cast<std::chrono::microseconds>(
         std::chrono::steady_clock::now().time_since_epoch()).count();
     } else {
-      VLOG(11) << "EventBase "  << this << " did not timeout "
-        " time measurement is disabled "
-        " nothingHandledYet(): "<< nothingHandledYet();
+      VLOG(11) << "EventBase " << this << " did not timeout";
     }
 
     // If the event loop indicate that there were no more events, and
@@ -445,22 +443,23 @@ void EventBase::loopForever() {
   }
 }
 
-bool EventBase::bumpHandlingTime() {
+void EventBase::bumpHandlingTime() {
+  if (!enableTimeMeasurement_) {
+    return;
+  }
+
   VLOG(11) << "EventBase " << this << " " << __PRETTY_FUNCTION__ <<
     " (loop) latest " << latestLoopCnt_ << " next " << nextLoopCnt_;
-  if(nothingHandledYet()) {
+  if (nothingHandledYet()) {
     latestLoopCnt_ = nextLoopCnt_;
-    if (enableTimeMeasurement_) {
-      // set the time
-      startWork_ = std::chrono::duration_cast<std::chrono::microseconds>(
-        std::chrono::steady_clock::now().time_since_epoch()).count();
+    // set the time
+    startWork_ = std::chrono::duration_cast<std::chrono::microseconds>(
+                     std::chrono::steady_clock::now().time_since_epoch())
+                     .count();
 
-      VLOG(11) << "EventBase " << this << " " << __PRETTY_FUNCTION__ <<
-        " (loop) startWork_ " << startWork_;
-    }
-    return true;
+    VLOG(11) << "EventBase " << this << " " << __PRETTY_FUNCTION__
+             << " (loop) startWork_ " << startWork_;
   }
-  return false;
 }
 
 void EventBase::terminateLoopSoon() {
@@ -706,7 +705,7 @@ void EventBase::SmoothLoopTime::addSample(int64_t idle, int64_t busy) {
   value_ += (1.0 - coeff) * busy;
 }
 
-bool EventBase::nothingHandledYet() {
+bool EventBase::nothingHandledYet() const noexcept {
   VLOG(11) << "latest " << latestLoopCnt_ << " next " << nextLoopCnt_;
   return (nextLoopCnt_ != latestLoopCnt_);
 }
index a7958d223a1cfbba7b8d5fb529e60769998a0bba..e678781e320e22f2e569855d5a1470c65b8252ba 100644 (file)
@@ -508,7 +508,7 @@ class EventBase : private boost::noncopyable,
    * first handler fired within that cycle.
    *
    */
-  bool bumpHandlingTime() override;
+  void bumpHandlingTime() override final;
 
   class SmoothLoopTime {
    public:
@@ -598,7 +598,7 @@ class EventBase : private boost::noncopyable,
 
   void cancelTimeout(AsyncTimeout* obj) override;
 
-  bool isInTimeoutManagerThread() override {
+  bool isInTimeoutManagerThread() override final {
     return isInEventBaseThread();
   }
 
@@ -606,7 +606,7 @@ class EventBase : private boost::noncopyable,
    * Helper function that tells us whether we have already handled
    * some event/timeout/callback in this loop iteration.
    */
-  bool nothingHandledYet();
+  bool nothingHandledYet() const noexcept;
 
   // small object used as a callback arg with enough info to execute the
   // appropriate client-provided Cob
index 67d15889136eb2a649d859989278f55ea31bb6a4..a0ac4a8fa6119efc5f6e8148547179002ecbcfa3 100644 (file)
@@ -155,7 +155,7 @@ void EventHandler::libeventCallback(int fd, short events, void* arg) {
   }
 
   // this can't possibly fire if handler->eventBase_ is nullptr
-  (void) handler->eventBase_->bumpHandlingTime();
+  handler->eventBase_->bumpHandlingTime();
 
   handler->handlerReady(events);
 
index e544674d2272dfa2f96abb3af7eacabf8f83c710..e7df72e9893edfa4d221f3506c87683011548efe 100644 (file)
@@ -65,7 +65,7 @@ class TimeoutManager {
    * This is used to mark the beginning of a new loop cycle by the
    * first handler fired within that cycle.
    */
-  virtual bool bumpHandlingTime() = 0;
+  virtual void bumpHandlingTime() = 0;
 
   /**
    * Helper method to know whether we are running in the timeout manager
index fe2e8e602ad1858709189728490eeb9b406e8dc4..686aa3f741730fe2319b5b9ad75ec4296304b1d8 100644 (file)
@@ -37,7 +37,7 @@ class MockTimeoutManager : public folly::TimeoutManager {
 
   MOCK_METHOD1(cancelTimeout, void(folly::AsyncTimeout*));
 
-  MOCK_METHOD0(bumpHandlingTime, bool());
+  MOCK_METHOD0(bumpHandlingTime, void());
   MOCK_METHOD0(isInTimeoutManagerThread, bool());
 };
 }