# Performance Tracing
>![](../../public_sys-resources/icon-note.gif) **NOTE:**
>The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version.
## Modules to Import
```
import bytrace from '@ohos.bytrace';
```
## Required Permissions
None
## bytrace.startTrace
startTrace\(name: string, taskId: number, expectedTime?: number\): void
Starts a trace of a task. **expectedTime** is an optional parameter, which specifies the expected duration of the trace.
- Parameters
Name
|
Type
|
Mandatory
|
Description
|
name
|
string
|
Yes
|
Name of the trace task to start.
|
taskId
|
number
|
Yes
|
Task ID.
|
expectedTime
|
number
|
No
|
Expected duration of the trace, in ms.
|
>![](../../public_sys-resources/icon-note.gif) **NOTE:**
>If multiple trace tasks with the same name need to be performed at the same time or a trace task needs to be performed multiple times concurrently, different **taskId**s must be specified in **startTrace**. If the trace tasks with the same name are not performed at the same time, the same **taskId** can be used. For details, see the **bytrace.finishTrace** example.
- Example
```
bytrace.startTrace("myTestFunc", 1);
bytrace.startTrace("myTestFunc", 1, 5); // The expected duration of the trace is 5 ms.
```
## bytrace.finishTrace
finishTrace\(name: string, taskId: number\): void
Stops a trace task.
- Parameters
Name
|
Type
|
Mandatory
|
Description
|
name
|
string
|
Yes
|
Name of the trace task to stop.
|
taskId
|
number
|
Yes
|
Task ID.
|
>![](../../public_sys-resources/icon-note.gif) **NOTE:**
>To stop a trace task, the values of **name** and **taskId** in **finishTrace** must be the same as those in **startTrace**.
- Example
```
bytrace.finishTrace("myTestFunc", 1);
```
```
// Start track tasks with the same name concurrently.
bytrace.startTrace("myTestFunc", 1);
...... // Service flow
bytrace.startTrace ("myTestFunc", 2); // The second trace task starts while the first task is still running. The first and second tasks have the same name but different task IDs.
...... // Service flow
bytrace.finishTrace("myTestFunc", 1);
...... // Service flow
bytrace.finishTrace("myTestFunc", 2);
```
```
// Start track tasks with the same name at different times.
bytrace.startTrace("myTestFunc", 1);
...... // Service flow
bytrace.finishTrace("myTestFunc", 1); // The first trace task ends.
...... // Service flow
bytrace.startTrace("myTestFunc", 1); // The second trace task starts after the first task ends. The two tasks have the same name and task ID.
...... // Service flow
bytrace.finishTrace("myTestFunc", 1);
```
## bytrace.traceByValue
traceByValue\(name: string, value: number\): void
Traces the value changes of a variable.
- Parameters
Name
|
Type
|
Mandatory
|
Description
|
name
|
string
|
Yes
|
Name of the variable to trace.
|
value
|
number
|
Yes
|
Value of the variable to trace.
|
- Example
```
let traceCount = 3;
bytrace.traceByValue("myTestCount", traceCount);
......
traceCount = 5;
bytrace.traceByValue("myTestCount", traceCount);
```