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;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.os.SystemClock;
import android.support.annotation.CallSuper;
import android.util.DisplayMetrics;
......@@ -46,6 +45,7 @@ import org.chromium.base.Callback;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
import org.chromium.base.DiscardableReferencePool;
import org.chromium.base.StrictModeContext;
import org.chromium.base.SysUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
......@@ -348,6 +348,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@SuppressLint("NewApi")
@Override
public void postInflationStartup() {
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) {
super.postInflationStartup();
Intent intent = getIntent();
......@@ -371,19 +372,23 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
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
// 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.
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)
getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
AccessibilityManager manager = (AccessibilityManager) getBaseContext().getSystemService(
Context.ACCESSIBILITY_SERVICE);
manager.addAccessibilityStateChangeListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mTouchExplorationStateChangeListener = enabled -> checkAccessibility();
manager.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener);
manager.addTouchExplorationStateChangeListener(
mTouchExplorationStateChangeListener);
}
// Make the activity listen to policy change events
......@@ -392,7 +397,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
// Set up the animation placeholder to be the SurfaceView. This disables the
// SurfaceView's 'hole' clipping during animations that are notified to the window.
getWindowAndroid().setAnimationPlaceholderView(mCompositorViewHolder.getCompositorView());
getWindowAndroid().setAnimationPlaceholderView(
mCompositorViewHolder.getCompositorView());
mManualFillingController = new ManualFillingCoordinator(getWindowAndroid(),
findViewById(R.id.keyboard_accessory_stub),
......@@ -403,8 +409,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (!isFinishing() && getFullscreenManager() != null) {
getFullscreenManager().initialize(
(ControlContainer) findViewById(R.id.control_container),
getTabModelSelector(),
getControlContainerHeightResource());
getTabModelSelector(), getControlContainerHeightResource());
}
((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager);
......@@ -412,6 +417,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
mModalDialogManager = createModalDialogManager();
mPageViewTimer = new PageViewTimer(mTabModelSelector);
}
}
@Override
protected void initializeStartupMetrics() {
......@@ -437,8 +443,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@Override
protected final void setContentView() {
final long begin = SystemClock.elapsedRealtime();
TraceEvent.begin("onCreate->setContentView()");
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.setContentView")) {
SelectionPopupController.setShouldGetReadbackViewFromWindowAndroid();
enableHardwareAcceleration();
......@@ -456,19 +461,25 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
// Allow disk access for the content view and toolbar container setup.
// 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.
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
try {
// of our control, so we have to disable StrictMode to work. See
// https://crbug.com/639352.
try (StrictModeContext smc = StrictModeContext.allowDiskWrites()) {
TraceEvent.begin("setContentView(R.layout.main)");
setContentView(R.layout.main);
TraceEvent.end("setContentView(R.layout.main)");
if (controlContainerLayoutId != NO_CONTROL_CONTAINER) {
ViewStub toolbarContainerStub =
((ViewStub) findViewById(R.id.control_container_stub));
toolbarContainerStub.setLayoutResource(controlContainerLayoutId);
TraceEvent.begin("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.
ControlContainer controlContainer =
(ControlContainer) findViewById(R.id.control_container);
......@@ -478,23 +489,21 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (toolbarLayoutId != NO_TOOLBAR_LAYOUT && controlContainer != null) {
controlContainer.initWithToolbar(toolbarLayoutId);
}
} finally {
StrictMode.setThreadPolicy(oldPolicy);
}
}
TraceEvent.end("onCreate->setContentView()");
mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin;
// 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
// black status bar
setStatusBarColor(null, Color.BLACK);
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);
// 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);
// 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
mInsetObserverView = InsetObserverView.create(this);
rootView.addView(mInsetObserverView, 0);
}
}
@Override
public boolean shouldStartGpuProcess() {
......@@ -514,12 +524,13 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
* {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar.
*/
protected void initializeToolbar() {
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.initializeToolbar")) {
final View controlContainer = findViewById(R.id.control_container);
assert controlContainer != null;
ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer;
mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate();
mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesDelegate,
getAppMenuLayoutId());
mAppMenuHandler = sAppMenuHandlerFactory.get(
this, mAppMenuPropertiesDelegate, getAppMenuLayoutId());
Callback<Boolean> urlFocusChangedCallback = hasFocus -> onOmniboxFocusChanged(hasFocus);
mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler,
mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator(),
......@@ -550,6 +561,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
public void onMenuHighlightChanged(boolean highlighting) {}
});
}
}
/**
* Initialize the {@link TabModelSelector}, {@link TabModel}s, and
......
......@@ -15,6 +15,7 @@ import android.view.View;
import android.view.ViewStub;
import android.widget.FrameLayout;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
import org.chromium.chrome.browser.compositor.resources.ResourceFactory;
......@@ -84,18 +85,23 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta
@Override
public void initWithToolbar(int toolbarLayoutId) {
try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) {
ViewStub toolbarStub = (ViewStub) findViewById(R.id.toolbar_stub);
toolbarStub.setLayoutResource(toolbarLayoutId);
toolbarStub.inflate();
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbarContainer = (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container);
mToolbarContainer =
(ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container);
mToolbarContainer.setToolbar(mToolbar);
mMenuBtn = findViewById(R.id.menu_button);
if (mToolbar instanceof ToolbarTablet) {
// On tablet, draw a fake tab strip and toolbar until the compositor is ready to draw
// the real tab strip. (On phone, the toolbar is made entirely of Android views, which
// On tablet, draw a fake tab strip and toolbar until the compositor is ready to
// draw
// the real tab strip. (On phone, the toolbar is made entirely of Android views,
// which
// are already initialized.)
setBackgroundResource(R.drawable.toolbar_background);
}
......@@ -103,6 +109,7 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta
assert mToolbar != null;
assert mMenuBtn != null;
}
}
@Override
public boolean gatherTransparentRegion(Region region) {
......
......@@ -50,6 +50,7 @@ import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
......@@ -360,6 +361,7 @@ public class ToolbarPhone extends ToolbarLayout
@Override
public void onFinishInflate() {
try (TraceEvent te = TraceEvent.scoped("ToolbarPhone.onFinishInflate")) {
super.onFinishInflate();
mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar);
......@@ -374,7 +376,8 @@ public class ToolbarPhone extends ToolbarLayout
mBrowsingModeViews.add(mLocationBar);
mToolbarBackground = new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
mToolbarBackground =
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
mTabSwitcherAnimationBgOverlay =
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
......@@ -387,6 +390,7 @@ public class ToolbarPhone extends ToolbarLayout
setWillNotDraw(false);
}
}
/**
* Initializes the background, padding, margins, etc. for the location bar background.
......
......@@ -31,6 +31,7 @@ import org.chromium.base.ActivityState;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
......@@ -585,13 +586,14 @@ public class WebappActivity extends SingleTabActivity {
}
private void initializeWebappData() {
try (TraceEvent te = TraceEvent.scoped("WebappActivity.initializeWebappData")) {
if (mWebappInfo.displayMode() == WebDisplayMode.FULLSCREEN) {
enterImmersiveMode();
}
ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
mSplashController.showSplashScreen(getActivityType(), contentView, mWebappInfo);
}
}
protected void updateStorage(WebappDataStorage storage) {
// 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