1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef BASE_CRITICAL_CLOSURE_H_
- #define BASE_CRITICAL_CLOSURE_H_
- #include <utility>
- #include "base/callback.h"
- #include "base/strings/string_piece.h"
- #include "build/build_config.h"
- #if defined(OS_IOS)
- #include "base/bind.h"
- #include "base/ios/scoped_critical_action.h"
- #endif
- namespace base {
- namespace internal {
- #if defined(OS_IOS)
- bool IsMultiTaskingSupported();
- class CriticalClosure {
- public:
- explicit CriticalClosure(StringPiece task_name, OnceClosure closure);
- CriticalClosure(const CriticalClosure&) = delete;
- CriticalClosure& operator=(const CriticalClosure&) = delete;
- ~CriticalClosure();
- void Run();
- private:
- ios::ScopedCriticalAction critical_action_;
- OnceClosure closure_;
- };
- #endif
- }
- #if defined(OS_IOS)
- inline OnceClosure MakeCriticalClosure(StringPiece task_name,
- OnceClosure closure) {
- DCHECK(internal::IsMultiTaskingSupported());
- return base::BindOnce(
- &internal::CriticalClosure::Run,
- Owned(new internal::CriticalClosure(task_name, std::move(closure))));
- }
- #else
- inline OnceClosure MakeCriticalClosure(StringPiece task_name,
- OnceClosure closure) {
-
-
- return closure;
- }
- #endif
- }
- #endif
|