Commit a61a583d authored by Michael van Ouwerkerk's avatar Michael van Ouwerkerk Committed by Commit Bot

Record latency histograms for custom tabs dynamic modules.

Bug: 853791
Change-Id: I3349c450d8b285bcfdea69e6342350941d121353
Reviewed-on: https://chromium-review.googlesource.com/1120503
Commit-Queue: Michael van Ouwerkerk <mvanouwerkerk@chromium.org>
Reviewed-by: default avatarRobert Kaplow <rkaplow@chromium.org>
Reviewed-by: default avatarBenoit L <lizeb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572307}
parent 03d83933
...@@ -62,6 +62,7 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager; ...@@ -62,6 +62,7 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.customtabs.dynamicmodule.ActivityDelegate; import org.chromium.chrome.browser.customtabs.dynamicmodule.ActivityDelegate;
import org.chromium.chrome.browser.customtabs.dynamicmodule.ActivityHostImpl; import org.chromium.chrome.browser.customtabs.dynamicmodule.ActivityHostImpl;
import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleEntryPoint; import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleEntryPoint;
import org.chromium.chrome.browser.customtabs.dynamicmodule.ModuleMetrics;
import org.chromium.chrome.browser.datausage.DataUseTabUIManager; import org.chromium.chrome.browser.datausage.DataUseTabUIManager;
import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
...@@ -371,7 +372,9 @@ public class CustomTabActivity extends ChromeActivity { ...@@ -371,7 +372,9 @@ public class CustomTabActivity extends ChromeActivity {
ModuleEntryPoint entryPoint = mConnection.loadModule(packageName, className); ModuleEntryPoint entryPoint = mConnection.loadModule(packageName, className);
if (entryPoint == null) return; if (entryPoint == null) return;
long createActivityDelegateStartTime = ModuleMetrics.now();
mActivityDelegate = entryPoint.createActivityDelegate(new ActivityHostImpl(this)); mActivityDelegate = entryPoint.createActivityDelegate(new ActivityHostImpl(this));
ModuleMetrics.recordCreateActivityDelegateTime(createActivityDelegateStartTime);
mActivityDelegate.onCreate(getSavedInstanceState()); mActivityDelegate.onCreate(getSavedInstanceState());
} }
......
...@@ -36,9 +36,13 @@ public final class ModuleLoader { ...@@ -36,9 +36,13 @@ public final class ModuleLoader {
if (moduleContext == null) return null; if (moduleContext == null) return null;
try { try {
long entryPointLoadClassStartTime = ModuleMetrics.now();
Class<?> clazz = moduleContext.getClassLoader().loadClass(className); Class<?> clazz = moduleContext.getClassLoader().loadClass(className);
ModuleMetrics.recordLoadClassTime(entryPointLoadClassStartTime);
long entryPointNewInstanceStartTime = ModuleMetrics.now();
IBinder binder = (IBinder) clazz.newInstance(); IBinder binder = (IBinder) clazz.newInstance();
ModuleMetrics.recordEntryPointNewInstanceTime(entryPointNewInstanceStartTime);
ModuleHostImpl moduleHost = new ModuleHostImpl(applicationContext, moduleContext); ModuleHostImpl moduleHost = new ModuleHostImpl(applicationContext, moduleContext);
ModuleEntryPoint entryPoint = ModuleEntryPoint entryPoint =
...@@ -67,8 +71,10 @@ public final class ModuleLoader { ...@@ -67,8 +71,10 @@ public final class ModuleLoader {
try { try {
// The flags Context.CONTEXT_INCLUDE_CODE and Context.CONTEXT_IGNORE_SECURITY are // The flags Context.CONTEXT_INCLUDE_CODE and Context.CONTEXT_IGNORE_SECURITY are
// needed to be able to load classes via the classloader of the returned context. // needed to be able to load classes via the classloader of the returned context.
long createPackageContextStartTime = ModuleMetrics.now();
Context moduleContext = applicationContext.createPackageContext( Context moduleContext = applicationContext.createPackageContext(
packageName, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); packageName, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
ModuleMetrics.recordCreatePackageContextTime(createPackageContextStartTime);
return moduleContext; return moduleContext;
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Could not create package context for %s", packageName, e); Log.e(TAG, "Could not create package context for %s", packageName, e);
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.customtabs.dynamicmodule;
import android.os.SystemClock;
import org.chromium.base.metrics.RecordHistogram;
import java.util.concurrent.TimeUnit;
/**
* Records metrics related to custom tabs dynamic modules.
*/
public final class ModuleMetrics {
private ModuleMetrics() {}
/**
* SystemClock.uptimeMillis() is used here as it uses the same system call as all the native
* side of Chrome, and this is the same clock used for page load metrics.
*
* @return Milliseconds since boot, not counting time spent in deep sleep.
*/
public static long now() {
return SystemClock.uptimeMillis();
}
public static void recordCreateActivityDelegateTime(long startTime) {
RecordHistogram.recordMediumTimesHistogram(
"CustomTabs.DynamicModule.CreateActivityDelegateTime", now() - startTime,
TimeUnit.MILLISECONDS);
}
public static void recordCreatePackageContextTime(long startTime) {
RecordHistogram.recordMediumTimesHistogram(
"CustomTabs.DynamicModule.CreatePackageContextTime", now() - startTime,
TimeUnit.MILLISECONDS);
}
public static void recordLoadClassTime(long startTime) {
RecordHistogram.recordMediumTimesHistogram(
"CustomTabs.DynamicModule.EntryPointLoadClassTime", now() - startTime,
TimeUnit.MILLISECONDS);
}
public static void recordEntryPointNewInstanceTime(long startTime) {
RecordHistogram.recordMediumTimesHistogram(
"CustomTabs.DynamicModule.EntryPointNewInstanceTime", now() - startTime,
TimeUnit.MILLISECONDS);
}
}
...@@ -383,6 +383,7 @@ chrome_java_sources = [ ...@@ -383,6 +383,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleEntryPoint.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleEntryPoint.java",
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleHostImpl.java",
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java",
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java",
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.java",
"java/src/org/chromium/chrome/browser/database/SQLiteCursor.java", "java/src/org/chromium/chrome/browser/database/SQLiteCursor.java",
"java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java", "java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java",
......
...@@ -14896,6 +14896,39 @@ uploading your change for review. ...@@ -14896,6 +14896,39 @@ uploading your change for review.
</summary> </summary>
</histogram> </histogram>
<histogram name="CustomTabs.DynamicModule.CreateActivityDelegateTime"
units="ms">
<owner>mvanouwerkerk@chromium.org</owner>
<summary>
Time to create an activity delegate for a custom tabs dynamic module.
Android only.
</summary>
</histogram>
<histogram name="CustomTabs.DynamicModule.CreatePackageContextTime" units="ms">
<owner>mvanouwerkerk@chromium.org</owner>
<summary>
Time to create the package context for a custom tabs dynamic module. Android
only.
</summary>
</histogram>
<histogram name="CustomTabs.DynamicModule.EntryPointLoadClassTime" units="ms">
<owner>mvanouwerkerk@chromium.org</owner>
<summary>
Time to load the entry point class for a custom tabs dynamic module. Android
only.
</summary>
</histogram>
<histogram name="CustomTabs.DynamicModule.EntryPointNewInstanceTime" units="ms">
<owner>mvanouwerkerk@chromium.org</owner>
<summary>
Time to instantiate the entry point class for a custom tabs dynamic module.
Android only.
</summary>
</histogram>
<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms"> <histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms">
<obsolete> <obsolete>
Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*. Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment