Commit 41cd6f2f authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Move Tab-to-GTS animation flag logic to TabFeatureUtilities.

More logic related to tabs will be moved to TabFeatureUtilities in
follow-ups.

Bug: 1012975
Change-Id: Ib4aa13e2cc94340b733326140656c48d0a5e52c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1857581
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708199}
parent b123e4b8
...@@ -1565,6 +1565,7 @@ chrome_java_sources = [ ...@@ -1565,6 +1565,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/tab/TabContextMenuPopulator.java", "java/src/org/chromium/chrome/browser/tab/TabContextMenuPopulator.java",
"java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java", "java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java",
"java/src/org/chromium/chrome/browser/tab/TabFavicon.java", "java/src/org/chromium/chrome/browser/tab/TabFavicon.java",
"java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java",
"java/src/org/chromium/chrome/browser/tab/TabIdManager.java", "java/src/org/chromium/chrome/browser/tab/TabIdManager.java",
"java/src/org/chromium/chrome/browser/tab/TabImportanceManager.java", "java/src/org/chromium/chrome/browser/tab/TabImportanceManager.java",
"java/src/org/chromium/chrome/browser/tab/TabHelpers.java", "java/src/org/chromium/chrome/browser/tab/TabHelpers.java",
......
...@@ -34,10 +34,10 @@ import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer; ...@@ -34,10 +34,10 @@ import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer;
import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer; import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher; import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher;
import org.chromium.chrome.browser.ui.widget.animation.Interpolators; import org.chromium.chrome.browser.ui.widget.animation.Interpolators;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.ResourceManager;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -109,7 +109,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM ...@@ -109,7 +109,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The Tab-to-GTS animation is done, and it's time to renew the thumbnail without causing // The Tab-to-GTS animation is done, and it's time to renew the thumbnail without causing
// janky frames. // janky frames.
// When animation is off, the thumbnail is already updated when showing the GTS. // When animation is off, the thumbnail is already updated when showing the GTS.
if (FeatureUtilities.isTabToGtsAnimationEnabled()) { if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
// Delay thumbnail taking a bit more to make it less likely to happen before the // Delay thumbnail taking a bit more to make it less likely to happen before the
// thumbnail taking triggered by ThumbnailFetcher. See crbug.com/996385 for details. // thumbnail taking triggered by ThumbnailFetcher. See crbug.com/996385 for details.
new Handler().postDelayed(() -> { new Handler().postDelayed(() -> {
...@@ -127,7 +127,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM ...@@ -127,7 +127,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The Android View version of GTS overview is hidden. // The Android View version of GTS overview is hidden.
// If not doing GTS-to-Tab transition animation, we show the fade-out instead, which was // If not doing GTS-to-Tab transition animation, we show the fade-out instead, which was
// already done. // already done.
if (!FeatureUtilities.isTabToGtsAnimationEnabled()) { if (!TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
postHiding(); postHiding();
return; return;
} }
...@@ -159,7 +159,8 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM ...@@ -159,7 +159,8 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
public void show(long time, boolean animate) { public void show(long time, boolean animate) {
super.show(time, animate); super.show(time, animate);
boolean showShrinkingAnimation = animate && FeatureUtilities.isTabToGtsAnimationEnabled(); boolean showShrinkingAnimation =
animate && TabFeatureUtilities.isTabToGtsAnimationEnabled();
boolean quick = mTabListDelegate.prepareOverview(); boolean quick = mTabListDelegate.prepareOverview();
Log.d(TAG, "SkipSlowZooming = " + getSkipSlowZooming()); Log.d(TAG, "SkipSlowZooming = " + getSkipSlowZooming());
if (getSkipSlowZooming()) { if (getSkipSlowZooming()) {
...@@ -219,7 +220,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM ...@@ -219,7 +220,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
updateCacheVisibleIds(new LinkedList<>(Arrays.asList(sourceTabId))); updateCacheVisibleIds(new LinkedList<>(Arrays.asList(sourceTabId)));
mIsAnimating = true; mIsAnimating = true;
mController.hideOverview(!FeatureUtilities.isTabToGtsAnimationEnabled()); mController.hideOverview(!TabFeatureUtilities.isTabToGtsAnimationEnabled());
} }
@Override @Override
...@@ -442,8 +443,8 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM ...@@ -442,8 +443,8 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The content viewport is intentionally sent as both params below. // The content viewport is intentionally sent as both params below.
mSceneLayer.pushLayers(getContext(), contentViewport, contentViewport, this, mSceneLayer.pushLayers(getContext(), contentViewport, contentViewport, this,
layerTitleCache, tabContentManager, resourceManager, fullscreenManager, layerTitleCache, tabContentManager, resourceManager, fullscreenManager,
FeatureUtilities.isTabToGtsAnimationEnabled() ? mTabListDelegate.getResourceId() TabFeatureUtilities.isTabToGtsAnimationEnabled() ? mTabListDelegate.getResourceId()
: 0, : 0,
mBackgroundAlpha); mBackgroundAlpha);
mFrameCount++; mFrameCount++;
if (mLastFrameTime != 0) { if (mLastFrameTime != 0) {
......
...@@ -36,6 +36,7 @@ import org.chromium.chrome.browser.compositor.animation.CompositorAnimator; ...@@ -36,6 +36,7 @@ import org.chromium.chrome.browser.compositor.animation.CompositorAnimator;
import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabSelectionType; import org.chromium.chrome.browser.tabmodel.TabSelectionType;
import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.tab_ui.R; import org.chromium.chrome.tab_ui.R;
...@@ -105,7 +106,7 @@ public class StartSurfaceLayoutPerfTest { ...@@ -105,7 +106,7 @@ public class StartSurfaceLayoutPerfTest {
mWaitingTime = 1000; mWaitingTime = 1000;
mTabNumCap = 0; mTabNumCap = 0;
} }
assertTrue(FeatureUtilities.isTabToGtsAnimationEnabled()); assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
CriteriaHelper.pollUiThread(Criteria.equals(true, CriteriaHelper.pollUiThread(Criteria.equals(true,
mActivityTestRule.getActivity() mActivityTestRule.getActivity()
......
...@@ -52,6 +52,7 @@ import org.chromium.chrome.browser.ChromeSwitches; ...@@ -52,6 +52,7 @@ import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabSelectionType; import org.chromium.chrome.browser.tabmodel.TabSelectionType;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher; import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher;
...@@ -153,7 +154,7 @@ public class StartSurfaceLayoutTest { ...@@ -153,7 +154,7 @@ public class StartSurfaceLayoutTest {
@DisabledTest(message = "crbug.com/991852 This test is flaky") @DisabledTest(message = "crbug.com/991852 This test is flaky")
public void testTabToGridFromLiveTabAnimation() throws InterruptedException { public void testTabToGridFromLiveTabAnimation() throws InterruptedException {
// clang-format on // clang-format on
assertTrue(FeatureUtilities.isTabToGtsAnimationEnabled()); assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, NTP_URL); prepareTabs(2, 0, NTP_URL);
testTabToGrid(mUrl); testTabToGrid(mUrl);
......
...@@ -32,6 +32,7 @@ import org.chromium.chrome.browser.native_page.NativePageFactory; ...@@ -32,6 +32,7 @@ import org.chromium.chrome.browser.native_page.NativePageFactory;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tab.TabObserver; import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelFilter; import org.chromium.chrome.browser.tabmodel.EmptyTabModelFilter;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
...@@ -776,7 +777,7 @@ class TabListMediator { ...@@ -776,7 +777,7 @@ class TabListMediator {
* The selected border should re-appear in the final fading-in stage. * The selected border should re-appear in the final fading-in stage.
*/ */
void prepareOverview() { void prepareOverview() {
if (!FeatureUtilities.isTabToGtsAnimationEnabled() if (!TabFeatureUtilities.isTabToGtsAnimationEnabled()
|| !mTabModelSelector.getTabModelFilterProvider() || !mTabModelSelector.getTabModelFilterProvider()
.getCurrentTabModelFilter() .getCurrentTabModelFilter()
.isTabModelRestored()) { .isTabModelRestored()) {
...@@ -900,7 +901,7 @@ class TabListMediator { ...@@ -900,7 +901,7 @@ class TabListMediator {
&& (mModel.get(index).model.get(TabProperties.THUMBNAIL_FETCHER) == null && (mModel.get(index).model.get(TabProperties.THUMBNAIL_FETCHER) == null
|| forceUpdate || isUpdatingId)) { || forceUpdate || isUpdatingId)) {
ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, forceUpdate, ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, forceUpdate,
forceUpdate && !FeatureUtilities.isTabToGtsAnimationEnabled()); forceUpdate && !TabFeatureUtilities.isTabToGtsAnimationEnabled());
mModel.get(index).model.set(TabProperties.THUMBNAIL_FETCHER, callback); mModel.get(index).model.set(TabProperties.THUMBNAIL_FETCHER, callback);
} }
} }
...@@ -1071,7 +1072,7 @@ class TabListMediator { ...@@ -1071,7 +1072,7 @@ class TabListMediator {
if (mThumbnailProvider != null && mVisible) { if (mThumbnailProvider != null && mVisible) {
ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, isSelected, ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, isSelected,
isSelected && !FeatureUtilities.isTabToGtsAnimationEnabled()); isSelected && !TabFeatureUtilities.isTabToGtsAnimationEnabled());
tabInfo.set(TabProperties.THUMBNAIL_FETCHER, callback); tabInfo.set(TabProperties.THUMBNAIL_FETCHER, callback);
} }
tab.addObserver(mTabObserver); tab.addObserver(mTabObserver);
......
...@@ -32,8 +32,8 @@ import androidx.annotation.Nullable; ...@@ -32,8 +32,8 @@ import androidx.annotation.Nullable;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.tab_ui.R; import org.chromium.chrome.tab_ui.R;
import org.chromium.ui.interpolators.BakedBezierInterpolator; import org.chromium.ui.interpolators.BakedBezierInterpolator;
import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
...@@ -153,8 +153,9 @@ class TabListRecyclerView extends RecyclerView { ...@@ -153,8 +153,9 @@ class TabListRecyclerView extends RecyclerView {
assert mFadeOutAnimator == null; assert mFadeOutAnimator == null;
mListener.startedShowing(animate); mListener.startedShowing(animate);
long duration = FeatureUtilities.isTabToGtsAnimationEnabled() ? FINAL_FADE_IN_DURATION_MS long duration = TabFeatureUtilities.isTabToGtsAnimationEnabled()
: BASE_ANIMATION_DURATION_MS; ? FINAL_FADE_IN_DURATION_MS
: BASE_ANIMATION_DURATION_MS;
setAlpha(0); setAlpha(0);
setVisibility(View.VISIBLE); setVisibility(View.VISIBLE);
...@@ -178,7 +179,7 @@ class TabListRecyclerView extends RecyclerView { ...@@ -178,7 +179,7 @@ class TabListRecyclerView extends RecyclerView {
mRecyclerViewFooter.setVisibility(VISIBLE); mRecyclerViewFooter.setVisibility(VISIBLE);
} }
// TODO(crbug.com/972157): remove this band-aid after we know why GTS is invisible. // TODO(crbug.com/972157): remove this band-aid after we know why GTS is invisible.
if (FeatureUtilities.isTabToGtsAnimationEnabled()) { if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
requestLayout(); requestLayout();
} }
} }
......
...@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager; ...@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabLaunchType; import org.chromium.chrome.browser.tabmodel.TabLaunchType;
...@@ -421,7 +422,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -421,7 +422,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
mHandler.removeCallbacks(mSoftClearTabListRunnable); mHandler.removeCallbacks(mSoftClearTabListRunnable);
mHandler.removeCallbacks(mClearTabListRunnable); mHandler.removeCallbacks(mClearTabListRunnable);
boolean quick = false; boolean quick = false;
if (FeatureUtilities.isTabToGtsAnimationEnabled() if (TabFeatureUtilities.isTabToGtsAnimationEnabled()
&& mTabModelSelector.getTabModelFilterProvider() && mTabModelSelector.getTabModelFilterProvider()
.getCurrentTabModelFilter() .getCurrentTabModelFilter()
.isTabModelRestored()) { .isTabModelRestored()) {
...@@ -447,7 +448,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -447,7 +448,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
.isTabModelRestored()) { .isTabModelRestored()) {
mResetHandler.resetWithTabList( mResetHandler.resetWithTabList(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
FeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder); TabFeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder);
} }
if (!animate) mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, false); if (!animate) mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, false);
setVisibility(true); setVisibility(true);
......
...@@ -24,7 +24,7 @@ import org.junit.Test; ...@@ -24,7 +24,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.tab_ui.R; import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ui.DummyUiActivityTestCase; import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
...@@ -52,7 +52,7 @@ public class TabGridDialogParentTest extends DummyUiActivityTestCase { ...@@ -52,7 +52,7 @@ public class TabGridDialogParentTest extends DummyUiActivityTestCase {
@Override @Override
public void setUpTest() throws Exception { public void setUpTest() throws Exception {
super.setUpTest(); super.setUpTest();
FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(true); TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(true);
mDummyParent = new FrameLayout(getActivity()); mDummyParent = new FrameLayout(getActivity());
mTabGridDialogParent = new TabGridDialogParent(getActivity(), mDummyParent); mTabGridDialogParent = new TabGridDialogParent(getActivity(), mDummyParent);
......
// Copyright 2019 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.tab;
import android.os.Build;
import androidx.annotation.Nullable;
import org.chromium.base.Log;
import org.chromium.base.SysUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.browser.ChromeFeatureList;
/**
* Contains logic that decides whether to enable features related to tabs.
*/
public class TabFeatureUtilities {
private static final String TAG = "TabFeatureUtilities";
private static Boolean sIsTabToGtsAnimationEnabled;
/**
* Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to
* null after the test has finished.
*/
@VisibleForTesting
public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) {
sIsTabToGtsAnimationEnabled = enabled;
}
/**
* @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled.
*/
public static boolean isTabToGtsAnimationEnabled() {
if (sIsTabToGtsAnimationEnabled != null) {
Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled);
return sIsTabToGtsAnimationEnabled;
}
Log.d(TAG, "GTS.MinSdkVersion = " + GridTabSwitcherUtil.getMinSdkVersion());
Log.d(TAG, "GTS.MinMemoryMB = " + GridTabSwitcherUtil.getMinMemoryMB());
return ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
&& Build.VERSION.SDK_INT >= GridTabSwitcherUtil.getMinSdkVersion()
&& SysUtils.amountOfPhysicalMemoryKB() / 1024
>= GridTabSwitcherUtil.getMinMemoryMB();
}
private static class GridTabSwitcherUtil {
// Field trial parameter for the minimum Android SDK version to enable zooming animation.
private static final String MIN_SDK_PARAM = "zooming-min-sdk-version";
private static final int DEFAULT_MIN_SDK = Build.VERSION_CODES.O;
// Field trial parameter for the minimum physical memory size to enable zooming animation.
private static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb";
private static final int DEFAULT_MIN_MEMORY_MB = 2048;
private static int getMinSdkVersion() {
String sdkVersion = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM);
try {
return Integer.valueOf(sdkVersion);
} catch (NumberFormatException e) {
return DEFAULT_MIN_SDK;
}
}
private static int getMinMemoryMB() {
String sdkVersion = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_MEMORY_MB_PARAM);
try {
return Integer.valueOf(sdkVersion);
} catch (NumberFormatException e) {
return DEFAULT_MIN_MEMORY_MB;
}
}
}
}
...@@ -22,6 +22,7 @@ import org.chromium.chrome.browser.ChromeFeatureList; ...@@ -22,6 +22,7 @@ import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.appmenu.AppMenuButtonHelper; import org.chromium.chrome.browser.appmenu.AppMenuButtonHelper;
import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.toolbar.IncognitoStateProvider; import org.chromium.chrome.browser.toolbar.IncognitoStateProvider;
...@@ -157,7 +158,7 @@ public class TabSwitcherModeTTPhone extends OptimizedFrameLayout ...@@ -157,7 +158,7 @@ public class TabSwitcherModeTTPhone extends OptimizedFrameLayout
setAlpha(inTabSwitcherMode ? 0.0f : 1.0f); setAlpha(inTabSwitcherMode ? 0.0f : 1.0f);
boolean showZoomingAnimation = FeatureUtilities.isGridTabSwitcherEnabled() boolean showZoomingAnimation = FeatureUtilities.isGridTabSwitcherEnabled()
&& FeatureUtilities.isTabToGtsAnimationEnabled(); && TabFeatureUtilities.isTabToGtsAnimationEnabled();
long duration = showZoomingAnimation long duration = showZoomingAnimation
? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS ? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS
: TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS; : TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS;
......
...@@ -15,7 +15,6 @@ import org.chromium.base.BuildInfo; ...@@ -15,7 +15,6 @@ import org.chromium.base.BuildInfo;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.FieldTrialList; import org.chromium.base.FieldTrialList;
import org.chromium.base.Log;
import org.chromium.base.PackageManagerUtils; import org.chromium.base.PackageManagerUtils;
import org.chromium.base.SysUtils; import org.chromium.base.SysUtils;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
...@@ -63,8 +62,6 @@ import java.util.Map; ...@@ -63,8 +62,6 @@ import java.util.Map;
* value in shared preferences. * value in shared preferences.
*/ */
public class FeatureUtilities { public class FeatureUtilities {
private static final String TAG = "FeatureUtilities";
/** /**
* Key for whether DownloadResumptionBackgroundTask should load native in service manager only * Key for whether DownloadResumptionBackgroundTask should load native in service manager only
* mode. * mode.
...@@ -186,7 +183,6 @@ public class FeatureUtilities { ...@@ -186,7 +183,6 @@ public class FeatureUtilities {
private static Map<String, Boolean> sFlags = new HashMap<>(); private static Map<String, Boolean> sFlags = new HashMap<>();
private static Boolean sHasRecognitionIntentHandler; private static Boolean sHasRecognitionIntentHandler;
private static Boolean sIsTabToGtsAnimationEnabled;
private static String sReachedCodeProfilerTrialGroup; private static String sReachedCodeProfilerTrialGroup;
/** /**
...@@ -584,31 +580,6 @@ public class FeatureUtilities { ...@@ -584,31 +580,6 @@ public class FeatureUtilities {
sFlags.put(START_SURFACE_ENABLED_KEY, isEnabled); sFlags.put(START_SURFACE_ENABLED_KEY, isEnabled);
} }
/**
* Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to
* null after the test has finished.
*/
@VisibleForTesting
public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) {
sIsTabToGtsAnimationEnabled = enabled;
}
/**
* @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled.
*/
public static boolean isTabToGtsAnimationEnabled() {
if (sIsTabToGtsAnimationEnabled != null) {
Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled);
return sIsTabToGtsAnimationEnabled;
}
Log.d(TAG, "GTS.MinSdkVersion = " + GridTabSwitcherUtil.getMinSdkVersion());
Log.d(TAG, "GTS.MinMemoryMB = " + GridTabSwitcherUtil.getMinMemoryMB());
return ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
&& Build.VERSION.SDK_INT >= GridTabSwitcherUtil.getMinSdkVersion()
&& SysUtils.amountOfPhysicalMemoryKB() / 1024
>= GridTabSwitcherUtil.getMinMemoryMB();
}
private static boolean isHighEndPhone() { private static boolean isHighEndPhone() {
return !SysUtils.isLowEndDevice() return !SysUtils.isLowEndDevice()
&& !DeviceFormFactor.isNonMultiDisplayContextOnTablet( && !DeviceFormFactor.isNonMultiDisplayContextOnTablet(
...@@ -743,36 +714,6 @@ public class FeatureUtilities { ...@@ -743,36 +714,6 @@ public class FeatureUtilities {
return sReachedCodeProfilerTrialGroup; return sReachedCodeProfilerTrialGroup;
} }
private static class GridTabSwitcherUtil {
// Field trial parameter for the minimum Android SDK version to enable zooming animation.
private static final String MIN_SDK_PARAM = "zooming-min-sdk-version";
private static final int DEFAULT_MIN_SDK = Build.VERSION_CODES.O;
// Field trial parameter for the minimum physical memory size to enable zooming animation.
private static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb";
private static final int DEFAULT_MIN_MEMORY_MB = 2048;
private static int getMinSdkVersion() {
String sdkVersion = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM);
try {
return Integer.valueOf(sdkVersion);
} catch (NumberFormatException e) {
return DEFAULT_MIN_SDK;
}
}
private static int getMinMemoryMB() {
String sdkVersion = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_MEMORY_MB_PARAM);
try {
return Integer.valueOf(sdkVersion);
} catch (NumberFormatException e) {
return DEFAULT_MIN_MEMORY_MB;
}
}
}
private static void cacheFlag(String preferenceName, String featureName) { private static void cacheFlag(String preferenceName, String featureName) {
ChromePreferenceManager.getInstance().writeBoolean( ChromePreferenceManager.getInstance().writeBoolean(
preferenceName, ChromeFeatureList.isEnabled(featureName)); preferenceName, ChromeFeatureList.isEnabled(featureName));
......
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