freezer: synchronous unfreeze
Unfreeze is executed by the same handler queue as compaction/uncompaction.
Heightened compaction activity, like during high memory pressure, will cause
unfreeze to happen after all (un)compactions enqueued before them are completed.
This can potentially cause a stall of several hundred milliseconds for
interactive user journeys.
This change makes unfreeze synchronous with OomAdjuster to minimize
latency to unfreeze, but leaves logging and telemetry collection in the
asynchronous path to reduce impact on the main thread. Total duration of
unfreeze is within a few tens of microsecods as measured on a pixel 4.
Test: verified in logs that unfreeze happens asynchronously. Droidfooded
the chenge on a flame for several days with no adverse effects.
Bug: 143308662
Change-Id: I2eca90a982aed738412fcafe3558ca08bc40534b
2 files changed