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