1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "task_runner.h"
17 
18 #include "helper/concurrent_helper.h"
19 #include "helper/object_helper.h"
20 #include "tools/log.h"
21 
22 namespace Commonlibrary::Concurrent::TaskPoolModule {
23 using namespace Commonlibrary::Concurrent::Common::Helper;
TaskRunner(TaskStartCallback callback)24 TaskRunner::TaskRunner(TaskStartCallback callback) : callback_(callback), selfThreadId_(uv_thread_self()) {}
25 
~TaskRunner()26 TaskRunner::~TaskRunner()
27 {
28     CloseHelp::DeletePointer(taskInnerRunner_, false);
29 }
30 
Run()31 void TaskRunner::TaskInnerRunner::Run()
32 {
33     if (LIKELY(runner_ != nullptr)) {
34         runner_->Run();
35     } else { // LCOV_EXCL_BR_LINE
36         HILOG_FATAL("taskpool:: runner_ is null");
37     }
38 }
TaskInnerRunner(const TaskRunner * runner)39 TaskRunner::TaskInnerRunner::TaskInnerRunner(const TaskRunner* runner) : runner_(runner) {}
40 
Run() const41 void TaskRunner::Run() const
42 {
43     if (LIKELY(callback_.callback != nullptr)) {
44         callback_.callback(callback_.data);
45     } else { // LCOV_EXCL_BR_LINE
46         HILOG_FATAL("taskpool:: callback_.callback is null");
47     }
48 }
49 
Execute()50 bool TaskRunner::Execute()
51 {
52     taskInnerRunner_ = new TaskInnerRunner(this);
53     return taskInnerRunner_->Start();
54 }
55 } // namespace Commonlibrary::Concurrent::TaskPoolModule
56