xref: /aosp_15_r20/frameworks/base/tools/dump-coverage/README.md (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1*d57664e9SAndroid Build Coastguard Worker# dumpcoverage
2*d57664e9SAndroid Build Coastguard Worker
3*d57664e9SAndroid Build Coastguard Workerlibdumpcoverage.so is a JVMTI agent designed to dump coverage information for a process, where the binaries have been instrumented by JaCoCo. JaCoCo automatically starts recording data on process start, and we need a way to trigger the resetting or dumping of this data.
4*d57664e9SAndroid Build Coastguard Worker
5*d57664e9SAndroid Build Coastguard WorkerThe JVMTI agent is used to make the calls to JaCoCo in its process.
6*d57664e9SAndroid Build Coastguard Worker
7*d57664e9SAndroid Build Coastguard Worker# Usage
8*d57664e9SAndroid Build Coastguard Worker
9*d57664e9SAndroid Build Coastguard WorkerNote that these examples assume you have an instrumented build (userdebug_coverage). Here is, for example, how to dump coverage information regarding the default clock app. First some setup is necessary:
10*d57664e9SAndroid Build Coastguard Worker
11*d57664e9SAndroid Build Coastguard Worker```
12*d57664e9SAndroid Build Coastguard Workeradb root # necessary to copy files in/out of the /data/data/{package} folder
13*d57664e9SAndroid Build Coastguard Workeradb shell 'mkdir /data/data/com.android.deskclock/folder-to-use'
14*d57664e9SAndroid Build Coastguard Worker```
15*d57664e9SAndroid Build Coastguard Worker
16*d57664e9SAndroid Build Coastguard WorkerThen we can run the command to dump the data:
17*d57664e9SAndroid Build Coastguard Worker
18*d57664e9SAndroid Build Coastguard Worker```
19*d57664e9SAndroid Build Coastguard Workeradb shell 'am attach-agent com.android.deskclock /system/lib/libdumpcoverage.so=dump:/data/data/com.android.deskclock/folder-to-use/coverage-file.ec'
20*d57664e9SAndroid Build Coastguard Worker```
21*d57664e9SAndroid Build Coastguard Worker
22*d57664e9SAndroid Build Coastguard WorkerWe can also reset the coverage information with
23*d57664e9SAndroid Build Coastguard Worker
24*d57664e9SAndroid Build Coastguard Worker```
25*d57664e9SAndroid Build Coastguard Workeradb shell 'am attach-agent com.android.deskclock /system/lib/libdumpcoverage.so=reset'
26*d57664e9SAndroid Build Coastguard Worker```
27*d57664e9SAndroid Build Coastguard Worker
28*d57664e9SAndroid Build Coastguard Workerthen perform more actions, then dump the data again. To get the files, we can get
29*d57664e9SAndroid Build Coastguard Worker
30*d57664e9SAndroid Build Coastguard Worker```
31*d57664e9SAndroid Build Coastguard Workeradb pull /data/data/com.android.deskclock/folder-to-use/coverage-file.ec ~/path-on-your-computer
32*d57664e9SAndroid Build Coastguard Worker```
33*d57664e9SAndroid Build Coastguard Worker
34*d57664e9SAndroid Build Coastguard WorkerAnd you should have `coverage-file.ec` on your machine under the folder `~/path-on-your-computer`
35*d57664e9SAndroid Build Coastguard Worker
36*d57664e9SAndroid Build Coastguard Worker# Details
37*d57664e9SAndroid Build Coastguard Worker
38*d57664e9SAndroid Build Coastguard WorkerIn dump mode, the agent makes JNI calls equivalent to
39*d57664e9SAndroid Build Coastguard Worker
40*d57664e9SAndroid Build Coastguard Worker```
41*d57664e9SAndroid Build Coastguard WorkerAgent.getInstance().getExecutionData(/*reset = */ false);
42*d57664e9SAndroid Build Coastguard Worker```
43*d57664e9SAndroid Build Coastguard Worker
44*d57664e9SAndroid Build Coastguard Workerand then saves the result to a file specified by the passed in directory
45*d57664e9SAndroid Build Coastguard Worker
46*d57664e9SAndroid Build Coastguard WorkerIn reset mode, it makes a JNI call equivalent to
47*d57664e9SAndroid Build Coastguard Worker
48*d57664e9SAndroid Build Coastguard Worker```
49*d57664e9SAndroid Build Coastguard WorkerAgent.getInstance().reset();
50*d57664e9SAndroid Build Coastguard Worker```
51