• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 // 2021.4.30 platform task runner adapt ohos.
5 //           Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
6 
7 #include "flutter/shell/platform/ohos/platform_task_runner_adapter.h"
8 
9 namespace flutter {
10 
11 fml::RefPtr<fml::TaskRunner> PlatformTaskRunnerAdapter::taskRunner_;
12 
PlatformTaskRunnerAdapter(bool useCurrentEventRunner)13 PlatformTaskRunnerAdapter::PlatformTaskRunnerAdapter(bool useCurrentEventRunner)
14     : fml::TaskRunner(nullptr)
15 {
16     if (useCurrentEventRunner) {
17         eventRunner_ = OHOS::AppExecFwk::EventRunner::Current();
18     } else {
19         eventRunner_ = OHOS::AppExecFwk::EventRunner::GetMainEventRunner();
20     }
21     eventHandler_ = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner_);
22 }
23 
PostTask(fml::closure task)24 void PlatformTaskRunnerAdapter::PostTask(fml::closure task)
25 {
26     eventHandler_->PostTask(std::move(task));
27 }
28 
PostTaskForTime(fml::closure task,fml::TimePoint target_time)29 void PlatformTaskRunnerAdapter::PostTaskForTime(fml::closure task, fml::TimePoint target_time)
30 {
31     eventHandler_->PostTimingTask(std::move(task), target_time.ToEpochDelta().ToMilliseconds(), "");
32 }
33 
PostDelayedTask(fml::closure task,fml::TimeDelta delay)34 void PlatformTaskRunnerAdapter::PostDelayedTask(fml::closure task, fml::TimeDelta delay)
35 {
36     eventHandler_->PostTask(std::move(task), delay.ToMilliseconds());
37 }
38 
RunsTasksOnCurrentThread()39 bool PlatformTaskRunnerAdapter::RunsTasksOnCurrentThread()
40 {
41     return eventRunner_->IsCurrentRunnerThread();
42 }
43 
GetTaskQueueId()44 fml::TaskQueueId PlatformTaskRunnerAdapter::GetTaskQueueId()
45 {
46     return fml::_kUnmerged;
47 }
48 
CurrentTaskRunner(bool useCurrentEventRunner)49 fml::RefPtr<fml::TaskRunner> PlatformTaskRunnerAdapter::CurrentTaskRunner(bool useCurrentEventRunner)
50 {
51     if (useCurrentEventRunner) {
52         return fml::MakeRefCounted<PlatformTaskRunnerAdapter>(useCurrentEventRunner);
53     }
54     if (taskRunner_) {
55         return taskRunner_;
56     }
57     taskRunner_ = fml::MakeRefCounted<PlatformTaskRunnerAdapter>(useCurrentEventRunner);
58     return taskRunner_;
59 }
60 
61 }  // namespace flutter