Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a020040 authored by Ziad Youssef's avatar Ziad Youssef Committed by Android (Google) Code Review
Browse files

Merge "Add the logging code for WebView Update service metrics" into main

parents 9fbeb623 53dc3ade
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.PatternMatcher;
import android.os.Process;
import android.os.Process;
import android.os.ResultReceiver;
import android.os.ResultReceiver;
import android.os.ShellCallback;
import android.os.ShellCallback;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.Slog;
import android.util.Slog;
import android.webkit.IWebViewUpdateService;
import android.webkit.IWebViewUpdateService;
@@ -37,6 +38,7 @@ import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import android.webkit.WebViewProviderResponse;


import com.android.internal.util.DumpUtils;
import com.android.internal.util.DumpUtils;
import com.android.modules.expresslog.Histogram;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.SystemService;


@@ -52,6 +54,14 @@ public class WebViewUpdateService extends SystemService {


    private static final String TAG = "WebViewUpdateService";
    private static final String TAG = "WebViewUpdateService";


    private static final Histogram sPrepareWebViewInSystemServerLatency = new Histogram(
            "webview.value_prepare_webview_in_system_server_latency",
            new Histogram.ScaledRangeOptions(20, 0, 1, 1.5f));

    private static final Histogram sAppWaitingForRelroCompletionDelay = new Histogram(
            "webview.value_app_waiting_for_relro_completion_delay",
            new Histogram.ScaledRangeOptions(20, 0, 1, 1.4f));

    private BroadcastReceiver mWebViewUpdatedReceiver;
    private BroadcastReceiver mWebViewUpdatedReceiver;
    private WebViewUpdateServiceInterface mImpl;
    private WebViewUpdateServiceInterface mImpl;


@@ -132,7 +142,10 @@ public class WebViewUpdateService extends SystemService {
    }
    }


    public void prepareWebViewInSystemServer() {
    public void prepareWebViewInSystemServer() {
        long currentTimeMs = SystemClock.uptimeMillis();
        mImpl.prepareWebViewInSystemServer();
        mImpl.prepareWebViewInSystemServer();
        sPrepareWebViewInSystemServerLatency.logSample(
                (float) (SystemClock.uptimeMillis() - currentTimeMs));
    }
    }


    private static String packageNameFromIntent(Intent intent) {
    private static String packageNameFromIntent(Intent intent) {
@@ -204,8 +217,12 @@ public class WebViewUpdateService extends SystemService {
                throw new IllegalStateException("Cannot create a WebView from the SystemServer");
                throw new IllegalStateException("Cannot create a WebView from the SystemServer");
            }
            }


            long startTimeMs = SystemClock.uptimeMillis();
            final WebViewProviderResponse webViewProviderResponse =
            final WebViewProviderResponse webViewProviderResponse =
                    WebViewUpdateService.this.mImpl.waitForAndGetProvider();
                    WebViewUpdateService.this.mImpl.waitForAndGetProvider();
            long endTimeMs = SystemClock.uptimeMillis();
            sAppWaitingForRelroCompletionDelay.logSample((float) (endTimeMs - startTimeMs));

            if (webViewProviderResponse.packageInfo != null) {
            if (webViewProviderResponse.packageInfo != null) {
                grantVisibilityToCaller(
                grantVisibilityToCaller(
                        webViewProviderResponse.packageInfo.packageName, Binder.getCallingUid());
                        webViewProviderResponse.packageInfo.packageName, Binder.getCallingUid());
+18 −3
Original line number Original line Diff line number Diff line
@@ -23,12 +23,15 @@ import android.content.pm.Signature;
import android.os.AsyncTask;
import android.os.AsyncTask;
import android.os.Trace;
import android.os.Trace;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.AndroidRuntimeException;
import android.util.Slog;
import android.util.Slog;
import android.webkit.UserPackage;
import android.webkit.UserPackage;
import android.webkit.WebViewFactory;
import android.webkit.WebViewFactory;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import android.webkit.WebViewProviderResponse;


import com.android.modules.expresslog.Counter;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
@@ -357,6 +360,12 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {
                mNumRelroCreationsFinished = 0;
                mNumRelroCreationsFinished = 0;
                mNumRelroCreationsStarted =
                mNumRelroCreationsStarted =
                    mSystemInterface.onWebViewProviderChanged(newPackage);
                    mSystemInterface.onWebViewProviderChanged(newPackage);
                Counter.logIncrement("webview.value_on_webview_provider_changed_counter");
                if (newPackage.packageName.equals(getDefaultWebViewPackage().packageName)) {
                    Counter.logIncrement(
                            "webview.value_on_webview_provider_changed_"
                            + "with_default_package_counter");
                }
                // If the relro creations finish before we know the number of started creations
                // If the relro creations finish before we know the number of started creations
                // we will have to do any cleanup/notifying here.
                // we will have to do any cleanup/notifying here.
                checkIfRelrosDoneLocked();
                checkIfRelrosDoneLocked();
@@ -388,9 +397,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {


    @Override
    @Override
    public WebViewProviderInfo getDefaultWebViewPackage() {
    public WebViewProviderInfo getDefaultWebViewPackage() {
        throw new IllegalStateException(
        for (WebViewProviderInfo provider : getWebViewPackages()) {
                "getDefaultWebViewPackage shouldn't be called if update_service_v2 flag is"
            if (provider.availableByDefault) {
                        + " disabled.");
                return provider;
            }
        }

        // This should be unreachable because the config parser enforces that there is at least
        // one availableByDefault provider.
        throw new AndroidRuntimeException("No available by default WebView Provider.");
    }
    }


    private static class ProviderAndPackageInfo {
    private static class ProviderAndPackageInfo {
+12 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,8 @@ import android.webkit.WebViewFactory;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import android.webkit.WebViewProviderResponse;


import com.android.modules.expresslog.Counter;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
@@ -412,6 +414,12 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
                mNumRelroCreationsFinished = 0;
                mNumRelroCreationsFinished = 0;
                mNumRelroCreationsStarted =
                mNumRelroCreationsStarted =
                    mSystemInterface.onWebViewProviderChanged(newPackage);
                    mSystemInterface.onWebViewProviderChanged(newPackage);
                Counter.logIncrement("webview.value_on_webview_provider_changed_counter");
                if (newPackage.packageName.equals(getDefaultWebViewPackage().packageName)) {
                    Counter.logIncrement(
                            "webview.value_on_webview_provider_changed_"
                            + "with_default_package_counter");
                }
                // If the relro creations finish before we know the number of started creations
                // If the relro creations finish before we know the number of started creations
                // we will have to do any cleanup/notifying here.
                // we will have to do any cleanup/notifying here.
                checkIfRelrosDoneLocked();
                checkIfRelrosDoneLocked();
@@ -479,6 +487,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
     * for all users, otherwise use the default provider.
     * for all users, otherwise use the default provider.
     */
     */
    private PackageInfo findPreferredWebViewPackage() throws WebViewPackageMissingException {
    private PackageInfo findPreferredWebViewPackage() throws WebViewPackageMissingException {
        Counter.logIncrement("webview.value_find_preferred_webview_package_counter");
        // If the user has chosen provider, use that (if it's installed and enabled for all
        // If the user has chosen provider, use that (if it's installed and enabled for all
        // users).
        // users).
        String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(mContext);
        String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(mContext);
@@ -508,12 +517,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
            PackageInfo packageInfo = mSystemInterface.getPackageInfoForProvider(mDefaultProvider);
            PackageInfo packageInfo = mSystemInterface.getPackageInfoForProvider(mDefaultProvider);
            if (validityResult(mDefaultProvider, packageInfo) == VALIDITY_OK) {
            if (validityResult(mDefaultProvider, packageInfo) == VALIDITY_OK) {
                return packageInfo;
                return packageInfo;
            } else {
                Counter.logIncrement("webview.value_default_webview_package_invalid_counter");
            }
            }
        } catch (NameNotFoundException e) {
        } catch (NameNotFoundException e) {
            Slog.w(TAG, "Default WebView package (" + mDefaultProvider.packageName + ") not found");
            Slog.w(TAG, "Default WebView package (" + mDefaultProvider.packageName + ") not found");
        }
        }


        // This should never happen during normal operation (only with modified system images).
        // This should never happen during normal operation (only with modified system images).
        Counter.logIncrement("webview.value_webview_not_usable_for_all_users_counter");
        mAnyWebViewInstalled = false;
        mAnyWebViewInstalled = false;
        throw new WebViewPackageMissingException("Could not find a loadable WebView package");
        throw new WebViewPackageMissingException("Could not find a loadable WebView package");
    }
    }