自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OpenHarmony源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明

系統(tǒng)
DFX(Design for X)子系統(tǒng)是為了提升軟件質(zhì)量設(shè)計(jì)的工具集,目前包含的內(nèi)容主要有:DFR(Design for Reliability,可靠性)和DFT(Design for Testability,可測試性)特性。

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

1 DFX簡介

DFX(Design for X)子系統(tǒng)是為了提升軟件質(zhì)量設(shè)計(jì)的工具集,目前包含的內(nèi)容主要有:DFR(Design for Reliability,可靠性)和DFT(Design for Testability,可測試性)特性。

目前標(biāo)準(zhǔn)系統(tǒng)已實(shí)現(xiàn)以下功能:

  • HiLog:流水日志。
  • HiSysEvent:系統(tǒng)事件記錄接口。
  • HiView:插件平臺(tái)。
  • FaultLoggerd:應(yīng)用故障訂閱和收集。
  • HiAppEvent: js應(yīng)用事件記錄接口。

1.1 OpenHarmony架構(gòu)圖

OpenHarmony 源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明-鴻蒙HarmonyOS技術(shù)社區(qū)

注:本文只介紹DFX各組件的使用,后續(xù)會(huì)有文章單獨(dú)分析各組件的源碼。

2 Hilog

HiLog是日志系統(tǒng),提供給系統(tǒng)框架、服務(wù)、以及應(yīng)用打印日志,記錄用戶操作、系統(tǒng)運(yùn)行狀態(tài)等。

用戶態(tài)Process通過日志接口將日志內(nèi)容寫入hilogd buffer中,用戶態(tài)的hilog工具支持將日志輸出到控制臺(tái)(console)進(jìn)行查看,同時(shí)也支持通過hilog工具給hilogd發(fā)送命令將日志落盤,設(shè)置指定日志類型緩沖區(qū)的大小等。

HiLog架構(gòu)圖如下:

注:目前代碼暫未看到有支持讀取kernel日志。

代碼結(jié)構(gòu):

  1. /base/hiviewdfx/hilog 
  2. ├── frameworks           # 框架代碼 
  3. │   └── native          # HiLog native實(shí)現(xiàn)代碼 
  4. ├── interfaces           # 接口 
  5. │   └── native          # 對(duì)外C/C++接口 
  6. │       └── innerkits   # 對(duì)內(nèi)部子系統(tǒng)暴露的頭文件 
  7. │       └── kits        # 對(duì)應(yīng)用暴露的頭文件 
  8. ├── services 
  9. │   └── hilogd          # 日志常駐服務(wù)實(shí)現(xiàn) 
  10. │   └── hilogtool       # 日志工具實(shí)現(xiàn) 

從使用者的角度,只需要關(guān)心hilog日志接口和hilog命令行工具的使用方法。

2.1 hilog接口使用說明

2.1.1 主要API說明

OpenHarmony 源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明-鴻蒙HarmonyOS技術(shù)社區(qū)

2.1.2 使用方法

在模塊BUILD.gn文件中添加依賴

  1. external_deps = [ "hilog_native:libhilog" ] 
  • include頭文件"hilog/log.h"
  • 接口調(diào)用

