Merge "Pause watchdog monitor for incfs native lib extraction" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
920e1fd7a6
@@ -40,7 +40,6 @@ import android.os.incremental.IncrementalManager;
|
|||||||
import android.os.incremental.IncrementalStorage;
|
import android.os.incremental.IncrementalStorage;
|
||||||
import android.system.ErrnoException;
|
import android.system.ErrnoException;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.util.ArraySet;
|
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import dalvik.system.CloseGuard;
|
import dalvik.system.CloseGuard;
|
||||||
@@ -551,18 +550,4 @@ public class NativeLibraryHelper {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Wait for all native library extraction to complete for the passed storages.
|
|
||||||
*
|
|
||||||
* @param incrementalStorages A list of the storages to wait for.
|
|
||||||
*/
|
|
||||||
public static void waitForNativeBinariesExtraction(
|
|
||||||
ArraySet<IncrementalStorage> incrementalStorages) {
|
|
||||||
for (int i = 0; i < incrementalStorages.size(); ++i) {
|
|
||||||
IncrementalStorage storage = incrementalStorages.valueAtUnchecked(i);
|
|
||||||
storage.waitForNativeBinariesExtraction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20111,7 +20111,28 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
|
|
||||||
notifyPackageChangeObserversOnUpdate(reconciledPkg);
|
notifyPackageChangeObserversOnUpdate(reconciledPkg);
|
||||||
}
|
}
|
||||||
NativeLibraryHelper.waitForNativeBinariesExtraction(incrementalStorages);
|
waitForNativeBinariesExtraction(incrementalStorages);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void waitForNativeBinariesExtraction(
|
||||||
|
ArraySet<IncrementalStorage> incrementalStorages) {
|
||||||
|
if (incrementalStorages.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// Native library extraction may take very long time: each page could potentially
|
||||||
|
// wait for either 10s or 100ms (adb vs non-adb data loader), and that easily adds
|
||||||
|
// up to a full watchdog timeout of 1 min, killing the system after that. It doesn't
|
||||||
|
// make much sense as blocking here doesn't lock up the framework, but only blocks
|
||||||
|
// the installation session and the following ones.
|
||||||
|
Watchdog.getInstance().pauseWatchingCurrentThread("native_lib_extract");
|
||||||
|
for (int i = 0; i < incrementalStorages.size(); ++i) {
|
||||||
|
IncrementalStorage storage = incrementalStorages.valueAtUnchecked(i);
|
||||||
|
storage.waitForNativeBinariesExtraction();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
Watchdog.getInstance().resumeWatchingCurrentThread("native_lib_extract");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[] getInstalledUsers(PackageSetting ps, int userId) {
|
private int[] getInstalledUsers(PackageSetting ps, int userId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user