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     if (taskInnerRunner_ != nullptr) {
29         CloseHelp::DeletePointer(taskInnerRunner_, false);
30     }
31 }
32 
Run()33 void TaskRunner::TaskInnerRunner::Run()
34 {
35     if (LIKELY(runner_ != nullptr)) {
36         runner_->Run();
37     } else { // LCOV_EXCL_BR_LINE
38         HILOG_FATAL("taskpool:: runner_ is null");
39     }
40 }
41 
TaskInnerRunner(const TaskRunner* runner)42 TaskRunner::TaskInnerRunner::TaskInnerRunner(const TaskRunner* runner) : runner_(runner) {}
43 
Run() const44 void TaskRunner::Run() const
45 {
46     if (LIKELY(callback_.callback != nullptr)) {
47         callback_.callback(callback_.data);
48     } else { // LCOV_EXCL_BR_LINE
49         HILOG_FATAL("taskpool:: callback_.callback is null");
50     }
51 }
52 
Execute()53 bool TaskRunner::Execute()
54 {
55     taskInnerRunner_ = new TaskInnerRunner(this);
56     return taskInnerRunner_->Start();
57 }
58 } // namespace Commonlibrary::Concurrent::TaskPoolModule
59