diff --git a/folly/executors/BUCK b/folly/executors/BUCK index a03a6544ab1..fc05baad85a 100644 --- a/folly/executors/BUCK +++ b/folly/executors/BUCK @@ -472,3 +472,15 @@ cpp_library( "glog", ], ) + +cpp_library( + name = "execution_observer", + srcs = ["ExecutionObserver.cpp"], + headers = ["ExecutionObserver.h"], + deps = [ + "//folly/tracing:static_tracepoint", + ], + exported_external_deps = [ + "boost", + ], +) diff --git a/folly/experimental/ExecutionObserver.cpp b/folly/executors/ExecutionObserver.cpp similarity index 96% rename from folly/experimental/ExecutionObserver.cpp rename to folly/executors/ExecutionObserver.cpp index dd5449a2592..13da7dadb2f 100644 --- a/folly/experimental/ExecutionObserver.cpp +++ b/folly/executors/ExecutionObserver.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include +#include #include diff --git a/folly/executors/ExecutionObserver.h b/folly/executors/ExecutionObserver.h new file mode 100644 index 00000000000..87ac00dcaf2 --- /dev/null +++ b/folly/executors/ExecutionObserver.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +#include + +namespace folly { + +/** + * Observes the execution of a task. Multiple execution observers can be chained + * together. As a caveat, execution observers should not remove themselves from + * the list of observers during execution + */ +class ExecutionObserver + : public boost::intrusive::list_base_hook< + boost::intrusive::link_mode> { + public: + enum class CallbackType { + // Owned by EventBase. + Event, + Loop, + NotificationQueue, + // Owned by FiberManager. + Fiber, + }; + // Constant time size = false to support auto_unlink behavior, options are + // mutually exclusive + typedef boost::intrusive:: + list> + List; + + virtual ~ExecutionObserver() = default; + + /** + * Called when a task is about to start executing. + * + * @param id Unique id for the task which is starting. + */ + virtual void starting(uintptr_t id, CallbackType callbackType) noexcept = 0; + + /** + * Called just after a task stops executing. + * + * @param id Unique id for the task which stopped. + */ + virtual void stopped(uintptr_t id, CallbackType callbackType) noexcept = 0; +}; + +class ExecutionObserverScopeGuard { + public: + ExecutionObserverScopeGuard( + folly::ExecutionObserver::List* observerList, + void* id, + folly::ExecutionObserver::CallbackType callbackType); + + ~ExecutionObserverScopeGuard(); + + private: + folly::ExecutionObserver::List* observerList_; + uintptr_t id_; + folly::ExecutionObserver::CallbackType callbackType_; +}; + +} // namespace folly diff --git a/folly/experimental/BUCK b/folly/experimental/BUCK index 06c8790f454..4b295cbdd57 100644 --- a/folly/experimental/BUCK +++ b/folly/experimental/BUCK @@ -78,13 +78,11 @@ cpp_library( cpp_library( name = "execution_observer", - srcs = ["ExecutionObserver.cpp"], - headers = ["ExecutionObserver.h"], - deps = [ - "//folly/tracing:static_tracepoint", + headers = [ + "ExecutionObserver.h", ], - exported_external_deps = [ - "boost", + exported_deps = [ + "//folly/executors:execution_observer", ], ) diff --git a/folly/experimental/ExecutionObserver.h b/folly/experimental/ExecutionObserver.h index 87ac00dcaf2..ea180b39bdd 100644 --- a/folly/experimental/ExecutionObserver.h +++ b/folly/experimental/ExecutionObserver.h @@ -14,67 +14,4 @@ * limitations under the License. */ -#pragma once - -#include - -#include - -namespace folly { - -/** - * Observes the execution of a task. Multiple execution observers can be chained - * together. As a caveat, execution observers should not remove themselves from - * the list of observers during execution - */ -class ExecutionObserver - : public boost::intrusive::list_base_hook< - boost::intrusive::link_mode> { - public: - enum class CallbackType { - // Owned by EventBase. - Event, - Loop, - NotificationQueue, - // Owned by FiberManager. - Fiber, - }; - // Constant time size = false to support auto_unlink behavior, options are - // mutually exclusive - typedef boost::intrusive:: - list> - List; - - virtual ~ExecutionObserver() = default; - - /** - * Called when a task is about to start executing. - * - * @param id Unique id for the task which is starting. - */ - virtual void starting(uintptr_t id, CallbackType callbackType) noexcept = 0; - - /** - * Called just after a task stops executing. - * - * @param id Unique id for the task which stopped. - */ - virtual void stopped(uintptr_t id, CallbackType callbackType) noexcept = 0; -}; - -class ExecutionObserverScopeGuard { - public: - ExecutionObserverScopeGuard( - folly::ExecutionObserver::List* observerList, - void* id, - folly::ExecutionObserver::CallbackType callbackType); - - ~ExecutionObserverScopeGuard(); - - private: - folly::ExecutionObserver::List* observerList_; - uintptr_t id_; - folly::ExecutionObserver::CallbackType callbackType_; -}; - -} // namespace folly +#include diff --git a/folly/somerge_defs.bzl b/folly/somerge_defs.bzl index 009aaefa243..54abbbf0f84 100644 --- a/folly/somerge_defs.bzl +++ b/folly/somerge_defs.bzl @@ -2,7 +2,7 @@ Generated by xplat/cross_plat_devx/somerge_maps/compute_merge_maps.py -@generated SignedSource<> +@generated SignedSource<> """ # Entry Points: @@ -157,6 +157,7 @@ FOLLY_BASE_NATIVE_LIBRARY_MERGE_MAP = [ "//xplat/folly/executors/thread_factory:thread_factoryAndroid", "//xplat/folly/executors:cpu_thread_pool_executorAndroid", "//xplat/folly/executors:drivable_executorAndroid", + "//xplat/folly/executors:execution_observerAndroid", "//xplat/folly/executors:executor_with_priorityAndroid", "//xplat/folly/executors:global_executorAndroid", "//xplat/folly/executors:global_thread_pool_listAndroid",