161847f8eSopenharmony_ci/* 261847f8eSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 461847f8eSopenharmony_ci * you may not use this file except in compliance with the License. 561847f8eSopenharmony_ci * You may obtain a copy of the License at 661847f8eSopenharmony_ci * 761847f8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 861847f8eSopenharmony_ci * 961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and 1361847f8eSopenharmony_ci * limitations under the License. 1461847f8eSopenharmony_ci */ 1561847f8eSopenharmony_ci 1661847f8eSopenharmony_ci/** 1761847f8eSopenharmony_ci * @file 1861847f8eSopenharmony_ci * @kit PerformanceAnalysisKit 1961847f8eSopenharmony_ci */ 2061847f8eSopenharmony_ci 2161847f8eSopenharmony_ci/** 2261847f8eSopenharmony_ci * Provides APIs to implement call chain tracing throughout a service process. 2361847f8eSopenharmony_ci * With HiTrace, you can quickly obtain the run log for the call chain of a 2461847f8eSopenharmony_ci * specified service process and locate faults in cross-device, cross-process, 2561847f8eSopenharmony_ci * or cross-thread communications. 2661847f8eSopenharmony_ci * 2761847f8eSopenharmony_ci * @namespace hiTraceChain 2861847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 2961847f8eSopenharmony_ci * @since 8 3061847f8eSopenharmony_ci */ 3161847f8eSopenharmony_cideclare namespace hiTraceChain { 3261847f8eSopenharmony_ci /** 3361847f8eSopenharmony_ci * Enumerate trace flag 3461847f8eSopenharmony_ci * 3561847f8eSopenharmony_ci * @enum { number } 3661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 3761847f8eSopenharmony_ci * @since 8 3861847f8eSopenharmony_ci */ 3961847f8eSopenharmony_ci enum HiTraceFlag { 4061847f8eSopenharmony_ci /** 4161847f8eSopenharmony_ci * Default value 4261847f8eSopenharmony_ci * 4361847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 4461847f8eSopenharmony_ci * @since 8 4561847f8eSopenharmony_ci */ 4661847f8eSopenharmony_ci DEFAULT = 0, 4761847f8eSopenharmony_ci 4861847f8eSopenharmony_ci /** 4961847f8eSopenharmony_ci * Trace sync and async call. default: trace sync call only. 5061847f8eSopenharmony_ci * 5161847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 5261847f8eSopenharmony_ci * @since 8 5361847f8eSopenharmony_ci */ 5461847f8eSopenharmony_ci INCLUDE_ASYNC = 1, 5561847f8eSopenharmony_ci 5661847f8eSopenharmony_ci /** 5761847f8eSopenharmony_ci * Do not create child span. default: create child span. 5861847f8eSopenharmony_ci * 5961847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 6061847f8eSopenharmony_ci * @since 8 6161847f8eSopenharmony_ci */ 6261847f8eSopenharmony_ci DONOT_CREATE_SPAN = 1 << 1, 6361847f8eSopenharmony_ci 6461847f8eSopenharmony_ci /** 6561847f8eSopenharmony_ci * Output tracepoint info in span. default: do not output tracepoint info. 6661847f8eSopenharmony_ci * 6761847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 6861847f8eSopenharmony_ci * @since 8 6961847f8eSopenharmony_ci */ 7061847f8eSopenharmony_ci TP_INFO = 1 << 2, 7161847f8eSopenharmony_ci 7261847f8eSopenharmony_ci /** 7361847f8eSopenharmony_ci * Do not output begin and end info. default: output begin and end info. 7461847f8eSopenharmony_ci * 7561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 7661847f8eSopenharmony_ci * @since 8 7761847f8eSopenharmony_ci */ 7861847f8eSopenharmony_ci NO_BE_INFO = 1 << 3, 7961847f8eSopenharmony_ci 8061847f8eSopenharmony_ci /** 8161847f8eSopenharmony_ci * Do not add id to log. default: add id to log. 8261847f8eSopenharmony_ci * 8361847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 8461847f8eSopenharmony_ci * @since 8 8561847f8eSopenharmony_ci */ 8661847f8eSopenharmony_ci DISABLE_LOG = 1 << 4, 8761847f8eSopenharmony_ci 8861847f8eSopenharmony_ci /** 8961847f8eSopenharmony_ci * The trace is triggered by fault. 9061847f8eSopenharmony_ci * 9161847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 9261847f8eSopenharmony_ci * @since 8 9361847f8eSopenharmony_ci */ 9461847f8eSopenharmony_ci FAILURE_TRIGGER = 1 << 5, 9561847f8eSopenharmony_ci 9661847f8eSopenharmony_ci /** 9761847f8eSopenharmony_ci * Output device-to-device tracepoint info in span only. default: do not output device-to-device tracepoint info. 9861847f8eSopenharmony_ci * 9961847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 10061847f8eSopenharmony_ci * @since 8 10161847f8eSopenharmony_ci */ 10261847f8eSopenharmony_ci D2D_TP_INFO = 1 << 6 10361847f8eSopenharmony_ci } 10461847f8eSopenharmony_ci 10561847f8eSopenharmony_ci /** 10661847f8eSopenharmony_ci * Enumerate trace point type 10761847f8eSopenharmony_ci * 10861847f8eSopenharmony_ci * @enum { number } 10961847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 11061847f8eSopenharmony_ci * @since 8 11161847f8eSopenharmony_ci */ 11261847f8eSopenharmony_ci enum HiTraceTracepointType { 11361847f8eSopenharmony_ci /** 11461847f8eSopenharmony_ci * Client send 11561847f8eSopenharmony_ci * 11661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 11761847f8eSopenharmony_ci * @since 8 11861847f8eSopenharmony_ci */ 11961847f8eSopenharmony_ci CS = 0, 12061847f8eSopenharmony_ci 12161847f8eSopenharmony_ci /** 12261847f8eSopenharmony_ci * Client receive 12361847f8eSopenharmony_ci * 12461847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 12561847f8eSopenharmony_ci * @since 8 12661847f8eSopenharmony_ci */ 12761847f8eSopenharmony_ci CR = 1, 12861847f8eSopenharmony_ci 12961847f8eSopenharmony_ci /** 13061847f8eSopenharmony_ci * Server send 13161847f8eSopenharmony_ci * 13261847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 13361847f8eSopenharmony_ci * @since 8 13461847f8eSopenharmony_ci */ 13561847f8eSopenharmony_ci SS = 2, 13661847f8eSopenharmony_ci 13761847f8eSopenharmony_ci /** 13861847f8eSopenharmony_ci * Server receive 13961847f8eSopenharmony_ci * 14061847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 14161847f8eSopenharmony_ci * @since 8 14261847f8eSopenharmony_ci */ 14361847f8eSopenharmony_ci SR = 3, 14461847f8eSopenharmony_ci 14561847f8eSopenharmony_ci /** 14661847f8eSopenharmony_ci * General info 14761847f8eSopenharmony_ci * 14861847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 14961847f8eSopenharmony_ci * @since 8 15061847f8eSopenharmony_ci */ 15161847f8eSopenharmony_ci GENERAL = 4 15261847f8eSopenharmony_ci } 15361847f8eSopenharmony_ci 15461847f8eSopenharmony_ci /** 15561847f8eSopenharmony_ci * Enumerate trace communication mode 15661847f8eSopenharmony_ci * 15761847f8eSopenharmony_ci * @enum { number } 15861847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 15961847f8eSopenharmony_ci * @since 8 16061847f8eSopenharmony_ci */ 16161847f8eSopenharmony_ci enum HiTraceCommunicationMode { 16261847f8eSopenharmony_ci /** 16361847f8eSopenharmony_ci * Unspecified 16461847f8eSopenharmony_ci * 16561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 16661847f8eSopenharmony_ci * @since 8 16761847f8eSopenharmony_ci */ 16861847f8eSopenharmony_ci DEFAULT = 0, 16961847f8eSopenharmony_ci 17061847f8eSopenharmony_ci /** 17161847f8eSopenharmony_ci * Thread-to-thread 17261847f8eSopenharmony_ci * 17361847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 17461847f8eSopenharmony_ci * @since 8 17561847f8eSopenharmony_ci */ 17661847f8eSopenharmony_ci THREAD = 1, 17761847f8eSopenharmony_ci 17861847f8eSopenharmony_ci /** 17961847f8eSopenharmony_ci * Process-to-process 18061847f8eSopenharmony_ci * 18161847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 18261847f8eSopenharmony_ci * @since 8 18361847f8eSopenharmony_ci */ 18461847f8eSopenharmony_ci PROCESS = 2, 18561847f8eSopenharmony_ci 18661847f8eSopenharmony_ci /** 18761847f8eSopenharmony_ci * Device-to-device 18861847f8eSopenharmony_ci * 18961847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 19061847f8eSopenharmony_ci * @since 8 19161847f8eSopenharmony_ci */ 19261847f8eSopenharmony_ci DEVICE = 3 19361847f8eSopenharmony_ci } 19461847f8eSopenharmony_ci 19561847f8eSopenharmony_ci /** 19661847f8eSopenharmony_ci * Trace id, for tracing process. 19761847f8eSopenharmony_ci * 19861847f8eSopenharmony_ci * @interface HiTraceId 19961847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 20061847f8eSopenharmony_ci * @since 8 20161847f8eSopenharmony_ci */ 20261847f8eSopenharmony_ci interface HiTraceId { 20361847f8eSopenharmony_ci /** 20461847f8eSopenharmony_ci * Chain id. 20561847f8eSopenharmony_ci * 20661847f8eSopenharmony_ci * @type { bigint } 20761847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 20861847f8eSopenharmony_ci * @since 8 20961847f8eSopenharmony_ci */ 21061847f8eSopenharmony_ci chainId: bigint; 21161847f8eSopenharmony_ci 21261847f8eSopenharmony_ci /** 21361847f8eSopenharmony_ci * Span id. 21461847f8eSopenharmony_ci * 21561847f8eSopenharmony_ci * @type { ?number } 21661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 21761847f8eSopenharmony_ci * @since 8 21861847f8eSopenharmony_ci */ 21961847f8eSopenharmony_ci spanId?: number; 22061847f8eSopenharmony_ci 22161847f8eSopenharmony_ci /** 22261847f8eSopenharmony_ci * Parent span id. 22361847f8eSopenharmony_ci * 22461847f8eSopenharmony_ci * @type { ?number } 22561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 22661847f8eSopenharmony_ci * @since 8 22761847f8eSopenharmony_ci */ 22861847f8eSopenharmony_ci parentSpanId?: number; 22961847f8eSopenharmony_ci 23061847f8eSopenharmony_ci /** 23161847f8eSopenharmony_ci * Trace flag. 23261847f8eSopenharmony_ci * 23361847f8eSopenharmony_ci * @type { ?number } 23461847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 23561847f8eSopenharmony_ci * @since 8 23661847f8eSopenharmony_ci */ 23761847f8eSopenharmony_ci flags?: number; 23861847f8eSopenharmony_ci } 23961847f8eSopenharmony_ci 24061847f8eSopenharmony_ci /** 24161847f8eSopenharmony_ci * Start tracing a process impl. 24261847f8eSopenharmony_ci * 24361847f8eSopenharmony_ci * @param { string } name Process name. 24461847f8eSopenharmony_ci * @param { number } flags Trace function flag. 24561847f8eSopenharmony_ci * @returns { HiTraceId } Valid if first call, otherwise invalid. 24661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 24761847f8eSopenharmony_ci * @since 8 24861847f8eSopenharmony_ci */ 24961847f8eSopenharmony_ci function begin(name: string, flags?: number): HiTraceId; 25061847f8eSopenharmony_ci 25161847f8eSopenharmony_ci /** 25261847f8eSopenharmony_ci * Stop process tracing and clear trace id of current thread if the given trace 25361847f8eSopenharmony_ci * id is valid, otherwise do nothing. 25461847f8eSopenharmony_ci * 25561847f8eSopenharmony_ci * @param { HiTraceId } id The trace id that need to stop. 25661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 25761847f8eSopenharmony_ci * @since 8 25861847f8eSopenharmony_ci */ 25961847f8eSopenharmony_ci function end(id: HiTraceId): void; 26061847f8eSopenharmony_ci 26161847f8eSopenharmony_ci /** 26261847f8eSopenharmony_ci * Get trace id of current thread, and return a invalid trace id if no 26361847f8eSopenharmony_ci * trace id belong to current thread 26461847f8eSopenharmony_ci * 26561847f8eSopenharmony_ci * @returns { HiTraceId } Valid if current thread have a trace id, otherwise invalid. 26661847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 26761847f8eSopenharmony_ci * @since 8 26861847f8eSopenharmony_ci */ 26961847f8eSopenharmony_ci function getId(): HiTraceId; 27061847f8eSopenharmony_ci 27161847f8eSopenharmony_ci /** 27261847f8eSopenharmony_ci * Set id as trace id of current thread. Do nothing if id is invalid. 27361847f8eSopenharmony_ci * 27461847f8eSopenharmony_ci * @param { HiTraceId } id Set id as trace id of current thread. 27561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 27661847f8eSopenharmony_ci * @since 8 27761847f8eSopenharmony_ci */ 27861847f8eSopenharmony_ci function setId(id: HiTraceId): void; 27961847f8eSopenharmony_ci 28061847f8eSopenharmony_ci /** 28161847f8eSopenharmony_ci * Clear trace id of current thread and set it invalid. 28261847f8eSopenharmony_ci * 28361847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 28461847f8eSopenharmony_ci * @since 8 28561847f8eSopenharmony_ci */ 28661847f8eSopenharmony_ci function clearId(): void; 28761847f8eSopenharmony_ci 28861847f8eSopenharmony_ci /** 28961847f8eSopenharmony_ci * Create a new span id according to the trace id of current thread. 29061847f8eSopenharmony_ci * 29161847f8eSopenharmony_ci * @returns { HiTraceId } A valid span trace id. Otherwise trace id of current thread if do not allow create span. 29261847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 29361847f8eSopenharmony_ci * @since 8 29461847f8eSopenharmony_ci */ 29561847f8eSopenharmony_ci function createSpan(): HiTraceId; 29661847f8eSopenharmony_ci 29761847f8eSopenharmony_ci /** 29861847f8eSopenharmony_ci * Print hitrace info, include trace id info. 29961847f8eSopenharmony_ci * 30061847f8eSopenharmony_ci * @param { HiTraceCommunicationMode } mode Trace communication mode. 30161847f8eSopenharmony_ci * @param { HiTraceTracepointType } type Trace info type. 30261847f8eSopenharmony_ci * @param { HiTraceId } id Trace id that need to print. 30361847f8eSopenharmony_ci * @param { string } msg Customized info that need to print. 30461847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 30561847f8eSopenharmony_ci * @since 8 30661847f8eSopenharmony_ci */ 30761847f8eSopenharmony_ci function tracepoint(mode: HiTraceCommunicationMode, type: HiTraceTracepointType, id: HiTraceId, msg?: string): void; 30861847f8eSopenharmony_ci 30961847f8eSopenharmony_ci /** 31061847f8eSopenharmony_ci * Judge whether the trace id is valid or not. 31161847f8eSopenharmony_ci * 31261847f8eSopenharmony_ci * @param { HiTraceId } id Trace id that need to judge. 31361847f8eSopenharmony_ci * @returns { boolean } True for a valid trace id, otherwise false. 31461847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 31561847f8eSopenharmony_ci * @since 8 31661847f8eSopenharmony_ci */ 31761847f8eSopenharmony_ci function isValid(id: HiTraceId): boolean; 31861847f8eSopenharmony_ci 31961847f8eSopenharmony_ci /** 32061847f8eSopenharmony_ci * Judge whether the trace id has enabled a trace flag or not. 32161847f8eSopenharmony_ci * 32261847f8eSopenharmony_ci * @param { HiTraceId } id Trace id that need to judge. 32361847f8eSopenharmony_ci * @param { HiTraceFlag } flag Trace flag that need to judge. 32461847f8eSopenharmony_ci * @returns { boolean } true if the trace id has enabled the flag. 32561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 32661847f8eSopenharmony_ci * @since 8 32761847f8eSopenharmony_ci */ 32861847f8eSopenharmony_ci function isFlagEnabled(id: HiTraceId, flag: HiTraceFlag): boolean; 32961847f8eSopenharmony_ci 33061847f8eSopenharmony_ci /** 33161847f8eSopenharmony_ci * Enable the designative trace flag for the trace id. 33261847f8eSopenharmony_ci * 33361847f8eSopenharmony_ci * @param { HiTraceId } id Trace id that need to enable a flag. 33461847f8eSopenharmony_ci * @param { HiTraceFlag } flag the designative trace flag that need to be enabled in the trace id. 33561847f8eSopenharmony_ci * @syscap SystemCapability.HiviewDFX.HiTrace 33661847f8eSopenharmony_ci * @since 8 33761847f8eSopenharmony_ci */ 33861847f8eSopenharmony_ci function enableFlag(id: HiTraceId, flag: HiTraceFlag): void; 33961847f8eSopenharmony_ci} 34061847f8eSopenharmony_ci 34161847f8eSopenharmony_ciexport default hiTraceChain; 342