xref: /aosp_15_r20/art/imgdiag/dirty_image_objects.md (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker# How to update dirty-image-objects
2*795d594fSAndroid Build Coastguard Worker
3*795d594fSAndroid Build Coastguard Worker1. Install ART APEX with imgdiag and reboot, e.g.:
4*795d594fSAndroid Build Coastguard Worker
5*795d594fSAndroid Build Coastguard Worker```
6*795d594fSAndroid Build Coastguard Worker. ./build/envsetup.sh
7*795d594fSAndroid Build Coastguard Workerbanchan test_imgdiag_com.android.art module_arm64
8*795d594fSAndroid Build Coastguard Workerm apps_only dist
9*795d594fSAndroid Build Coastguard Workeradb install out/dist/test_imgdiag_com.android.art.apex
10*795d594fSAndroid Build Coastguard Workeradb reboot
11*795d594fSAndroid Build Coastguard Worker```
12*795d594fSAndroid Build Coastguard Worker
13*795d594fSAndroid Build Coastguard Worker2. Collect imgdiag output.
14*795d594fSAndroid Build Coastguard Worker
15*795d594fSAndroid Build Coastguard Worker```
16*795d594fSAndroid Build Coastguard Worker# To see all options check: art/imgdiag/run_imgdiag.py -h
17*795d594fSAndroid Build Coastguard Worker
18*795d594fSAndroid Build Coastguard Workerart/imgdiag/run_imgdiag.py
19*795d594fSAndroid Build Coastguard Worker```
20*795d594fSAndroid Build Coastguard Worker
21*795d594fSAndroid Build Coastguard Worker3. Create new dirty-image-objects.
22*795d594fSAndroid Build Coastguard Worker
23*795d594fSAndroid Build Coastguard Worker```
24*795d594fSAndroid Build Coastguard Worker# To see all options check: art/imgdiag/create_dirty_image_objects.py -h
25*795d594fSAndroid Build Coastguard Worker
26*795d594fSAndroid Build Coastguard Worker# Using all imgdiag files:
27*795d594fSAndroid Build Coastguard Workerart/imgdiag/create_dirty_image_objects.py ./imgdiag_*
28*795d594fSAndroid Build Coastguard Worker
29*795d594fSAndroid Build Coastguard Worker# Or using only specified files:
30*795d594fSAndroid Build Coastguard Workerart/imgdiag/create_dirty_image_objects.py \
31*795d594fSAndroid Build Coastguard Worker  ./imgdiag_system_server.txt \
32*795d594fSAndroid Build Coastguard Worker  ./imgdiag_com.android.systemui.txt \
33*795d594fSAndroid Build Coastguard Worker  ./imgdiag_com.google.android.gms.txt \
34*795d594fSAndroid Build Coastguard Worker  ./imgdiag_com.google.android.gms.persistent.txt \
35*795d594fSAndroid Build Coastguard Worker  ./imgdiag_com.google.android.gms.ui.txt \
36*795d594fSAndroid Build Coastguard Worker  ./imgdiag_com.google.android.gms.unstable.txt
37*795d594fSAndroid Build Coastguard Worker```
38*795d594fSAndroid Build Coastguard Worker
39*795d594fSAndroid Build Coastguard WorkerThe resulting file will contain a list of dirty objects with optional
40*795d594fSAndroid Build Coastguard Worker(enabled by default) sort keys in the following format:
41*795d594fSAndroid Build Coastguard Worker```
42*795d594fSAndroid Build Coastguard Worker<class_descriptor>[.<reference_field_name>:<reference_field_type>]* [<sort_key>]
43*795d594fSAndroid Build Coastguard Worker```
44*795d594fSAndroid Build Coastguard WorkerClasses are specified using a descriptor and objects are specified by
45*795d594fSAndroid Build Coastguard Workera reference chain starting from a class. Example:
46*795d594fSAndroid Build Coastguard Worker```
47*795d594fSAndroid Build Coastguard Worker# Mark FileUtils class as dirty:
48*795d594fSAndroid Build Coastguard WorkerLandroid/os/FileUtils; 4
49*795d594fSAndroid Build Coastguard Worker# Mark instance of Property class as dirty:
50*795d594fSAndroid Build Coastguard WorkerLandroid/view/View;.SCALE_X:Landroid/util/Property; 4
51*795d594fSAndroid Build Coastguard Worker```
52*795d594fSAndroid Build Coastguard WorkerIf present, sort keys are used to specify the ordering between dirty entries.
53*795d594fSAndroid Build Coastguard WorkerAll dirty objects will be placed in the dirty bin of the boot image and sorted
54*795d594fSAndroid Build Coastguard Workerby the sort\_key values. I.e., dirty entries with sort\_key==N will have lower
55*795d594fSAndroid Build Coastguard Workeraddress than entries with sort\_key==N+1.
56*795d594fSAndroid Build Coastguard Worker
57*795d594fSAndroid Build Coastguard Worker4. Push new dirty-image-objects to the device.
58*795d594fSAndroid Build Coastguard Worker
59*795d594fSAndroid Build Coastguard Worker```
60*795d594fSAndroid Build Coastguard Workeradb push dirty-image-objects.txt /etc/dirty-image-objects
61*795d594fSAndroid Build Coastguard Worker```
62*795d594fSAndroid Build Coastguard Worker
63*795d594fSAndroid Build Coastguard Worker5. Reinstall ART APEX to update the boot image.
64*795d594fSAndroid Build Coastguard Worker
65*795d594fSAndroid Build Coastguard Worker```
66*795d594fSAndroid Build Coastguard Workeradb install out/dist/com.android.art.apex
67*795d594fSAndroid Build Coastguard Workeradb reboot
68*795d594fSAndroid Build Coastguard Worker```
69*795d594fSAndroid Build Coastguard Worker
70*795d594fSAndroid Build Coastguard WorkerAt this point the device should have new `boot.art` with optimized dirty object layout.
71*795d594fSAndroid Build Coastguard WorkerThis can be checked by collecting imgdiag output again and comparing dirty page counts to the previous run.
72