0

Adds histogram to check whether asset path workaround is used

Bug: 400413041
Change-Id: I761adce0aaf703b3925bee5e87623c4c91d3a9f1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6343457
Reviewed-by: Tomasz Wiszkowski <ender@google.com>
Auto-Submit: Alex Mitra <alexmitra@chromium.org>
Reviewed-by: Richard (Torne) Coles <torne@chromium.org>
Commit-Queue: Alex Mitra <alexmitra@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1432147}
This commit is contained in:
Alex Mitra
2025-03-13 09:01:51 -07:00
committed by Chromium LUCI CQ
parent 594e0d244e
commit 00d4eb816d
3 changed files with 44 additions and 0 deletions
android_webview/glue/java/src/com/android/webview/chromium
tools/metrics/histograms/metadata/android

@ -85,6 +85,9 @@ public class WebViewChromiumAwInit {
private static final String HTTP_AUTH_DATABASE_FILE = "http_auth.db";
private static final String ASSET_PATH_WORKAROUND_HISTOGRAM_NAME =
"Android.WebView.AssetPathWorkaroundUsed.StartChromiumLocked";
public static class WebViewStartUpDiagnostics {
private final Object mLock = new Object();
@ -336,7 +339,9 @@ public class WebViewChromiumAwInit {
// mechanism might not help.
try {
DeviceFormFactor.isTablet();
RecordHistogram.recordBooleanHistogram(ASSET_PATH_WORKAROUND_HISTOGRAM_NAME, false);
} catch (Resources.NotFoundException e) {
RecordHistogram.recordBooleanHistogram(ASSET_PATH_WORKAROUND_HISTOGRAM_NAME, true);
mFactory.addWebViewAssetPath(context);
}

@ -129,6 +129,9 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
private static final String SUPPORT_LIB_GLUE_AND_BOUNDARY_INTERFACE_PREFIX =
"org.chromium.support_lib_";
private static final String ASSET_PATH_WORKAROUND_HISTOGRAM_NAME =
"Android.WebView.AssetPathWorkaroundUsed.FactoryInit";
// This is an ID hardcoded by WebLayer for resources stored in locale splits. See
// WebLayerImpl.java for more info.
private static final int SHARED_LIBRARY_MAX_ID = 36;
@ -433,12 +436,14 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
int packageId;
try {
packageId = webViewDelegate.getPackageId(ctx.getResources(), resourcePackage);
RecordHistogram.recordBooleanHistogram(ASSET_PATH_WORKAROUND_HISTOGRAM_NAME, false);
} catch (RuntimeException e) {
// We failed to find the package ID, which likely means this context's AssetManager
// doesn't have WebView loaded in it. This may be because WebViewFactory doesn't add
// the package persistently to ResourcesManager and the app's AssetManager has been
// recreated. Try adding it again using WebViewDelegate, which does add it
// persistently.
RecordHistogram.recordBooleanHistogram(ASSET_PATH_WORKAROUND_HISTOGRAM_NAME, true);
addWebViewAssetPath(ctx);
packageId = webViewDelegate.getPackageId(ctx.getResources(), resourcePackage);
}

@ -5778,6 +5778,40 @@ chromium-metrics-reviews@google.com.
</summary>
</histogram>
<histogram name="Android.WebView.AssetPathWorkaroundUsed.FactoryInit"
enum="Boolean" expires_after="2025-09-11">
<owner>alexmitra@chromium.org</owner>
<owner>src/android_webview/OWNERS</owner>
<summary>
In some cases, WebView is unable to find the package ID which usually means
that the AssetManager for the Context passed to WebView doesn't have WebView
loaded in it. We have a rudimentary workaround for this which is to add
WebView's asset path to the Context. Since writing this workaround, we
believe we've addressed the underlying problem. Therefore the workaround
should no longer be needed. This histogram logs whether the asset path
workaround was needed during startup so that we can determine if it's safe
to remove. This is logged once during
WebViewChromiumFactoryProvider#initialize.
</summary>
</histogram>
<histogram name="Android.WebView.AssetPathWorkaroundUsed.StartChromiumLocked"
enum="Boolean" expires_after="2025-09-11">
<owner>alexmitra@chromium.org</owner>
<owner>src/android_webview/OWNERS</owner>
<summary>
In some cases, WebView is unable to find its own Resources which usually
means that the host app is doing something unsupported with the Context
passed to WebView (or with the platform Resources class). We have a
rudimentary workaround for this which is to add WebView's asset path to the
Context. Since writing this workaround, we believe we've addressed the
underlying problem. Therefore the workaround should no longer be needed.
This histogram logs whether the asset path workaround was needed during
startup so that we can determine if it's safe to remove. This is logged once
during WebViewChromiumAwInit#startChromiumLocked.
</summary>
</histogram>
<histogram name="Android.WebView.AwContentsConstructorTime{IsFirst}" units="ms"
expires_after="2025-09-07">
<owner>cduvall@chromium.org</owner>