代碼示例(以下代碼從系統(tǒng)源碼中摘錄)

  1. #include <vector> 
  2. +#include "hilog/log.h" 
  3. #include "string_ex.h" 
  4. #include "uri.h" 
  5.  
  6. using std::string; 
  7. using std::regex; 
  8. +using OHOS::HiviewDFX::HiLog; 
  9.  
  10. namespace OHOS { 
  11. namespace { 
  12. @@ -39,6 +41,7 @@ namespace { 
  13.     const size_t POS_INC_MORE = 2; 
  14.     const size_t POS_INC_AGAIN = 3; 
  15.     const regex SCHEME_REGEX("[a-zA-Z][a-zA-Z|\\d|+|-|.]*$"); 
  16. +    const HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001800, "URI"}; 
  17. }; // namespace 
  18.  
  19. Uri::Uri(const string& uriString) 
  20. @@ -48,6 +51,7 @@ Uri::Uri(const string& uriString) 
  21.     port_ = NOT_CALCULATED; 
  22.  
  23.     if (uriString.empty()) { 
  24. +        HiLog::Error(LABEL, "Input empty!"); 
  25.         return
  26.     } 

2.2 hilog命令行工具使用說明

注:落盤日志文件保存路徑為"/data/log/hilog/"。

3 HiSysEvent

hisysevent組件定義了HiSysEvent埋點(diǎn)接口供應(yīng)用框架、系統(tǒng)服務(wù)使用,用于向hiview上報(bào)系統(tǒng)事件信息。通過在關(guān)鍵路徑埋點(diǎn)記錄系統(tǒng)在運(yùn)行過程中的重要信息,輔助開發(fā)者定位問題。

OpenHarmony 源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明-鴻蒙HarmonyOS技術(shù)社區(qū)

3.1 接口說明

  1. /** 
  2.      * @brief 寫系統(tǒng)事件 
  3.      * @param domain    事件的domain 
  4.      * @param eventName 事件名 
  5.      * @param type      事件類型 
  6.      * @param keyValues 可變參數(shù),鍵值對(duì) 
  7.      * @return 0 成功,其他失敗 
  8.      */ 
  9.     template<typename... Types> static int Write(const std::string &domain, const std::string &eventName, 
  10.         EventType type, Types... keyValues) 

 枚舉類型EventType定義了事件類型

  1. enum EventType { 
  2.         FAULT     = 1,    // system fault event 
  3.         STATISTIC = 2,    // system statistic event 
  4.         SECURITY  = 3,    // system security event 
  5.         BEHAVIOR  = 4     // system behavior event 
  6.     }; 

 HiSysEvent內(nèi)部類Domain中定義了一些字符串常量,用于表示不同的domain

3.2 接口使用

在BUILD.gn中增加依賴:

  1. external_deps = [ "hisysevent_native:libhisysevent" ] 

 在類定義頭文件或者類實(shí)現(xiàn)源文件中,包含HiSysEvent頭文件:

  1. #include "hisysevent.h" 

 示例:(以下代碼摘自源碼)

  1. void EventReport::SendEvent(const EventInfo& eventInfo) 
  2.     auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 
  3.     if (packageName.size() > MAX_PACKAGE_NAME_LENGTH) { 
  4.         StrTrim(packageName); 
  5.     } 
  6.     OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType, 
  7.         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 
  8.         EVENT_KEY_ERROR_TYPE, eventInfo.errorType, 
  9.         EVENT_KEY_PACKAGE_NAME, packageName); 

 hiview在收到消息后會(huì)打印日志,并把事件保存到

/data/log/LogService/sys_event_db/hisysevent.db 數(shù)據(jù)庫中。

