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 "anr_thread.h" 17 18 #include "flutter/fml/thread.h" 19 20 namespace OHOS::Ace { 21 22 namespace { 23 std::unique_ptr<fml::Thread> g_anrThread; 24 } // namespace 25 Start()26void AnrThread::Start() 27 { 28 if (!g_anrThread) { 29 g_anrThread = std::make_unique<fml::Thread>("anr"); 30 } 31 } 32 Stop()33void AnrThread::Stop() 34 { 35 g_anrThread.reset(); 36 } 37 PostTaskToTaskRunner(Task && task,uint32_t delayTime)38bool AnrThread::PostTaskToTaskRunner(Task&& task, uint32_t delayTime) 39 { 40 if (!g_anrThread || !task) { 41 return false; 42 } 43 44 auto anrTaskRunner = g_anrThread->GetTaskRunner(); 45 if (delayTime > 0) { 46 anrTaskRunner->PostDelayedTask(std::move(task), fml::TimeDelta::FromSeconds(delayTime)); 47 } else { 48 anrTaskRunner->PostTask(std::move(task)); 49 } 50 return true; 51 } 52 } // namespace OHOS::Ace 53