Compute SHA256 digest of binaries asynchronously post boot.
Instead of waiting until first invocation of commandline, we will execute the computation of SHA256 digest of APEXs and Modules in a separate thread post boot (to not hold up boot time). This allows the logging of APEX information to statsd to happen once every reboot. Otherwise, logging may never occur if the users never make use of the commandline. Bug: 217469982 Test: Manual. `adb shell cmd transparency get apex_info` no longer has latency upon first invocation. Change-Id: I1f09316f5b7cde1795dc49456bae97362e30d5c6
This commit is contained in:
@@ -45,6 +45,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -369,10 +370,13 @@ public class BinaryTransparencyService extends SystemService {
|
||||
|
||||
// we are only interested in doing things at PHASE_BOOT_COMPLETED
|
||||
if (phase == PHASE_BOOT_COMPLETED) {
|
||||
// due to potentially long computation that holds up boot time, apex sha computations
|
||||
// are deferred to first call
|
||||
Slog.i(TAG, "Boot completed. Getting VBMeta Digest.");
|
||||
getVBMetaDigestInformation();
|
||||
|
||||
// due to potentially long computation that may hold up boot time, SHA256 computations
|
||||
// for APEXs and Modules will be executed via threads.
|
||||
Slog.i(TAG, "Executing APEX & Module digest computations");
|
||||
computeApexAndModuleDigests();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,6 +386,12 @@ public class BinaryTransparencyService extends SystemService {
|
||||
FrameworkStatsLog.write(FrameworkStatsLog.VBMETA_DIGEST_REPORTED, mVbmetaDigest);
|
||||
}
|
||||
|
||||
private void computeApexAndModuleDigests() {
|
||||
// using Executors will allow the computations to be done asynchronously, thus not holding
|
||||
// up boot time.
|
||||
Executors.defaultThreadFactory().newThread(() -> updateBinaryMeasurements()).start();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private List<PackageInfo> getInstalledApexs() {
|
||||
List<PackageInfo> results = new ArrayList<PackageInfo>();
|
||||
|
||||
Reference in New Issue
Block a user