Commit 51d19641 authored by Mohamed Heikal's avatar Mohamed Heikal Committed by Commit Bot

[Android] Improve tracing in ChromeActvity

Adds more tracing calls in ChromeActivity and other related startup code. Also
fixes two presubmit warnings.

Change-Id: Ida5d6ac0024dfa42a7e9c4aa3179bd7b55c4363f
Reviewed-on: https://chromium-review.googlesource.com/1072409
Commit-Queue: Mohamed Heikal <mheikal@chromium.org>
Reviewed-by: default avatarBernhard Bauer <bauerb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#561901}
parent d00bd79c
...@@ -20,7 +20,6 @@ import android.net.Uri; ...@@ -20,7 +20,6 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.StrictMode;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.CallSuper; import android.support.annotation.CallSuper;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
...@@ -46,6 +45,7 @@ import org.chromium.base.Callback; ...@@ -46,6 +45,7 @@ import org.chromium.base.Callback;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.DiscardableReferencePool; import org.chromium.base.DiscardableReferencePool;
import org.chromium.base.StrictModeContext;
import org.chromium.base.SysUtils; import org.chromium.base.SysUtils;
import org.chromium.base.TraceEvent; import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
...@@ -348,6 +348,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -348,6 +348,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@SuppressLint("NewApi") @SuppressLint("NewApi")
@Override @Override
public void postInflationStartup() { public void postInflationStartup() {
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) {
super.postInflationStartup(); super.postInflationStartup();
Intent intent = getIntent(); Intent intent = getIntent();
...@@ -371,19 +372,23 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -371,19 +372,23 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we manually // If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we manually
// override SysUtils.isLowEndDevice() with a switch so that they continue to see the // override SysUtils.isLowEndDevice() with a switch so that they continue to see the
// normal UI. This is only the case for grandfathered-in svelte users. We no longer do // normal UI. This is only the case for grandfathered-in svelte users. We no longer
// do
// so for newer users. // so for newer users.
if (!ChromePreferenceManager.getInstance().getAllowLowEndDeviceUi()) { if (!ChromePreferenceManager.getInstance().getAllowLowEndDeviceUi()) {
CommandLine.getInstance().appendSwitch(BaseSwitches.DISABLE_LOW_END_DEVICE_MODE); CommandLine.getInstance().appendSwitch(
BaseSwitches.DISABLE_LOW_END_DEVICE_MODE);
} }
} }
AccessibilityManager manager = (AccessibilityManager) AccessibilityManager manager = (AccessibilityManager) getBaseContext().getSystemService(
getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE); Context.ACCESSIBILITY_SERVICE);
manager.addAccessibilityStateChangeListener(this); manager.addAccessibilityStateChangeListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mTouchExplorationStateChangeListener = enabled -> checkAccessibility(); mTouchExplorationStateChangeListener = enabled -> checkAccessibility();
manager.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); manager.addTouchExplorationStateChangeListener(
mTouchExplorationStateChangeListener);
} }
// Make the activity listen to policy change events // Make the activity listen to policy change events
...@@ -392,7 +397,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -392,7 +397,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
// Set up the animation placeholder to be the SurfaceView. This disables the // Set up the animation placeholder to be the SurfaceView. This disables the
// SurfaceView's 'hole' clipping during animations that are notified to the window. // SurfaceView's 'hole' clipping during animations that are notified to the window.
getWindowAndroid().setAnimationPlaceholderView(mCompositorViewHolder.getCompositorView()); getWindowAndroid().setAnimationPlaceholderView(
mCompositorViewHolder.getCompositorView());
mManualFillingController = new ManualFillingCoordinator(getWindowAndroid(), mManualFillingController = new ManualFillingCoordinator(getWindowAndroid(),
findViewById(R.id.keyboard_accessory_stub), findViewById(R.id.keyboard_accessory_stub),
...@@ -403,8 +409,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -403,8 +409,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (!isFinishing() && getFullscreenManager() != null) { if (!isFinishing() && getFullscreenManager() != null) {
getFullscreenManager().initialize( getFullscreenManager().initialize(
(ControlContainer) findViewById(R.id.control_container), (ControlContainer) findViewById(R.id.control_container),
getTabModelSelector(), getTabModelSelector(), getControlContainerHeightResource());
getControlContainerHeightResource());
} }
((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager); ((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager);
...@@ -412,6 +417,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -412,6 +417,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
mModalDialogManager = createModalDialogManager(); mModalDialogManager = createModalDialogManager();
mPageViewTimer = new PageViewTimer(mTabModelSelector); mPageViewTimer = new PageViewTimer(mTabModelSelector);
} }
}
@Override @Override
protected void initializeStartupMetrics() { protected void initializeStartupMetrics() {
...@@ -437,8 +443,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -437,8 +443,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@Override @Override
protected final void setContentView() { protected final void setContentView() {
final long begin = SystemClock.elapsedRealtime(); final long begin = SystemClock.elapsedRealtime();
TraceEvent.begin("onCreate->setContentView()"); try (TraceEvent te = TraceEvent.scoped("ChromeActivity.setContentView")) {
SelectionPopupController.setShouldGetReadbackViewFromWindowAndroid(); SelectionPopupController.setShouldGetReadbackViewFromWindowAndroid();
enableHardwareAcceleration(); enableHardwareAcceleration();
...@@ -456,19 +461,25 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -456,19 +461,25 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
// Allow disk access for the content view and toolbar container setup. // Allow disk access for the content view and toolbar container setup.
// On certain android devices this setup sequence results in disk writes outside // On certain android devices this setup sequence results in disk writes outside
// of our control, so we have to disable StrictMode to work. See crbug.com/639352. // of our control, so we have to disable StrictMode to work. See
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); // https://crbug.com/639352.
try { try (StrictModeContext smc = StrictModeContext.allowDiskWrites()) {
TraceEvent.begin("setContentView(R.layout.main)");
setContentView(R.layout.main); setContentView(R.layout.main);
TraceEvent.end("setContentView(R.layout.main)");
if (controlContainerLayoutId != NO_CONTROL_CONTAINER) { if (controlContainerLayoutId != NO_CONTROL_CONTAINER) {
ViewStub toolbarContainerStub = ViewStub toolbarContainerStub =
((ViewStub) findViewById(R.id.control_container_stub)); ((ViewStub) findViewById(R.id.control_container_stub));
toolbarContainerStub.setLayoutResource(controlContainerLayoutId); toolbarContainerStub.setLayoutResource(controlContainerLayoutId);
TraceEvent.begin("toolbarContainerStub.inflate");
toolbarContainerStub.inflate(); toolbarContainerStub.inflate();
TraceEvent.end("toolbarContainerStub.inflate");
} }
// It cannot be assumed that the result of toolbarContainerStub.inflate() will be // It cannot be assumed that the result of toolbarContainerStub.inflate() will
// be
// the control container since it may be wrapped in another view. // the control container since it may be wrapped in another view.
ControlContainer controlContainer = ControlContainer controlContainer =
(ControlContainer) findViewById(R.id.control_container); (ControlContainer) findViewById(R.id.control_container);
...@@ -478,23 +489,21 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -478,23 +489,21 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (toolbarLayoutId != NO_TOOLBAR_LAYOUT && controlContainer != null) { if (toolbarLayoutId != NO_TOOLBAR_LAYOUT && controlContainer != null) {
controlContainer.initWithToolbar(toolbarLayoutId); controlContainer.initWithToolbar(toolbarLayoutId);
} }
} finally {
StrictMode.setThreadPolicy(oldPolicy);
} }
} }
TraceEvent.end("onCreate->setContentView()");
mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin; mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin;
// Set the status bar color to black by default. This is an optimization for // Set the status bar color to black by default. This is an optimization for
// Chrome not to draw under status and navigation bars when we use the default // Chrome not to draw under status and navigation bars when we use the default
// black status bar // black status bar
setStatusBarColor(null, Color.BLACK); setStatusBarColor(null, Color.BLACK);
ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView(); ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView();
mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.compositor_view_holder); mCompositorViewHolder =
(CompositorViewHolder) findViewById(R.id.compositor_view_holder);
mCompositorViewHolder.setRootView(rootView); mCompositorViewHolder.setRootView(rootView);
// Setting fitsSystemWindows to false ensures that the root view doesn't consume the insets. // Setting fitsSystemWindows to false ensures that the root view doesn't consume the
// insets.
rootView.setFitsSystemWindows(false); rootView.setFitsSystemWindows(false);
// Add a custom view right after the root view that stores the insets to access later. // Add a custom view right after the root view that stores the insets to access later.
...@@ -503,6 +512,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -503,6 +512,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
mInsetObserverView = InsetObserverView.create(this); mInsetObserverView = InsetObserverView.create(this);
rootView.addView(mInsetObserverView, 0); rootView.addView(mInsetObserverView, 0);
} }
}
@Override @Override
public boolean shouldStartGpuProcess() { public boolean shouldStartGpuProcess() {
...@@ -514,12 +524,13 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -514,12 +524,13 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
* {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar. * {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar.
*/ */
protected void initializeToolbar() { protected void initializeToolbar() {
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.initializeToolbar")) {
final View controlContainer = findViewById(R.id.control_container); final View controlContainer = findViewById(R.id.control_container);
assert controlContainer != null; assert controlContainer != null;
ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer; ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer;
mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate(); mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate();
mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesDelegate, mAppMenuHandler = sAppMenuHandlerFactory.get(
getAppMenuLayoutId()); this, mAppMenuPropertiesDelegate, getAppMenuLayoutId());
Callback<Boolean> urlFocusChangedCallback = hasFocus -> onOmniboxFocusChanged(hasFocus); Callback<Boolean> urlFocusChangedCallback = hasFocus -> onOmniboxFocusChanged(hasFocus);
mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler, mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler,
mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator(), mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator(),
...@@ -550,6 +561,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -550,6 +561,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
public void onMenuHighlightChanged(boolean highlighting) {} public void onMenuHighlightChanged(boolean highlighting) {}
}); });
} }
}
/** /**
* Initialize the {@link TabModelSelector}, {@link TabModel}s, and * Initialize the {@link TabModelSelector}, {@link TabModel}s, and
......
...@@ -15,6 +15,7 @@ import android.view.View; ...@@ -15,6 +15,7 @@ import android.view.View;
import android.view.ViewStub; import android.view.ViewStub;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler; import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
import org.chromium.chrome.browser.compositor.resources.ResourceFactory; import org.chromium.chrome.browser.compositor.resources.ResourceFactory;
...@@ -84,18 +85,23 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta ...@@ -84,18 +85,23 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta
@Override @Override
public void initWithToolbar(int toolbarLayoutId) { public void initWithToolbar(int toolbarLayoutId) {
try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) {
ViewStub toolbarStub = (ViewStub) findViewById(R.id.toolbar_stub); ViewStub toolbarStub = (ViewStub) findViewById(R.id.toolbar_stub);
toolbarStub.setLayoutResource(toolbarLayoutId); toolbarStub.setLayoutResource(toolbarLayoutId);
toolbarStub.inflate(); toolbarStub.inflate();
mToolbar = (Toolbar) findViewById(R.id.toolbar); mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbarContainer = (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); mToolbarContainer =
(ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container);
mToolbarContainer.setToolbar(mToolbar); mToolbarContainer.setToolbar(mToolbar);
mMenuBtn = findViewById(R.id.menu_button); mMenuBtn = findViewById(R.id.menu_button);
if (mToolbar instanceof ToolbarTablet) { if (mToolbar instanceof ToolbarTablet) {
// On tablet, draw a fake tab strip and toolbar until the compositor is ready to draw // On tablet, draw a fake tab strip and toolbar until the compositor is ready to
// the real tab strip. (On phone, the toolbar is made entirely of Android views, which // draw
// the real tab strip. (On phone, the toolbar is made entirely of Android views,
// which
// are already initialized.) // are already initialized.)
setBackgroundResource(R.drawable.toolbar_background); setBackgroundResource(R.drawable.toolbar_background);
} }
...@@ -103,6 +109,7 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta ...@@ -103,6 +109,7 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta
assert mToolbar != null; assert mToolbar != null;
assert mMenuBtn != null; assert mMenuBtn != null;
} }
}
@Override @Override
public boolean gatherTransparentRegion(Region region) { public boolean gatherTransparentRegion(Region region) {
......
...@@ -50,6 +50,7 @@ import android.widget.PopupWindow.OnDismissListener; ...@@ -50,6 +50,7 @@ import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView; import android.widget.TextView;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
...@@ -360,6 +361,7 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -360,6 +361,7 @@ public class ToolbarPhone extends ToolbarLayout
@Override @Override
public void onFinishInflate() { public void onFinishInflate() {
try (TraceEvent te = TraceEvent.scoped("ToolbarPhone.onFinishInflate")) {
super.onFinishInflate(); super.onFinishInflate();
mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar); mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar);
...@@ -374,7 +376,8 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -374,7 +376,8 @@ public class ToolbarPhone extends ToolbarLayout
mBrowsingModeViews.add(mLocationBar); mBrowsingModeViews.add(mLocationBar);
mToolbarBackground = new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL)); mToolbarBackground =
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
mTabSwitcherAnimationBgOverlay = mTabSwitcherAnimationBgOverlay =
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL)); new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
...@@ -387,6 +390,7 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -387,6 +390,7 @@ public class ToolbarPhone extends ToolbarLayout
setWillNotDraw(false); setWillNotDraw(false);
} }
}
/** /**
* Initializes the background, padding, margins, etc. for the location bar background. * Initializes the background, padding, margins, etc. for the location bar background.
......
...@@ -31,6 +31,7 @@ import org.chromium.base.ActivityState; ...@@ -31,6 +31,7 @@ import org.chromium.base.ActivityState;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
...@@ -585,13 +586,14 @@ public class WebappActivity extends SingleTabActivity { ...@@ -585,13 +586,14 @@ public class WebappActivity extends SingleTabActivity {
} }
private void initializeWebappData() { private void initializeWebappData() {
try (TraceEvent te = TraceEvent.scoped("WebappActivity.initializeWebappData")) {
if (mWebappInfo.displayMode() == WebDisplayMode.FULLSCREEN) { if (mWebappInfo.displayMode() == WebDisplayMode.FULLSCREEN) {
enterImmersiveMode(); enterImmersiveMode();
} }
ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content); ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
mSplashController.showSplashScreen(getActivityType(), contentView, mWebappInfo); mSplashController.showSplashScreen(getActivityType(), contentView, mWebappInfo);
} }
}
protected void updateStorage(WebappDataStorage storage) { protected void updateStorage(WebappDataStorage storage) {
// The information in the WebappDataStorage may have been purged by the // The information in the WebappDataStorage may have been purged by the
......
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