xref: /aosp_15_r20/art/tools/jvmti-agents/field-counts/README.md (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker# fieldcount
2*795d594fSAndroid Build Coastguard Worker
3*795d594fSAndroid Build Coastguard Workerfieldcount is a JVMTI agent designed to investigate the types being held by specific fields and
4*795d594fSAndroid Build Coastguard Workerhow large the objects referenced by these fields are.
5*795d594fSAndroid Build Coastguard Worker
6*795d594fSAndroid Build Coastguard WorkerNote that just by using the agent some fields might be written (for example fields related to
7*795d594fSAndroid Build Coastguard Workerkeeping track of jfieldIDs). Users should be aware of this.
8*795d594fSAndroid Build Coastguard Worker
9*795d594fSAndroid Build Coastguard Worker# Usage
10*795d594fSAndroid Build Coastguard Worker### Build
11*795d594fSAndroid Build Coastguard Worker>    `m libfieldcount libfieldcounts`
12*795d594fSAndroid Build Coastguard Worker
13*795d594fSAndroid Build Coastguard WorkerThe libraries will be built for 32-bit, 64-bit, host and target. Below examples
14*795d594fSAndroid Build Coastguard Workerassume you want to use the 64-bit version.
15*795d594fSAndroid Build Coastguard Worker
16*795d594fSAndroid Build Coastguard Worker### Command Line
17*795d594fSAndroid Build Coastguard Worker
18*795d594fSAndroid Build Coastguard WorkerThe agent is loaded using -agentpath like normal. It takes arguments in the
19*795d594fSAndroid Build Coastguard Workerfollowing format:
20*795d594fSAndroid Build Coastguard Worker>     `Lname/of/class;.nameOfField:Ltype/of/field;[,...]`
21*795d594fSAndroid Build Coastguard Worker
22*795d594fSAndroid Build Coastguard Worker#### ART
23*795d594fSAndroid Build Coastguard Worker```shell
24*795d594fSAndroid Build Coastguard Workerart -Xplugin:$ANDROID_HOST_OUT/lib64/libopenjdkjvmti.so '-agentpath:libfieldcount.so=Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;,Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;' -cp tmp/java/helloworld.dex -Xint helloworld
25*795d594fSAndroid Build Coastguard Worker```
26*795d594fSAndroid Build Coastguard Worker
27*795d594fSAndroid Build Coastguard Worker* `-Xplugin` and `-agentpath` need to be used, otherwise the agent will fail during init.
28*795d594fSAndroid Build Coastguard Worker* If using `libartd.so`, make sure to use the debug version of jvmti.
29*795d594fSAndroid Build Coastguard Worker
30*795d594fSAndroid Build Coastguard Worker```shell
31*795d594fSAndroid Build Coastguard Workeradb shell setenforce 0
32*795d594fSAndroid Build Coastguard Worker
33*795d594fSAndroid Build Coastguard Workeradb push $ANDROID_PRODUCT_OUT/system/lib64/libfieldcounts.so /data/local/tmp/
34*795d594fSAndroid Build Coastguard Worker
35*795d594fSAndroid Build Coastguard Workeradb shell am start-activity --attach-agent '/data/local/tmp/libfieldcounts.so=Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;,Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;' some.debuggable.apps/.the.app.MainActivity
36*795d594fSAndroid Build Coastguard Worker```
37*795d594fSAndroid Build Coastguard Worker
38*795d594fSAndroid Build Coastguard Worker#### RI
39*795d594fSAndroid Build Coastguard Worker>    `java '-agentpath:libfieldcount.so=Lname/of/class;.nameOfField:Ltype/of/field;' -cp tmp/helloworld/classes helloworld`
40*795d594fSAndroid Build Coastguard Worker
41*795d594fSAndroid Build Coastguard Worker### Printing the Results
42*795d594fSAndroid Build Coastguard WorkerAll statistics gathered during the trace are printed automatically when the
43*795d594fSAndroid Build Coastguard Workerprogram normally exits. In the case of Android applications, they are always
44*795d594fSAndroid Build Coastguard Workerkilled, so we need to manually print the results.
45*795d594fSAndroid Build Coastguard Worker
46*795d594fSAndroid Build Coastguard Worker>    `kill -SIGQUIT $(pid com.littleinc.orm_benchmark)`
47*795d594fSAndroid Build Coastguard Worker
48*795d594fSAndroid Build Coastguard WorkerWill initiate a dump of the counts (to logcat).
49*795d594fSAndroid Build Coastguard Worker
50*795d594fSAndroid Build Coastguard WorkerThe dump will look something like this.
51*795d594fSAndroid Build Coastguard Worker
52*795d594fSAndroid Build Coastguard Worker```
53*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:60] listing field Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;
54*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:60] listing field Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;
55*795d594fSAndroid Build Coastguard WorkerHello, world!
56*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:97] Dumping counts of fields.
57*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:98]     Field name      Type    Count   Total Size
58*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:155]    Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;      <ALL TYPES>     2800    3024
59*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:161]    Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;      Ldalvik/system/ClassExt;        64      3024
60*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:161]    Ljava/lang/Class;.extData:Ldalvik/system/ClassExt;      <null>  2738    0
61*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:155]    Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;  <ALL TYPES>     63      10008
62*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:161]    Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;  <null>  26      0
63*795d594fSAndroid Build Coastguard Workerdalvikvm64 I 06-27 14:24:59 183155 183155 fieldcount.cc:161]    Ldalvik/system/ClassExt;.jmethodIDs:Ljava/lang/Object;  [J      39      10008
64*795d594fSAndroid Build Coastguard Worker```
65