egimenez
egimenez

Reputation: 65

android webview measure times of all resources

It is possible to measure the load time of all the resources of a webview? For example for loading the complete web, I use:

public void onPageStarted(WebView view, String url, Bitmap favicon) {
    startingTime = System.currentTimeMillis();
    super.onPageStarted(view, url, favicon);
}

public void onPageFinished(WebView view, String url) {
    timeElapsed = System.currentTimeMillis() - startingTime;               
    super.onPageFinished(view, url);
}

but to measure the load of CSS, images, etc. I use

public HashMap<String, Long> resources = new HashMap<String, Long>();

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){
        resources.put(request.getUrl().toString(), System.currentTimeMillis()); 
        WebResourceResponse response =  super.shouldInterceptRequest(view, request);
        return response;
}

public void onLoadResource(WebView view, String url) {
        if(resources.containsKey(url)){
            Long timeStartResource = resources.get(url);
            Long timeElapseResource = System.currentTimeMillis() - timeStartResource;
        }
        super.onLoadResource(view, url);
}

I thought the onLoadResource method is executed when the resource was loaded but according to documentation

public void onLoadResource (WebView view, String url).
Notify the host application that the WebView will load the resource specified by the given url.

And

public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
Notify the host application of a resource request and allow the application to return the data. If the return value is null, the WebView will continue to load the resource as usual. Otherwise, the return response and data will be used.

Both they run before loading the resource. Is there any way to measure these times?

Upvotes: 2

Views: 2280

Answers (2)

Mikhail Naganov
Mikhail Naganov

Reputation: 6871

There is a great HTML5 API for that accessible to your page. See http://www.sitepoint.com/introduction-resource-timing-api/

Starting from KitKat, WebView is based on Chromium, which supports this API. To check that, open remote web debugging for your app (assuming that you have enabled JavaScript for your WebView), and try evaluating in console:

window.performance.getEntriesByType('resource')

You will get an array of PerformanceResourceTiming objects for each resource your page has loaded.

In order to transport your information to Java side, you can use an injected Java object.

Upvotes: 2

Keyur Lakhani
Keyur Lakhani

Reputation: 4381

That you can done using onPageFinished() and answer of this question is already given description here.

Upvotes: 0

Related Questions