#include "base/task/current_thread.h"
#include <utility>
#include "base/callback_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/message_loop/message_pump_for_io.h"
#include "base/message_loop/message_pump_for_ui.h"
#include "base/message_loop/message_pump_type.h"
#include "base/task/sequence_manager/sequence_manager_impl.h"
#include "base/threading/thread_local.h"
#include "base/trace_event/base_tracing.h"
#include "build/build_config.h"
namespace base {
sequence_manager::internal::SequenceManagerImpl*
CurrentThread::GetCurrentSequenceManagerImpl() { … }
CurrentThread CurrentThread::Get() { … }
CurrentThread CurrentThread::GetNull() { … }
bool CurrentThread::IsSet() { … }
void CurrentThread::AddDestructionObserver(
DestructionObserver* destruction_observer) { … }
void CurrentThread::RemoveDestructionObserver(
DestructionObserver* destruction_observer) { … }
void CurrentThread::SetTaskRunner(
scoped_refptr<SingleThreadTaskRunner> task_runner) { … }
bool CurrentThread::IsBoundToCurrentThread() const { … }
bool CurrentThread::IsIdleForTesting() { … }
void CurrentThread::EnableMessagePumpTimeKeeperMetrics(
const char* thread_name,
bool wall_time_based_metrics_enabled_for_testing) { … }
void CurrentThread::AddTaskObserver(TaskObserver* task_observer) { … }
void CurrentThread::RemoveTaskObserver(TaskObserver* task_observer) { … }
void CurrentThread::SetAddQueueTimeToTasks(bool enable) { … }
CallbackListSubscription CurrentThread::RegisterOnNextIdleCallback(
RegisterOnNextIdleCallbackPasskey,
OnceClosure on_next_idle_callback) { … }
CurrentThread::ScopedAllowApplicationTasksInNativeNestedLoop::
ScopedAllowApplicationTasksInNativeNestedLoop()
: … { … }
CurrentThread::ScopedAllowApplicationTasksInNativeNestedLoop::
~ScopedAllowApplicationTasksInNativeNestedLoop() { … }
bool CurrentThread::ApplicationTasksAllowedInNativeNestedLoop() const { … }
#if !BUILDFLAG(IS_NACL)
CurrentUIThread CurrentUIThread::Get() { … }
bool CurrentUIThread::IsSet() { … }
MessagePumpForUI* CurrentUIThread::GetMessagePumpForUI() const { … }
#if BUILDFLAG(IS_OZONE) && !BUILDFLAG(IS_FUCHSIA) && !BUILDFLAG(IS_WIN)
bool CurrentUIThread::WatchFileDescriptor(
int fd,
bool persistent,
MessagePumpForUI::Mode mode,
MessagePumpForUI::FdWatchController* controller,
MessagePumpForUI::FdWatcher* delegate) { … }
#endif
#if BUILDFLAG(IS_IOS)
void CurrentUIThread::Attach() {
current_->AttachToMessagePump();
}
#endif
#if BUILDFLAG(IS_ANDROID)
void CurrentUIThread::Abort() {
GetMessagePumpForUI()->Abort();
}
#endif
#if BUILDFLAG(IS_WIN)
void CurrentUIThread::AddMessagePumpObserver(
MessagePumpForUI::Observer* observer) {
GetMessagePumpForUI()->AddObserver(observer);
}
void CurrentUIThread::RemoveMessagePumpObserver(
MessagePumpForUI::Observer* observer) {
GetMessagePumpForUI()->RemoveObserver(observer);
}
#endif
#endif
CurrentIOThread CurrentIOThread::Get() { … }
bool CurrentIOThread::IsSet() { … }
MessagePumpForIO* CurrentIOThread::GetMessagePumpForIO() const { … }
#if !BUILDFLAG(IS_NACL)
#if BUILDFLAG(IS_WIN)
HRESULT CurrentIOThread::RegisterIOHandler(
HANDLE file,
MessagePumpForIO::IOHandler* handler) {
DCHECK(current_->IsBoundToCurrentThread());
return GetMessagePumpForIO()->RegisterIOHandler(file, handler);
}
bool CurrentIOThread::RegisterJobObject(HANDLE job,
MessagePumpForIO::IOHandler* handler) {
DCHECK(current_->IsBoundToCurrentThread());
return GetMessagePumpForIO()->RegisterJobObject(job, handler);
}
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
bool CurrentIOThread::WatchFileDescriptor(
int fd,
bool persistent,
MessagePumpForIO::Mode mode,
MessagePumpForIO::FdWatchController* controller,
MessagePumpForIO::FdWatcher* delegate) { … }
#endif
#if BUILDFLAG(IS_MAC) || (BUILDFLAG(IS_IOS) && !BUILDFLAG(CRONET_BUILD))
bool CurrentIOThread::WatchMachReceivePort(
mach_port_t port,
MessagePumpForIO::MachPortWatchController* controller,
MessagePumpForIO::MachPortWatcher* delegate) {
DCHECK(current_->IsBoundToCurrentThread());
return GetMessagePumpForIO()->WatchMachReceivePort(port, controller,
delegate);
}
#endif
#endif
#if BUILDFLAG(IS_FUCHSIA)
bool CurrentIOThread::WatchZxHandle(
zx_handle_t handle,
bool persistent,
zx_signals_t signals,
MessagePumpForIO::ZxHandleWatchController* controller,
MessagePumpForIO::ZxHandleWatcher* delegate) {
DCHECK(current_->IsBoundToCurrentThread());
return GetMessagePumpForIO()->WatchZxHandle(handle, persistent, signals,
controller, delegate);
}
#endif
}