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)13PlatformTaskRunnerAdapter::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)24void PlatformTaskRunnerAdapter::PostTask(fml::closure task) 25 { 26 eventHandler_->PostTask(std::move(task)); 27 } 28 PostTaskForTime(fml::closure task,fml::TimePoint target_time)29void 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)34void PlatformTaskRunnerAdapter::PostDelayedTask(fml::closure task, fml::TimeDelta delay) 35 { 36 eventHandler_->PostTask(std::move(task), delay.ToMilliseconds()); 37 } 38 RunsTasksOnCurrentThread()39bool PlatformTaskRunnerAdapter::RunsTasksOnCurrentThread() 40 { 41 return eventRunner_->IsCurrentRunnerThread(); 42 } 43 GetTaskQueueId()44fml::TaskQueueId PlatformTaskRunnerAdapter::GetTaskQueueId() 45 { 46 return fml::_kUnmerged; 47 } 48 CurrentTaskRunner(bool useCurrentEventRunner)49fml::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