diff options
author | vollick@chromium.org <vollick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-18 15:14:59 +0000 |
---|---|---|
committer | vollick@chromium.org <vollick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-18 15:14:59 +0000 |
commit | 44de7494df4d0efeefa71aedb62057a0f0ca993f (patch) | |
tree | 9362f7f9db296516a2ed98ce81ddae84d868ac48 | |
parent | d3834bb7bfd48ba176c179dd95b57f9998caadbc (diff) | |
download | chromium_src-44de7494df4d0efeefa71aedb62057a0f0ca993f.zip chromium_src-44de7494df4d0efeefa71aedb62057a0f0ca993f.tar.gz chromium_src-44de7494df4d0efeefa71aedb62057a0f0ca993f.tar.bz2 |
Add a flag for enabling/disabling the new accelerated scrolling path
Relanding. This patch had previously been reverted because opting into the new path could run us into bugs. All known bugs have been resolved, so this should be safe to land.
We now have two accelerated scrolling paths. One accelerates scrolling whenever
it's safe to promote the overflow scrolling div to a stacking container /
containing block and not break stacking or clipping.
The new path, the 'universal' path, enables accelerated scrolling in those cases
where the old path would not opt-in.
Eventually, we'd like to eliminate the old path, but this will require layer
squashing (the new path can result in many composited layers that ought to be
combined -- i.e., a 'layer explosion'). Until these paths are mature, we need to
be able to enable and disable them both, so we have two separate sets of flags.
Once we've eliminated the old path, we can replace both with
--[enable/disable]-accelerated-overflow-scroll (and eventually get rid of both
sets of flags).
BUG=None
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=228187
R=darin@chromium.org, hartmanng@chromium.org, shawnsingh@chromium.org
Review URL: https://codereview.chromium.org/26809004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229421 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | build/ios/grit_whitelist.txt | 2 | ||||
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-rw-r--r-- | chrome/browser/about_flags.cc | 9 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/chrome_restart_request.cc | 2 | ||||
-rw-r--r-- | content/browser/renderer_host/render_process_host_impl.cc | 2 | ||||
-rw-r--r-- | content/browser/web_contents/web_contents_impl.cc | 8 | ||||
-rw-r--r-- | content/public/common/content_switches.cc | 9 | ||||
-rw-r--r-- | content/public/common/content_switches.h | 2 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 16 | ||||
-rw-r--r-- | webkit/common/webpreferences.cc | 1 | ||||
-rw-r--r-- | webkit/common/webpreferences.h | 1 |
11 files changed, 58 insertions, 0 deletions
diff --git a/build/ios/grit_whitelist.txt b/build/ios/grit_whitelist.txt index 992dade..1fc18aa 100644 --- a/build/ios/grit_whitelist.txt +++ b/build/ios/grit_whitelist.txt @@ -625,6 +625,8 @@ IDS_FLAGS_FORCE_FULLSCREEN_APP_DESCRIPTION IDS_FLAGS_FORCE_FULLSCREEN_APP_NAME IDS_FLAGS_FORCE_HIGH_DPI_DESCRIPTION IDS_FLAGS_FORCE_HIGH_DPI_NAME +IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION +IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME IDS_FLAGS_FULL_HISTORY_SYNC_DESCRIPTION IDS_FLAGS_FULL_HISTORY_SYNC_NAME IDS_FLAGS_HIDE_LAUNCHER_ALIGNMENT_MENU_DESCRIPTION diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index cc9bf20..ea8e5c8 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -5729,6 +5729,12 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION" desc="Description of the 'Accelerated overflow scroll mode' lab."> When possible, puts the scrolling contents of an overflow scrolling element onto a composited layer for faster scrolling. </message> + <message name="IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME" desc="Name of the 'Universal accelerated overflow scroll mode' lab."> + Universal accelerated overflow scroll + </message> + <message name="IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION" desc="Description of the 'Universal accelerated overflow scroll mode' lab."> + Puts scrolling content in composited layers, even in those cases where promoting the overflow scrolling element to a stacking context and a containing block would have broken stacking or clipping. + </message> <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_CANVAS_FEATURES_NAME" desc="Name of the 'Enable experimental canvas features' lab."> Enable experimental canvas features </message> diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 66ec1c7..bd2360e 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -397,6 +397,15 @@ const Experiment kExperiments[] = { switches::kDisableAcceleratedOverflowScroll) }, { + "force-universal-accelerated-composited-scrolling", + IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME, + IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION, + kOsAll, + ENABLE_DISABLE_VALUE_TYPE( + switches::kEnableUniversalAcceleratedOverflowScroll, + switches::kDisableUniversalAcceleratedOverflowScroll) + }, + { "present-with-GDI", IDS_FLAGS_PRESENT_WITH_GDI_NAME, IDS_FLAGS_PRESENT_WITH_GDI_DESCRIPTION, diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc index 74258384..89a27d5 100644 --- a/chrome/browser/chromeos/login/chrome_restart_request.cc +++ b/chrome/browser/chromeos/login/chrome_restart_request.cc @@ -89,6 +89,7 @@ std::string DeriveCommandLine(const GURL& start_url, ::switches::kDisableThreadedCompositing, ::switches::kDisableTouchDragDrop, ::switches::kDisableTouchEditing, + ::switches::kDisableUniversalAcceleratedOverflowScroll, ::switches::kDisableWebKitMediaSource, ::switches::kDisableAcceleratedFixedRootBackground, ::switches::kEnableAcceleratedFixedRootBackground, @@ -106,6 +107,7 @@ std::string DeriveCommandLine(const GURL& start_url, ::switches::kEnableThreadedCompositing, ::switches::kEnableTouchDragDrop, ::switches::kEnableTouchEditing, + ::switches::kEnableUniversalAcceleratedOverflowScroll, ::switches::kEnableViewport, ::switches::kForceDeviceScaleFactor, ::switches::kGpuStartupDialog, diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 5336df8..814ab9e 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc @@ -907,6 +907,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kDisableTouchAdjustment, switches::kDisableTouchDragDrop, switches::kDisableTouchEditing, + switches::kDisableUniversalAcceleratedOverflowScroll, switches::kDisableVp8AlphaPlayback, switches::kDisableWebAudio, switches::kDisableWebKitMediaSource, @@ -956,6 +957,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kEnableStatsTable, switches::kEnableStrictSiteIsolation, switches::kEnableThreadedCompositing, + switches::kEnableUniversalAcceleratedOverflowScroll, switches::kEnableTouchDragDrop, switches::kEnableTouchEditing, switches::kEnableViewport, diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 60a8bb2..a590c2e 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -533,6 +533,14 @@ WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh, if (command_line.HasSwitch(switches::kDisableCompositedScrollingForFrames)) prefs.composited_scrolling_for_frames_enabled = false; + prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = false; + if (command_line.HasSwitch( + switches::kEnableUniversalAcceleratedOverflowScroll)) + prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = true; + if (command_line.HasSwitch( + switches::kDisableUniversalAcceleratedOverflowScroll)) + prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = false; + prefs.show_paint_rects = command_line.HasSwitch(switches::kShowPaintRects); prefs.accelerated_compositing_enabled = diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc index 1c1e99d..858a0d7 100644 --- a/content/public/common/content_switches.cc +++ b/content/public/common/content_switches.cc @@ -294,6 +294,11 @@ const char kDisableThreadedCompositing[] = "disable-threaded-compositing"; // Disables the threaded HTML parser in Blink const char kDisableThreadedHTMLParser[] = "disable-threaded-html-parser"; +// Disable accelerated overflow scrolling in corner cases (that would not be +// handled by enable-accelerated-overflow-scroll). +const char kDisableUniversalAcceleratedOverflowScroll[] = + "disable-universal-accelerated-overflow-scroll"; + // Disable web audio API. const char kDisableWebAudio[] = "disable-webaudio"; @@ -543,6 +548,10 @@ const char kEnableTextServicesFramework[] = "enable-text-services-framework"; // Enable multithreaded GPU compositing of web content. const char kEnableThreadedCompositing[] = "enable-threaded-compositing"; +// Enable accelerated overflow scrolling in all cases. +const char kEnableUniversalAcceleratedOverflowScroll[] = + "enable-universal-accelerated-overflow-scroll"; + // Enable screen capturing support for MediaStream API. const char kEnableUserMediaScreenCapturing[] = "enable-usermedia-screen-capturing"; diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h index 74ef251..725ef75 100644 --- a/content/public/common/content_switches.h +++ b/content/public/common/content_switches.h @@ -98,6 +98,7 @@ CONTENT_EXPORT extern const char kDisableSpeechInput[]; extern const char kDisableSSLFalseStart[]; CONTENT_EXPORT extern const char kDisableThreadedCompositing[]; CONTENT_EXPORT extern const char kDisableThreadedHTMLParser[]; +CONTENT_EXPORT extern const char kDisableUniversalAcceleratedOverflowScroll[]; CONTENT_EXPORT extern const char kDisableWebAudio[]; extern const char kDisableWebKitMediaSource[]; extern const char kDisableUnprefixedMediaSource[]; @@ -163,6 +164,7 @@ CONTENT_EXPORT extern const char kEnableServiceWorker[]; CONTENT_EXPORT extern const char kEnableTcpFastOpen[]; CONTENT_EXPORT extern const char kEnableTextServicesFramework[]; CONTENT_EXPORT extern const char kEnableThreadedCompositing[]; +CONTENT_EXPORT extern const char kEnableUniversalAcceleratedOverflowScroll[]; extern const char kEnableUserMediaScreenCapturing[]; extern const char kEnableViewport[]; extern const char kEnableVisualWordMovement[]; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 18ac4b3..6a47c7d 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -639,6 +639,20 @@ static bool ShouldUseCompositedScrollingForFrames( return DeviceScaleEnsuresTextQuality(device_scale_factor); } +static bool ShouldUseUniversalAcceleratedCompositingForOverflowScroll() { + const CommandLine& command_line = *CommandLine::ForCurrentProcess(); + + if (command_line.HasSwitch( + switches::kDisableUniversalAcceleratedOverflowScroll)) + return false; + + if (command_line.HasSwitch( + switches::kEnableUniversalAcceleratedOverflowScroll)) + return true; + + return false; +} + static bool ShouldUseTransitionCompositing(float device_scale_factor) { const CommandLine& command_line = *CommandLine::ForCurrentProcess(); @@ -928,6 +942,8 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) { ShouldUseFixedPositionCompositing(device_scale_factor_)); webview()->settings()->setAcceleratedCompositingForOverflowScrollEnabled( ShouldUseAcceleratedCompositingForOverflowScroll(device_scale_factor_)); + webview()->settings()->setCompositorDrivenAcceleratedScrollingEnabled( + ShouldUseUniversalAcceleratedCompositingForOverflowScroll()); webview()->settings()->setAcceleratedCompositingForTransitionEnabled( ShouldUseTransitionCompositing(device_scale_factor_)); webview()->settings()->setAcceleratedCompositingForFixedRootBackgroundEnabled( diff --git a/webkit/common/webpreferences.cc b/webkit/common/webpreferences.cc index 166a72b..5a7552e 100644 --- a/webkit/common/webpreferences.cc +++ b/webkit/common/webpreferences.cc @@ -56,6 +56,7 @@ WebPreferences::WebPreferences() privileged_webgl_extensions_enabled(false), webgl_errors_to_console_enabled(true), accelerated_compositing_for_overflow_scroll_enabled(false), + universal_accelerated_compositing_for_overflow_scroll_enabled(false), accelerated_compositing_for_scrollable_frames_enabled(false), composited_scrolling_for_frames_enabled(false), mock_scrollbars_enabled(false), diff --git a/webkit/common/webpreferences.h b/webkit/common/webpreferences.h index b35dd13..c780837 100644 --- a/webkit/common/webpreferences.h +++ b/webkit/common/webpreferences.h @@ -105,6 +105,7 @@ struct WEBKIT_COMMON_EXPORT WebPreferences { bool privileged_webgl_extensions_enabled; bool webgl_errors_to_console_enabled; bool accelerated_compositing_for_overflow_scroll_enabled; + bool universal_accelerated_compositing_for_overflow_scroll_enabled; bool accelerated_compositing_for_scrollable_frames_enabled; bool composited_scrolling_for_frames_enabled; bool mock_scrollbars_enabled; |