日志如下:

  1. 行 10430: 12-06 15:41:03.176   369   537 D 02d10/HiView-EventServer: Start: receive data from client <private> 
  2. 行 10431: 12-06 15:41:03.176   369   537 D 02d10/HiView-SysEventSource: Parser: parser raw message size=301, {"domain_":"ACE","name_":"JS_ERROR","type_":1,"time_":1638805263175,"pid_":821,"tid_":839,"PACKAGE_NAME":"","REASON":"Js Crash","SUMMARY":"Lifetime: 0.000000s 
  3. 行 10432: 12-06 15:41:03.176   369   537 D 02d10/HiView-SysEventSource: Js-Engine: Quick JS 
  4. 行 10433: 12-06 15:41:03.176   369   537 D 02d10/HiView-SysEventSource: Stacktrace: TypeError: cannot read property 'getAppPageStartConfig' of undefined 
  5. 行 10434: 12-06 15:41:03.176   369   537 D 02d10/HiView-SysEventSource:     at onPageShow (pages/EntryView.js) 
  6. 行 10435: 12-06 15:41:03.176   369   537 D 02d10/HiView-SysEventSource:     at onPageShow (pages/EntryView.js) 
  7. 行 10472: 12-06 15:41:03.180   369   537 I 02d10/HiView-SysEventSource: Parser: parser result domain_=ACE eventName_=JS_ERROR 
  8. 行 10473: 12-06 15:41:03.180   369   537 D 02d10/HiView-EventSource: PublishPipelineEvent: EventSource PublishPipelineEvent 
  9. 行 10474: 12-06 15:41:03.180   369   547 I 02d10/HiView-SysEventService: Convert2SysEvent: domain is ACE, eventName is JS_ERROR. 
  10. 行 10485: 12-06 15:41:03.180   369   547 D 02d10/HiView-SysEventDao: Insertinsert db file /data/log/LogService/sys_event_db/hisysevent.db with JS_ERROR 
  11. 行 10837: 12-06 15:41:03.232   369   547 I 02d10/HiView-DOCDB: open ejdb success 
  12. 行 10838: 12-06 15:41:03.232   369   547 I 02d10/HiView-DOCDB: open doc store 
  13. 行 11141: 12-06 15:41:03.249   369   547 D 02d10/HiView-DOCDB: put data to doc store success 
  14. 行 11142: 12-06 15:41:03.250   369   547 D 02d10/HiView-SysEventDbMgr: SaveToStore: save sys event 1, JS_ERROR 
  15. 行 11227: 12-06 15:41:03.253   369   547 I 02d10/Faultlogger: AddFaultLogIfNeed: Invalid module name 
  16. 行 11229: 12-06 15:41:03.253   369   547 I 02d10/HiView-SysEventSource: Recycle: recycle resource 

4 HiView

Hiview是一個(gè)跨平臺(tái)的終端設(shè)備維測服務(wù)集。目前開源部分僅包含插件管理平臺(tái)和系統(tǒng)事件源。

架構(gòu)圖如下:

OpenHarmony 源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明-鴻蒙HarmonyOS技術(shù)社區(qū)

Hiview由框架和插件組成,主要包含以下幾部分:

  • 操作系統(tǒng)適配層(adapter),對(duì)使用的系統(tǒng)服務(wù)的接口進(jìn)行適配。
  • Hiview基礎(chǔ)定義(hiview base),包括插件基類、管道的定義,事件、事件隊(duì)列定義以及一些工具類。
  • Hiview的核心模塊(hiview core),包括插件配置,插件管理以及事件源。
  • Hiview服務(wù)(hiview services),目前僅包括hiview運(yùn)行信息dump功能。
  • Hiview插件(plugins),為獨(dú)立功能的業(yè)務(wù)模塊。
  • Hiview維測服務(wù)是由事件驅(qū)動(dòng)的,其核心為分布在系統(tǒng)各處的HiSysEvent樁點(diǎn)。

格式化的事件通過HiSysEvent API上報(bào)至hiview進(jìn)行處理,請(qǐng)參考第三節(jié)HiSysEvent的架構(gòu)圖。

1.應(yīng)用框架、系統(tǒng)服務(wù)使用HiSysEvent組件上報(bào)系統(tǒng)事件。

2.Hiview中SysEventSource獲取消息,解析并組裝成管道事件分發(fā)給插件處理。

注:hiview目前并未對(duì)外提供接口。

5 FaultLoggerd

faultloggerd是OpenHarmony中的C/C++運(yùn)行時(shí)崩潰臨時(shí)日志的生成及管理模塊。主要流程如下:

進(jìn)程A調(diào)用接口訂閱故障收集功能。

進(jìn)程A的異常信號(hào)處理器檢測到異常信號(hào)后Fork出子進(jìn)程運(yùn)行processdump程序。

processdump程序Ptrace到父進(jìn)程上,讀取異常線程相關(guān)信息,包括寄存器以及調(diào)用棧。

processdump程序在讀取異常信息后將其寫入到/data/log/faultlog/temp目錄下中做臨時(shí)存儲(chǔ)。

接口使用方法:

在模塊的BUILD.gn文件中添加依賴

  1. deps = ["//base/hiviewdfx/faultloggerd/interfaces/innerkits/signal_handler:dfx_signalhandler"
  • 包含"dfx_signal_handler.h"頭文件
  • 調(diào)用DFX_InstallSignalHandler()方法訂閱故障收集功能。

示例:(以下代碼摘自源碼)

base/telephony/ril_adapter/hril_hdf/hril_hdf.c中

  1. #include "hril_hdf.h" 
  2. #include <pthread.h> 
  3. #include "dfx_signal_handler.h" //................[1]頭文件 
  4. #include "telephony_log_c.h" 
  5.  
  6. static int32_t RilAdapterInit(struct HdfDeviceObject *device) 
  7.     if (device == NULL) { 
  8.         return HDF_ERR_INVALID_OBJECT; 
  9.     } 
  10.     DFX_InstallSignalHandler(); //................[2]訂閱故障收集功能 
  11.     struct HdfSBuf *sbuf = HdfSBufTypedObtain(SBUF_IPC); 
  12.     if (sbuf == NULL) { 
  13.         TELEPHONY_LOGE("HdfSampleDriverBind, failed to obtain ipc sbuf"); 
  14.         return HDF_ERR_INVALID_OBJECT; 
  15.     } 
  16.     if (!HdfSbufWriteString(sbuf, "string")) { 
  17.         TELEPHONY_LOGE("HdfSampleDriverBind, failed to write string to ipc sbuf"); 
  18.         HdfSBufRecycle(sbuf); 
  19.         return HDF_FAILURE; 
  20.     } 
  21.     if (sbuf != NULL) { 
  22.         HdfSBufRecycle(sbuf); 
  23.     } 
  24.     TELEPHONY_LOGD("sbuf IPC obtain test success!"); 
  25.     LoadVendor(); 
  26.     return HDF_SUCCESS; 

注:程序崩潰后會(huì)在/data/log/faultlog/temp路徑下生成臨時(shí)文件。系統(tǒng)開發(fā)者可以通過日志定位崩潰問題。

6 HiAppEvent

HiAppEvent為JS應(yīng)用提供事件打點(diǎn)接口,用于幫助應(yīng)用記錄在運(yùn)行過程中發(fā)生的故障信息、統(tǒng)計(jì)信息、安全信息、用戶行為信息,以支撐開發(fā)者分析應(yīng)用的運(yùn)行情況。

OpenHarmony 源碼解析之DFX子系統(tǒng)-標(biāo)準(zhǔn)系統(tǒng)接口使用說明-鴻蒙HarmonyOS技術(shù)社區(qū)

6.1 接口說明

js接口定義文件:interface/sdk-js/api/phone/@ohos.hiAppEvent.d.ts

6.1.1 打點(diǎn)接口

JS 事件類型枚舉——EventType

| 類型 | 描述|

| ----- | ----- |

| FAULT | 故障類型事件 |

| STATISTIC | 統(tǒng)計(jì)類型事件 |

| SECURITY | 安全類型事件 |

| BEHAVIOR | 行為類型事件 |

function write(eventName: string, eventType: EventType, keyValues: object): Promise; 應(yīng)用事件異步打點(diǎn)方法,使用promise方式作為異步回調(diào)。

function write(string eventName, EventType type, object keyValues,

AsyncCallback callback): void 應(yīng)用事件異步打點(diǎn)方法,使用callback方式作為異步回調(diào)。

輸入?yún)?shù)說明:

  • eventName:事件名稱。
  • eventType:事件類型。
  • keyValues:事件參數(shù)鍵值對(duì),為Json對(duì)象類型。
  • callback:回調(diào)函數(shù),可以在回調(diào)函數(shù)中處理接口返回值。返回值為0表示事件參數(shù)校驗(yàn)成功,事件正常異步寫入事件文件;大于0表示事件存在異常參數(shù),事件在忽略異常參數(shù)后再異步寫入事件文件;小于0表示事件校驗(yàn)失敗,不執(zhí)行事件異步打點(diǎn)操作。

