Expose current observer from FiberManager
authorAdam Radziwonczyk-Syta <adamsyta@fb.com>
Tue, 7 Jun 2016 19:59:48 +0000 (12:59 -0700)
committerFacebook Github Bot 4 <facebook-github-bot-4-bot@fb.com>
Tue, 7 Jun 2016 20:08:21 +0000 (13:08 -0700)
Summary:
Inteded use case is to write tracing code in common components that can adjust its behavior to the current observer. E.g.
  auto* observer = FiberManager::getUnsafe()->getObserver();
  if (auto* specific_observer = dynamic_cast<SpecificObserver*>(observer)) {
    specific_observer->set_fiber_name(...);
  }

Reviewed By: andriigrynenko

Differential Revision: D3392890

fbshipit-source-id: 284b4964bbb17e9a081779b870af68e8f1a81634

folly/fibers/FiberManager.cpp
folly/fibers/FiberManager.h

index 99280e82e7f7f1e5d7194b0232a7466be7974608..783f241a021ade45cd96fe7027c9759c2e9489fa 100644 (file)
@@ -154,6 +154,10 @@ void FiberManager::setObserver(ExecutionObserver* observer) {
   observer_ = observer;
 }
 
+ExecutionObserver* FiberManager::getObserver() {
+  return observer_;
+}
+
 void FiberManager::setPreemptRunner(InlineFunctionRunner* preemptRunner) {
   preemptRunner_ = preemptRunner;
 }
index 117c26cbb9f6d0ac20a54792c7f55cf49623f1e1..25ee78c1eb8ea6ca65817402c29ed16610b203bc 100644 (file)
@@ -296,6 +296,12 @@ class FiberManager : public ::folly::Executor {
    */
   void setObserver(ExecutionObserver* observer);
 
+  /**
+   * @return Current observer for this FiberManager. Returns nullptr
+   * if no observer has been set.
+   */
+  ExecutionObserver* getObserver();
+
   /**
    * Setup fibers preempt runner.
    */