• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #include "c/ffrt_watchdog.h"
16 #include "internal_inc/osal.h"
17 #include "dfx/bbox/bbox.h"
18 
19 namespace ffrt {
20 constexpr uint32_t DEFAULT_TIMEOUT_MS = 30000;
21 struct WatchdogCfg {
Instanceffrt::WatchdogCfg22     static inline WatchdogCfg* Instance()
23     {
24         static WatchdogCfg inst;
25         return &inst;
26     }
27 
28     uint32_t timeout = DEFAULT_TIMEOUT_MS;
29     uint32_t interval = DEFAULT_TIMEOUT_MS;
30     ffrt_watchdog_cb callback = nullptr;
31 };
32 }
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 API_ATTRIBUTE((visibility("default")))
ffrt_watchdog_dumpinfo(char * buf,uint32_t len)38 void ffrt_watchdog_dumpinfo(char *buf, uint32_t len)
39 {
40     if (FFRTIsWork()) {
41         std::string dumpInfo;
42         dumpInfo += SaveTaskCounterInfo();
43         dumpInfo += SaveWorkerStatusInfo();
44         dumpInfo += SaveReadyQueueStatusInfo();
45         dumpInfo += SaveTaskStatusInfo();
46         snprintf(buf, len, "%s", dumpInfo.c_str());
47     } else {
48         snprintf(buf, len, "%s", "FFRT has done all tasks!");
49     }
50 }
51 
52 API_ATTRIBUTE((visibility("default")))
ffrt_watchdog_register(ffrt_watchdog_cb cb,uint32_t timeout_ms,uint32_t interval_ms)53 void ffrt_watchdog_register(ffrt_watchdog_cb cb, uint32_t timeout_ms, uint32_t interval_ms)
54 {
55     ffrt::WatchdogCfg::Instance()->callback = cb;
56     ffrt::WatchdogCfg::Instance()->timeout = timeout_ms;
57     ffrt::WatchdogCfg::Instance()->interval = interval_ms;
58 }
59 
60 API_ATTRIBUTE((visibility("default")))
ffrt_watchdog_get_cb(void)61 ffrt_watchdog_cb ffrt_watchdog_get_cb(void)
62 {
63     return ffrt::WatchdogCfg::Instance()->callback;
64 }
65 
66 API_ATTRIBUTE((visibility("default")))
ffrt_watchdog_get_timeout(void)67 uint32_t ffrt_watchdog_get_timeout(void)
68 {
69     return ffrt::WatchdogCfg::Instance()->timeout;
70 }
71 
72 API_ATTRIBUTE((visibility("default")))
ffrt_watchdog_get_interval(void)73 uint32_t ffrt_watchdog_get_interval(void)
74 {
75     return ffrt::WatchdogCfg::Instance()->interval;
76 }
77 #ifdef __cplusplus
78 }
79 #endif
80