6.1.2 打點(diǎn)配置接口

function configure(config: ConfigOption): boolean;應(yīng)用事件打點(diǎn)配置方法,可以對(duì)打點(diǎn)功能進(jìn)行自定義配置。

參數(shù)config:應(yīng)用事件打點(diǎn)配置項(xiàng)。

返回值:boolean,true表示配置成功,false表示配置失敗。

ConfigOption應(yīng)用打點(diǎn)配置選項(xiàng)

| 配置名 | 類型|必填 |說明|

| ----- | ----- |----- | ----- |

| disable | boolean |否|應(yīng)用打點(diǎn)功能開關(guān),true表示關(guān)閉打點(diǎn)功能,false表示不關(guān)閉打點(diǎn)功能|

| maxStorage | string |否|打點(diǎn)數(shù)據(jù)本地存儲(chǔ)文件所在目錄的配額大小,默認(rèn)限額為“10M”。所在目錄大小超出限額后會(huì)對(duì)目錄進(jìn)行清理操作,會(huì)按從舊到新的順序逐個(gè)刪除打點(diǎn)數(shù)據(jù)文件,直到目錄大小不超出限額時(shí)停止。|

6.2 接口使用

引入模塊:

  1. import hiAppEvent from ‘@ohos.hiAppEvent’ 

