blob: 5d28b04ee695ab2df6fb7ae8773605bfb51c6111 [file] [log] [blame] [view]
# How to update dirty-image-objects
1. Install ART APEX with imgdiag and reboot, e.g.:
```
. ./build/envsetup.sh
banchan test_imgdiag_com.android.art module_arm64
m apps_only dist
adb install out/dist/test_imgdiag_com.android.art.apex
adb reboot
```
2. Collect imgdiag output.
```
# To see all options check: art/imgdiag/run_imgdiag.py -h
art/imgdiag/run_imgdiag.py
```
3. Create new dirty-image-objects.
```
# To see all options check: art/imgdiag/create_dirty_image_objects.py -h
# Using all imgdiag files:
art/imgdiag/create_dirty_image_objects.py ./imgdiag_*
# Or using only specified files:
art/imgdiag/create_dirty_image_objects.py \
./imgdiag_system_server.txt \
./imgdiag_com.android.systemui.txt \
./imgdiag_com.google.android.gms.txt \
./imgdiag_com.google.android.gms.persistent.txt \
./imgdiag_com.google.android.gms.ui.txt \
./imgdiag_com.google.android.gms.unstable.txt
```
The resulting file will contain a list of dirty objects with optional
(enabled by default) sort keys in the following format:
```
<class_descriptor>[.<reference_field_name>:<reference_field_type>]* [<sort_key>]
```
Classes are specified using a descriptor and objects are specified by
a reference chain starting from a class. Example:
```
# Mark FileUtils class as dirty:
Landroid/os/FileUtils; 4
# Mark instance of Property class as dirty:
Landroid/view/View;.SCALE_X:Landroid/util/Property; 4
```
If present, sort keys are used to specify the ordering between dirty entries.
All dirty objects will be placed in the dirty bin of the boot image and sorted
by the sort\_key values. I.e., dirty entries with sort\_key==N will have lower
address than entries with sort\_key==N+1.
4. Push new dirty-image-objects to the device.
```
adb push dirty-image-objects.txt /etc/dirty-image-objects
```
5. Reinstall ART APEX to update the boot image.
```
adb install out/dist/com.android.art.apex
adb reboot
```
At this point the device should have new `boot.art` with optimized dirty object layout.
This can be checked by collecting imgdiag output again and comparing dirty page counts to the previous run.