Loading core/api/system-current.txt +15 −12 Original line number Diff line number Diff line Loading @@ -14733,7 +14733,7 @@ package android.webkit { method public String getDataDirectorySuffix(); method public String getErrorString(android.content.Context, int); method public int getPackageId(android.content.res.Resources, String); method @NonNull public long[] getTimestamps(); method @NonNull public android.webkit.WebViewFactory.StartupTimestamps getStartupTimestamps(); method @Deprecated public void invokeDrawGlFunctor(android.view.View, long, boolean); method public boolean isMultiProcessEnabled(); method public boolean isTraceTagEnabled(); Loading @@ -14749,12 +14749,6 @@ package android.webkit { method public static android.content.pm.PackageInfo getLoadedPackageInfo(); method public static int loadWebViewNativeLibraryFromPackage(String, ClassLoader); method public static void prepareWebViewInZygote(); field public static final int ADD_ASSETS_END = 4; // 0x4 field public static final int ADD_ASSETS_START = 3; // 0x3 field public static final int CREATE_CONTEXT_END = 2; // 0x2 field public static final int CREATE_CONTEXT_START = 1; // 0x1 field public static final int GET_CLASS_LOADER_END = 6; // 0x6 field public static final int GET_CLASS_LOADER_START = 5; // 0x5 field public static final int LIBLOAD_ADDRESS_SPACE_NOT_RESERVED = 2; // 0x2 field public static final int LIBLOAD_FAILED_JNI_CALL = 7; // 0x7 field public static final int LIBLOAD_FAILED_LISTING_WEBVIEW_PACKAGES = 4; // 0x4 Loading @@ -14765,11 +14759,20 @@ package android.webkit { field public static final int LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN = 8; // 0x8 field public static final int LIBLOAD_SUCCESS = 0; // 0x0 field public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; // 0x1 field public static final int NATIVE_LOAD_END = 8; // 0x8 field public static final int NATIVE_LOAD_START = 7; // 0x7 field public static final int PROVIDER_CLASS_FOR_NAME_END = 10; // 0xa field public static final int PROVIDER_CLASS_FOR_NAME_START = 9; // 0x9 field public static final int WEBVIEW_LOAD_START = 0; // 0x0 } public static class WebViewFactory.StartupTimestamps { method public long getAddAssetsEnd(); method public long getAddAssetsStart(); method public long getCreateContextEnd(); method public long getCreateContextStart(); method public long getGetClassLoaderEnd(); method public long getGetClassLoaderStart(); method public long getNativeLoadEnd(); method public long getNativeLoadStart(); method public long getProviderClassForNameEnd(); method public long getProviderClassForNameStart(); method public long getWebViewLoadStart(); } public interface WebViewFactoryProvider { core/java/android/webkit/WebViewDelegate.java +3 −6 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package android.webkit; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.UptimeMillisLong; import android.app.ActivityThread; import android.app.Application; import android.app.ResourcesManager; Loading Loading @@ -221,14 +220,12 @@ public final class WebViewDelegate { } /** * Returns an array of startup timestamps. For the specification of array * see {@link WebViewFactory.Timestamp}. * Get the timestamps at which various WebView startup events occurred in this process. * This method must be called on the same thread where the * WebViewChromiumFactoryProvider#create method was invoked. */ @NonNull @UptimeMillisLong public long[] getTimestamps() { return WebViewFactory.getTimestamps(); public WebViewFactory.StartupTimestamps getStartupTimestamps() { return WebViewFactory.getStartupTimestamps(); } } core/java/android/webkit/WebViewFactory.java +100 −54 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.webkit; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.annotation.UptimeMillisLong; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.Application; Loading @@ -38,8 +38,6 @@ import android.util.ArraySet; import android.util.Log; import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; /** Loading Loading @@ -72,44 +70,6 @@ public final class WebViewFactory { private static boolean sWebViewDisabled; private static String sDataDirectorySuffix; // stored here so it can be set without loading WV // Indices in sTimestamps array. /** @hide */ @IntDef(value = { WEBVIEW_LOAD_START, CREATE_CONTEXT_START, CREATE_CONTEXT_END, ADD_ASSETS_START, ADD_ASSETS_END, GET_CLASS_LOADER_START, GET_CLASS_LOADER_END, NATIVE_LOAD_START, NATIVE_LOAD_END, PROVIDER_CLASS_FOR_NAME_START, PROVIDER_CLASS_FOR_NAME_END}) @Retention(RetentionPolicy.SOURCE) public @interface Timestamp { } /** When the overall WebView provider load began. */ public static final int WEBVIEW_LOAD_START = 0; /** Before creating the WebView APK Context. */ public static final int CREATE_CONTEXT_START = 1; /** After creating the WebView APK Context. */ public static final int CREATE_CONTEXT_END = 2; /** Before adding WebView assets to AssetManager. */ public static final int ADD_ASSETS_START = 3; /** After adding WebView assets to AssetManager. */ public static final int ADD_ASSETS_END = 4; /** Before creating the WebView ClassLoader. */ public static final int GET_CLASS_LOADER_START = 5; /** After creating the WebView ClassLoader. */ public static final int GET_CLASS_LOADER_END = 6; /** Before preloading the WebView native library. */ public static final int NATIVE_LOAD_START = 7; /** After preloading the WebView native library. */ public static final int NATIVE_LOAD_END = 8; /** Before looking up the WebView provider class. */ public static final int PROVIDER_CLASS_FOR_NAME_START = 9; /** After looking up the WebView provider class. */ public static final int PROVIDER_CLASS_FOR_NAME_END = 10; private static final int TIMESTAMPS_SIZE = 11; // WebView startup timestamps. To access elements use {@link Timestamp}. private static long[] sTimestamps = new long[TIMESTAMPS_SIZE]; // Error codes for loadWebViewNativeLibraryFromPackage public static final int LIBLOAD_SUCCESS = 0; public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; Loading @@ -130,6 +90,97 @@ public final class WebViewFactory { // error for namespace lookup public static final int LIBLOAD_FAILED_TO_FIND_NAMESPACE = 10; /** * Stores the timestamps at which various WebView startup events occurred in this process. */ public static class StartupTimestamps { long mWebViewLoadStart; long mCreateContextStart; long mCreateContextEnd; long mAddAssetsStart; long mAddAssetsEnd; long mGetClassLoaderStart; long mGetClassLoaderEnd; long mNativeLoadStart; long mNativeLoadEnd; long mProviderClassForNameStart; long mProviderClassForNameEnd; StartupTimestamps() {} /** When the overall WebView provider load began. */ @UptimeMillisLong public long getWebViewLoadStart() { return mWebViewLoadStart; } /** Before creating the WebView APK Context. */ @UptimeMillisLong public long getCreateContextStart() { return mCreateContextStart; } /** After creating the WebView APK Context. */ @UptimeMillisLong public long getCreateContextEnd() { return mCreateContextEnd; } /** Before adding WebView assets to AssetManager. */ @UptimeMillisLong public long getAddAssetsStart() { return mAddAssetsStart; } /** After adding WebView assets to AssetManager. */ @UptimeMillisLong public long getAddAssetsEnd() { return mAddAssetsEnd; } /** Before creating the WebView ClassLoader. */ @UptimeMillisLong public long getGetClassLoaderStart() { return mGetClassLoaderStart; } /** After creating the WebView ClassLoader. */ @UptimeMillisLong public long getGetClassLoaderEnd() { return mGetClassLoaderEnd; } /** Before preloading the WebView native library. */ @UptimeMillisLong public long getNativeLoadStart() { return mNativeLoadStart; } /** After preloading the WebView native library. */ @UptimeMillisLong public long getNativeLoadEnd() { return mNativeLoadEnd; } /** Before looking up the WebView provider class. */ @UptimeMillisLong public long getProviderClassForNameStart() { return mProviderClassForNameStart; } /** After looking up the WebView provider class. */ @UptimeMillisLong public long getProviderClassForNameEnd() { return mProviderClassForNameEnd; } } static final StartupTimestamps sTimestamps = new StartupTimestamps(); @NonNull static StartupTimestamps getStartupTimestamps() { return sTimestamps; } private static String getWebViewPreparationErrorReason(int error) { switch (error) { Loading Loading @@ -273,7 +324,7 @@ public final class WebViewFactory { // us honest and minimize usage of WebView internals when binding the proxy. if (sProviderInstance != null) return sProviderInstance; sTimestamps[WEBVIEW_LOAD_START] = SystemClock.uptimeMillis(); sTimestamps.mWebViewLoadStart = SystemClock.uptimeMillis(); final int uid = android.os.Process.myUid(); if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID || uid == android.os.Process.PHONE_UID || uid == android.os.Process.NFC_UID Loading Loading @@ -413,7 +464,7 @@ public final class WebViewFactory { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "initialApplication.createApplicationContext"); sTimestamps[CREATE_CONTEXT_START] = SystemClock.uptimeMillis(); sTimestamps.mCreateContextStart = SystemClock.uptimeMillis(); try { // Construct an app context to load the Java code into the current app. Context webViewContext = initialApplication.createApplicationContext( Loading @@ -422,7 +473,7 @@ public final class WebViewFactory { sPackageInfo = newPackageInfo; return webViewContext; } finally { sTimestamps[CREATE_CONTEXT_END] = SystemClock.uptimeMillis(); sTimestamps.mCreateContextEnd = SystemClock.uptimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (RemoteException | PackageManager.NameNotFoundException e) { Loading @@ -448,26 +499,26 @@ public final class WebViewFactory { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.getChromiumProviderClass()"); try { sTimestamps[ADD_ASSETS_START] = SystemClock.uptimeMillis(); sTimestamps.mAddAssetsStart = SystemClock.uptimeMillis(); for (String newAssetPath : webViewContext.getApplicationInfo().getAllApkPaths()) { initialApplication.getAssets().addAssetPathAsSharedLibrary(newAssetPath); } sTimestamps[ADD_ASSETS_END] = sTimestamps[GET_CLASS_LOADER_START] = sTimestamps.mAddAssetsEnd = sTimestamps.mGetClassLoaderStart = SystemClock.uptimeMillis(); ClassLoader clazzLoader = webViewContext.getClassLoader(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.loadNativeLibrary()"); sTimestamps[GET_CLASS_LOADER_END] = sTimestamps[NATIVE_LOAD_START] = sTimestamps.mGetClassLoaderEnd = sTimestamps.mNativeLoadStart = SystemClock.uptimeMillis(); WebViewLibraryLoader.loadNativeLibrary(clazzLoader, getWebViewLibrary(sPackageInfo.applicationInfo)); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()"); sTimestamps[NATIVE_LOAD_END] = sTimestamps[PROVIDER_CLASS_FOR_NAME_START] = sTimestamps.mNativeLoadEnd = sTimestamps.mProviderClassForNameStart = SystemClock.uptimeMillis(); try { return getWebViewProviderClass(clazzLoader); } finally { sTimestamps[PROVIDER_CLASS_FOR_NAME_END] = SystemClock.uptimeMillis(); sTimestamps.mProviderClassForNameEnd = SystemClock.uptimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (ClassNotFoundException e) { Loading Loading @@ -529,9 +580,4 @@ public final class WebViewFactory { return IWebViewUpdateService.Stub.asInterface( ServiceManager.getService(WEBVIEW_UPDATE_SERVICE_NAME)); } @NonNull static long[] getTimestamps() { return sTimestamps; } } Loading
core/api/system-current.txt +15 −12 Original line number Diff line number Diff line Loading @@ -14733,7 +14733,7 @@ package android.webkit { method public String getDataDirectorySuffix(); method public String getErrorString(android.content.Context, int); method public int getPackageId(android.content.res.Resources, String); method @NonNull public long[] getTimestamps(); method @NonNull public android.webkit.WebViewFactory.StartupTimestamps getStartupTimestamps(); method @Deprecated public void invokeDrawGlFunctor(android.view.View, long, boolean); method public boolean isMultiProcessEnabled(); method public boolean isTraceTagEnabled(); Loading @@ -14749,12 +14749,6 @@ package android.webkit { method public static android.content.pm.PackageInfo getLoadedPackageInfo(); method public static int loadWebViewNativeLibraryFromPackage(String, ClassLoader); method public static void prepareWebViewInZygote(); field public static final int ADD_ASSETS_END = 4; // 0x4 field public static final int ADD_ASSETS_START = 3; // 0x3 field public static final int CREATE_CONTEXT_END = 2; // 0x2 field public static final int CREATE_CONTEXT_START = 1; // 0x1 field public static final int GET_CLASS_LOADER_END = 6; // 0x6 field public static final int GET_CLASS_LOADER_START = 5; // 0x5 field public static final int LIBLOAD_ADDRESS_SPACE_NOT_RESERVED = 2; // 0x2 field public static final int LIBLOAD_FAILED_JNI_CALL = 7; // 0x7 field public static final int LIBLOAD_FAILED_LISTING_WEBVIEW_PACKAGES = 4; // 0x4 Loading @@ -14765,11 +14759,20 @@ package android.webkit { field public static final int LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN = 8; // 0x8 field public static final int LIBLOAD_SUCCESS = 0; // 0x0 field public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; // 0x1 field public static final int NATIVE_LOAD_END = 8; // 0x8 field public static final int NATIVE_LOAD_START = 7; // 0x7 field public static final int PROVIDER_CLASS_FOR_NAME_END = 10; // 0xa field public static final int PROVIDER_CLASS_FOR_NAME_START = 9; // 0x9 field public static final int WEBVIEW_LOAD_START = 0; // 0x0 } public static class WebViewFactory.StartupTimestamps { method public long getAddAssetsEnd(); method public long getAddAssetsStart(); method public long getCreateContextEnd(); method public long getCreateContextStart(); method public long getGetClassLoaderEnd(); method public long getGetClassLoaderStart(); method public long getNativeLoadEnd(); method public long getNativeLoadStart(); method public long getProviderClassForNameEnd(); method public long getProviderClassForNameStart(); method public long getWebViewLoadStart(); } public interface WebViewFactoryProvider {
core/java/android/webkit/WebViewDelegate.java +3 −6 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package android.webkit; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.UptimeMillisLong; import android.app.ActivityThread; import android.app.Application; import android.app.ResourcesManager; Loading Loading @@ -221,14 +220,12 @@ public final class WebViewDelegate { } /** * Returns an array of startup timestamps. For the specification of array * see {@link WebViewFactory.Timestamp}. * Get the timestamps at which various WebView startup events occurred in this process. * This method must be called on the same thread where the * WebViewChromiumFactoryProvider#create method was invoked. */ @NonNull @UptimeMillisLong public long[] getTimestamps() { return WebViewFactory.getTimestamps(); public WebViewFactory.StartupTimestamps getStartupTimestamps() { return WebViewFactory.getStartupTimestamps(); } }
core/java/android/webkit/WebViewFactory.java +100 −54 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.webkit; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.annotation.UptimeMillisLong; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.Application; Loading @@ -38,8 +38,6 @@ import android.util.ArraySet; import android.util.Log; import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; /** Loading Loading @@ -72,44 +70,6 @@ public final class WebViewFactory { private static boolean sWebViewDisabled; private static String sDataDirectorySuffix; // stored here so it can be set without loading WV // Indices in sTimestamps array. /** @hide */ @IntDef(value = { WEBVIEW_LOAD_START, CREATE_CONTEXT_START, CREATE_CONTEXT_END, ADD_ASSETS_START, ADD_ASSETS_END, GET_CLASS_LOADER_START, GET_CLASS_LOADER_END, NATIVE_LOAD_START, NATIVE_LOAD_END, PROVIDER_CLASS_FOR_NAME_START, PROVIDER_CLASS_FOR_NAME_END}) @Retention(RetentionPolicy.SOURCE) public @interface Timestamp { } /** When the overall WebView provider load began. */ public static final int WEBVIEW_LOAD_START = 0; /** Before creating the WebView APK Context. */ public static final int CREATE_CONTEXT_START = 1; /** After creating the WebView APK Context. */ public static final int CREATE_CONTEXT_END = 2; /** Before adding WebView assets to AssetManager. */ public static final int ADD_ASSETS_START = 3; /** After adding WebView assets to AssetManager. */ public static final int ADD_ASSETS_END = 4; /** Before creating the WebView ClassLoader. */ public static final int GET_CLASS_LOADER_START = 5; /** After creating the WebView ClassLoader. */ public static final int GET_CLASS_LOADER_END = 6; /** Before preloading the WebView native library. */ public static final int NATIVE_LOAD_START = 7; /** After preloading the WebView native library. */ public static final int NATIVE_LOAD_END = 8; /** Before looking up the WebView provider class. */ public static final int PROVIDER_CLASS_FOR_NAME_START = 9; /** After looking up the WebView provider class. */ public static final int PROVIDER_CLASS_FOR_NAME_END = 10; private static final int TIMESTAMPS_SIZE = 11; // WebView startup timestamps. To access elements use {@link Timestamp}. private static long[] sTimestamps = new long[TIMESTAMPS_SIZE]; // Error codes for loadWebViewNativeLibraryFromPackage public static final int LIBLOAD_SUCCESS = 0; public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; Loading @@ -130,6 +90,97 @@ public final class WebViewFactory { // error for namespace lookup public static final int LIBLOAD_FAILED_TO_FIND_NAMESPACE = 10; /** * Stores the timestamps at which various WebView startup events occurred in this process. */ public static class StartupTimestamps { long mWebViewLoadStart; long mCreateContextStart; long mCreateContextEnd; long mAddAssetsStart; long mAddAssetsEnd; long mGetClassLoaderStart; long mGetClassLoaderEnd; long mNativeLoadStart; long mNativeLoadEnd; long mProviderClassForNameStart; long mProviderClassForNameEnd; StartupTimestamps() {} /** When the overall WebView provider load began. */ @UptimeMillisLong public long getWebViewLoadStart() { return mWebViewLoadStart; } /** Before creating the WebView APK Context. */ @UptimeMillisLong public long getCreateContextStart() { return mCreateContextStart; } /** After creating the WebView APK Context. */ @UptimeMillisLong public long getCreateContextEnd() { return mCreateContextEnd; } /** Before adding WebView assets to AssetManager. */ @UptimeMillisLong public long getAddAssetsStart() { return mAddAssetsStart; } /** After adding WebView assets to AssetManager. */ @UptimeMillisLong public long getAddAssetsEnd() { return mAddAssetsEnd; } /** Before creating the WebView ClassLoader. */ @UptimeMillisLong public long getGetClassLoaderStart() { return mGetClassLoaderStart; } /** After creating the WebView ClassLoader. */ @UptimeMillisLong public long getGetClassLoaderEnd() { return mGetClassLoaderEnd; } /** Before preloading the WebView native library. */ @UptimeMillisLong public long getNativeLoadStart() { return mNativeLoadStart; } /** After preloading the WebView native library. */ @UptimeMillisLong public long getNativeLoadEnd() { return mNativeLoadEnd; } /** Before looking up the WebView provider class. */ @UptimeMillisLong public long getProviderClassForNameStart() { return mProviderClassForNameStart; } /** After looking up the WebView provider class. */ @UptimeMillisLong public long getProviderClassForNameEnd() { return mProviderClassForNameEnd; } } static final StartupTimestamps sTimestamps = new StartupTimestamps(); @NonNull static StartupTimestamps getStartupTimestamps() { return sTimestamps; } private static String getWebViewPreparationErrorReason(int error) { switch (error) { Loading Loading @@ -273,7 +324,7 @@ public final class WebViewFactory { // us honest and minimize usage of WebView internals when binding the proxy. if (sProviderInstance != null) return sProviderInstance; sTimestamps[WEBVIEW_LOAD_START] = SystemClock.uptimeMillis(); sTimestamps.mWebViewLoadStart = SystemClock.uptimeMillis(); final int uid = android.os.Process.myUid(); if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID || uid == android.os.Process.PHONE_UID || uid == android.os.Process.NFC_UID Loading Loading @@ -413,7 +464,7 @@ public final class WebViewFactory { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "initialApplication.createApplicationContext"); sTimestamps[CREATE_CONTEXT_START] = SystemClock.uptimeMillis(); sTimestamps.mCreateContextStart = SystemClock.uptimeMillis(); try { // Construct an app context to load the Java code into the current app. Context webViewContext = initialApplication.createApplicationContext( Loading @@ -422,7 +473,7 @@ public final class WebViewFactory { sPackageInfo = newPackageInfo; return webViewContext; } finally { sTimestamps[CREATE_CONTEXT_END] = SystemClock.uptimeMillis(); sTimestamps.mCreateContextEnd = SystemClock.uptimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (RemoteException | PackageManager.NameNotFoundException e) { Loading @@ -448,26 +499,26 @@ public final class WebViewFactory { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.getChromiumProviderClass()"); try { sTimestamps[ADD_ASSETS_START] = SystemClock.uptimeMillis(); sTimestamps.mAddAssetsStart = SystemClock.uptimeMillis(); for (String newAssetPath : webViewContext.getApplicationInfo().getAllApkPaths()) { initialApplication.getAssets().addAssetPathAsSharedLibrary(newAssetPath); } sTimestamps[ADD_ASSETS_END] = sTimestamps[GET_CLASS_LOADER_START] = sTimestamps.mAddAssetsEnd = sTimestamps.mGetClassLoaderStart = SystemClock.uptimeMillis(); ClassLoader clazzLoader = webViewContext.getClassLoader(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.loadNativeLibrary()"); sTimestamps[GET_CLASS_LOADER_END] = sTimestamps[NATIVE_LOAD_START] = sTimestamps.mGetClassLoaderEnd = sTimestamps.mNativeLoadStart = SystemClock.uptimeMillis(); WebViewLibraryLoader.loadNativeLibrary(clazzLoader, getWebViewLibrary(sPackageInfo.applicationInfo)); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()"); sTimestamps[NATIVE_LOAD_END] = sTimestamps[PROVIDER_CLASS_FOR_NAME_START] = sTimestamps.mNativeLoadEnd = sTimestamps.mProviderClassForNameStart = SystemClock.uptimeMillis(); try { return getWebViewProviderClass(clazzLoader); } finally { sTimestamps[PROVIDER_CLASS_FOR_NAME_END] = SystemClock.uptimeMillis(); sTimestamps.mProviderClassForNameEnd = SystemClock.uptimeMillis(); Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (ClassNotFoundException e) { Loading Loading @@ -529,9 +580,4 @@ public final class WebViewFactory { return IWebViewUpdateService.Stub.asInterface( ServiceManager.getService(WEBVIEW_UPDATE_SERVICE_NAME)); } @NonNull static long[] getTimestamps() { return sTimestamps; } }