應(yīng)用事件打點(diǎn):

callback方式

  1. hiAppEvent.write("testevent", hiAppEvent.EventType.BEHAVIOR, {"key":"value"}, 
  2.           (err, value) => { 
  3.               console.log(`HiAppEvent testevent callback`); 
  4.               if (err) { 
  5.                   // 事件寫入異常:事件存在異常參數(shù)或者事件校驗(yàn)失敗不執(zhí)行寫入 
  6.                   console.error(`HiAppEvent json-callback-error code=${err.code}`); 
  7.               } else { 
  8.                   console.log(`HiAppEvent json-callback-success value=${value}`) 
  9.               } 
  10.           }); 

 Promise方式

  1. hiAppEvent.write("test_event", hiAppEvent.EventType.FAULT, {"int_data":100, "str_data":"strValue"}) 
  2.   .then((value) => { 
  3.       // 事件寫入正常 
  4.       console.log(`success to write event: ${value}`); 
  5.   }).catch((err) => { 
  6.       // 事件寫入異常:事件存在異常參數(shù)或者事件校驗(yàn)失敗不執(zhí)行寫入 
  7.       console.error(`failed to write event because ${err.code}`); 
  8.   }); 

 應(yīng)用打點(diǎn)配置

配置應(yīng)用事件打點(diǎn)功能開關(guān)

  1. hiAppEvent.configure({ 
  2.      disable: true 
  3. }); 

配置事件文件目錄存儲(chǔ)限額大小

  1. hiAppEvent.configure({ 
  2.      maxStorage: '15M' 
  3. }); 

7 總結(jié)

本文對(duì)標(biāo)準(zhǔn)系統(tǒng)目前已支持的DFX功能模塊進(jìn)行了介紹。demo請(qǐng)下載附件。

https://harmonyos.51cto.com/resource/1646

https://harmonyos.51cto.com/resource/1647

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-01-10 15:30:11

鴻蒙HarmonyOS應(yīng)用

2023-04-12 15:31:11

系統(tǒng)服務(wù)管理鴻蒙

2022-01-06 16:17:58

鴻蒙HarmonyOS應(yīng)用

2022-02-17 20:57:07

OpenHarmon操作系統(tǒng)鴻蒙

2021-12-17 16:42:09

鴻蒙HarmonyOS應(yīng)用

2021-09-18 14:40:37

鴻蒙HarmonyOS應(yīng)用

2021-11-08 15:04:47

鴻蒙HarmonyOS應(yīng)用

2021-11-18 10:28:03

鴻蒙HarmonyOS應(yīng)用

2022-05-10 11:17:27

電話子系統(tǒng)數(shù)據(jù)服務(wù)模塊

2022-09-15 14:56:12

GDB調(diào)試鴻蒙

2022-05-24 15:46:51

Wi-FiSTA模式

2021-09-13 15:15:18

鴻蒙HarmonyOS應(yīng)用

2023-04-06 09:14:11

多模輸入子系統(tǒng)鴻蒙

2023-06-28 15:00:02

開源鴻蒙輸入系統(tǒng)架構(gòu)

2022-10-12 15:14:08

開機(jī)動(dòng)畫鴻蒙

2022-04-02 20:45:04

Hi3516開發(fā)板操作系統(tǒng)鴻蒙

2021-09-17 14:38:58

鴻蒙HarmonyOS應(yīng)用

2023-12-29 08:45:40

Python3.8鴻蒙解釋器

2021-07-19 15:34:05

鴻蒙HarmonyOS應(yīng)用

2023-02-01 16:28:30

Linux內(nèi)核鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)