Lines Matching refs:task

91 bool IsTaskLocalEnable(ffrt::CPUEUTask* task)  in IsTaskLocalEnable()  argument
93 if ((task->type != ffrt_normal_task) || (!task->taskLocal)) { in IsTaskLocalEnable()
97 if (task->tsd == nullptr) { in IsTaskLocalEnable()
118 void SwitchTsdAddrToTask(ffrt::CPUEUTask* task) in SwitchTsdAddrToTask() argument
121 task->threadTsd = threadTsd; in SwitchTsdAddrToTask()
122 pthread_settsd(task->tsd); in SwitchTsdAddrToTask()
125 void SwitchTsdToTask(ffrt::CPUEUTask* task) in SwitchTsdToTask() argument
127 if (!IsTaskLocalEnable(task)) { in SwitchTsdToTask()
131 InitWorkerTsdValueToTask(task->tsd); in SwitchTsdToTask()
133 SwitchTsdAddrToTask(task); in SwitchTsdToTask()
135 task->runningTid.store(pthread_self()); in SwitchTsdToTask()
139 bool SwitchTsdAddrToThread(ffrt::CPUEUTask* task) in SwitchTsdAddrToThread() argument
141 if (!task->threadTsd) { in SwitchTsdAddrToThread()
144 pthread_settsd(task->threadTsd); in SwitchTsdAddrToThread()
145 task->threadTsd = nullptr; in SwitchTsdAddrToThread()
168 void SwitchTsdToThread(ffrt::CPUEUTask* task) in SwitchTsdToThread() argument
170 if (!IsTaskLocalEnable(task)) { in SwitchTsdToThread()
174 if (!SwitchTsdAddrToThread(task)) { in SwitchTsdToThread()
178 UpdateWorkerTsdValueToThread(task->tsd); in SwitchTsdToThread()
180 task->runningTid.store(0); in SwitchTsdToThread()
184 void TaskTsdRunDtors(ffrt::CPUEUTask* task) in TaskTsdRunDtors() argument
186 SwitchTsdAddrToTask(task); in TaskTsdRunDtors()
188 SwitchTsdAddrToThread(task); in TaskTsdRunDtors()
192 void TaskTsdDeconstruct(ffrt::CPUEUTask* task) in TaskTsdDeconstruct() argument
194 if (!IsTaskLocalEnable(task)) { in TaskTsdDeconstruct()
198 TaskTsdRunDtors(task); in TaskTsdDeconstruct()
199 if (task->tsd != nullptr) { in TaskTsdDeconstruct()
200 free(task->tsd); in TaskTsdDeconstruct()
201 task->tsd = nullptr; in TaskTsdDeconstruct()
202 task->taskLocal = false; in TaskTsdDeconstruct()
204 FFRT_LOGD("tsd deconstruct done, task[%lu], name[%s]", task->gid, task->label.c_str()); in TaskTsdDeconstruct()
217 SwitchTsdToThread(co->task); in CoExit()
227 ffrt::CPUEUTask* task = co->task; in CoStartEntry() local
229 switch (task->type) { in CoStartEntry()
232 task->Execute(); in CoStartEntry()
236 QueueTask* sTask = reinterpret_cast<QueueTask*>(task); in CoStartEntry()
244 …FFRT_LOGE("CoStart unsupport task[%lu], type=%d, name[%s]", task->gid, task->type, task->label.c_s… in CoStartEntry()
326 static inline void BindNewCoRoutione(ffrt::CPUEUTask* task) in BindNewCoRoutione() argument
328 task->coRoutine = GetCoEnv()->runningCo; in BindNewCoRoutione()
329 task->coRoutine->task = task; in BindNewCoRoutione()
330 task->coRoutine->thEnv = GetCoEnv(); in BindNewCoRoutione()
333 static inline void UnbindCoRoutione(ffrt::CPUEUTask* task) in UnbindCoRoutione() argument
335 task->coRoutine->task = nullptr; in UnbindCoRoutione()
336 task->coRoutine = nullptr; in UnbindCoRoutione()
339 static inline int CoAlloc(ffrt::CPUEUTask* task) in CoAlloc() argument
341 if (task->coRoutine) { // use allocated coroutine stack in CoAlloc()
345 GetCoEnv()->runningCo = task->coRoutine; in CoAlloc()
348 GetCoEnv()->runningCo = AllocNewCoRoutine(task->stack_size); in CoAlloc()
350 … if (GetCoEnv()->runningCo->allocatedSize != task->stack_size) { // stack size not match, alloc one in CoAlloc()
352 GetCoEnv()->runningCo = AllocNewCoRoutine(task->stack_size); in CoAlloc()
360 static inline int CoCreat(ffrt::CPUEUTask* task) in CoCreat() argument
362 CoAlloc(task); in CoCreat()
366 BindNewCoRoutione(task); in CoCreat()
367 auto co = task->coRoutine; in CoCreat()
374 static inline void CoSwitchInTransaction(ffrt::CPUEUTask* task) in CoSwitchInTransaction() argument
376 if (task->coRoutine->status == static_cast<int>(CoStatus::CO_NOT_FINISH)) { in CoSwitchInTransaction()
377 for (auto& name : task->traceTag) { in CoSwitchInTransaction()
381 FFRT_FAKE_TRACE_MARKER(task->gid); in CoSwitchInTransaction()
384 static inline void CoSwitchOutTransaction(ffrt::CPUEUTask* task) in CoSwitchOutTransaction() argument
386 FFRT_FAKE_TRACE_MARKER(task->gid); in CoSwitchOutTransaction()
387 int traceTagNum = static_cast<int>(task->traceTag.size()); in CoSwitchOutTransaction()
394 int CoStart(ffrt::CPUEUTask* task, CoRoutineEnv* coRoutineEnv) in CoStart() argument
396 if (task->coRoutine) { in CoStart()
397 int ret = task->coRoutine->status.exchange(static_cast<int>(CoStatus::CO_RUNNING)); in CoStart()
404 if (CoCreat(task) != 0) { in CoStart()
407 auto co = task->coRoutine; in CoStart()
409 FFRTTraceRecord::TaskRun(task->GetQos(), task); in CoStart()
412 ffrt::TaskLoadTracking::Begin(task); in CoStart()
414 FFRTSetStackId(task->stackId); in CoStart()
416 FFRT_TASK_BEGIN(task->label, task->gid); in CoStart()
417 if (task->type == ffrt_normal_task) { in CoStart()
418 task->UpdateState(ffrt::TaskState::RUNNING); in CoStart()
420 CoSwitchInTransaction(task); in CoStart()
422 SwitchTsdToTask(co->task); in CoStart()
426 ffrt::TaskLoadTracking::End(task); // Todo: deal with CoWait() in CoStart()
431 task->UpdateState(ffrt::TaskState::EXITED); in CoStart()
443 FFRTTraceRecord::TaskCoSwitchOut(task); in CoStart()
445 if ((*pending)(task)) { in CoStart()
450 FFRT_WAKE_TRACER(task->gid); // fast path wk in CoStart()
462 CoSwitchOutTransaction(co->task); in CoYield()
463 if (co->task->type == ffrt_normal_task) { in CoYield()
464 co->task->UpdateState(ffrt::TaskState::BLOCKED); in CoYield()
466 FFRT_BLOCK_MARKER(co->task->gid); in CoYield()
468 SwitchTsdToThread(co->task); in CoYield()
480 CoExit(co, co->task->type == ffrt_normal_task); in CoYield()
490 void CoWake(ffrt::CPUEUTask* task, bool timeOut) in CoWake() argument
492 if (task == nullptr) { in CoWake()
497 task->wakeupTimeOut = timeOut; in CoWake()
498 FFRT_WAKE_TRACER(task->gid); in CoWake()
499 switch (task->type) { in CoWake()
501 task->UpdateState(ffrt::TaskState::READY); in CoWake()
505 QueueTask* sTask = reinterpret_cast<QueueTask*>(task); in CoWake()
511 …FFRT_LOGE("CoWake unsupport task[%lu], type=%d, name[%s]", task->gid, task->type, task->label.c_st… in CoWake()