Open Bug 1597231 Opened 5 years ago Updated 3 years ago

Single digit fps when scrolling with the page down key on reddit.com and on long github diffs

Categories

(Core :: Panning and Zooming, defect, P3)

72 Branch
defect

Tracking

()

Tracking Status
firefox77 --- wontfix
firefox78 --- wontfix
firefox79 --- fix-optional

People

(Reporter: suresh.lalith, Unassigned)

References

Details

(Keywords: perf)

Attachments

(2 files)

Attached file profile.json (deleted) —

User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:72.0) Gecko/20100101 Firefox/72.0

Steps to reproduce:

  1. Go to a page like reddit.com
  2. Hit page down a few times

On OSX Mojave 10.14.6 (18G1012) with Firefox Nightly version 72.0a1 (2019-11-18) (64-bit).

Actual results:

Frame rate drops to single digits. See the attached profile. It looks "paint" takes a long time.

Expected results:

Frame rate should not have dropped this much.

Component: Untriaged → Graphics
Product: Firefox → Core
Keywords: perf

suresh.lalith, thanks for the report! Can you take a profiling as to include Compositor thread by using gecko profiler add-on? Default setting of gecko profiler addon capture Compositor thread.

From Attachment 9109399 [details], I got the following timeline view. But it did not have Compositor thread.

And can you upload about:support info?

Flags: needinfo?(suresh.lalith)
Priority: -- → P3

Sorry for the delay. I've attached a trace using the built-in profiler.

To reproduce:

  1. Go to the following page: https://github.com/vmware/hillview/pull/610/files
  2. Hit page down a few times.
  3. The fps should be low

I'm on 79.0a1 (2020-06-06) (64-bit) now.

Interestingly, scrolling down using the mouse wheel works smoothly!

Flags: needinfo?(suresh.lalith)

And here's the about:support info as requested:

Application Basics

Name: Firefox
Version: 79.0a1
Build ID: 20200606214744
Distribution ID:
Update Channel: nightly
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0
OS: Darwin 19.5.0 Darwin Kernel Version 19.5.0: Tue May 26 20:41:44 PDT 2020; root:xnu-6153.121.2~2/RELEASE_X86_64
Multiprocess Windows: 1/1 Enabled by default
Remote Processes: 10
Enterprise Policies: Inactive
Google Location Service Key: Found
Google Safebrowsing Key: Found
Mozilla Location Service Key: Found
Safe Mode: false

Crash Reports for the Last 3 Days

Report ID: bp-463561da-5273-4f3d-bf1d-775fc0200608
Submitted: 2 hours ago

Nightly Features

Name: DoH Roll-Out
Version: 1.3.0
ID: doh-rollout@mozilla.org

Name: Firefox Screenshots
Version: 39.0.0
ID: screenshots@mozilla.org

Name: Form Autofill
Version: 1.0
ID: formautofill@mozilla.org

Name: Web Compat
Version: 11.0.0
ID: webcompat@mozilla.org

Name: WebCompat Reporter
Version: 1.3.0
ID: webcompat-reporter@mozilla.org

Remote Processes

Type: Web Content
Count: 6 / 8

Type: Extension
Count: 1

Type: Privileged About
Count: 1

Type: Preallocated
Count: 1

Type: Socket
Count: 1

Extensions

Name: Amazon.com
Version: 1.1
Enabled: true
ID: amazondotcom@search.mozilla.org

Name: Bing
Version: 1.1
Enabled: true
ID: bing@search.mozilla.org

Name: DuckDuckGo
Version: 1.0
Enabled: true
ID: ddg@search.mozilla.org

Name: eBay
Version: 1.0
Enabled: true
ID: ebay@search.mozilla.org

Name: Google
Version: 1.0
Enabled: true
ID: google@search.mozilla.org

Name: LastPass: Free Password Manager
Version: 4.47.0.3
Enabled: true
ID: support@lastpass.com

Name: uBlock Origin
Version: 1.27.10
Enabled: true
ID: uBlock0@raymondhill.net

Name: Wikipedia (en)
Version: 1.0
Enabled: true
ID: wikipedia@search.mozilla.org

Graphics

Features
Compositing: OpenGL
Asynchronous Pan/Zoom: wheel input enabled; scrollbar drag enabled; keyboard enabled; autoscroll enabled
WebGL 1 Driver WSI Info: CGL
WebGL 1 Driver Renderer: ATI Technologies Inc. -- AMD Radeon Pro 555X OpenGL Engine
WebGL 1 Driver Version: 4.1 ATI-3.9.15
WebGL 1 Driver Extensions: GL_ARB_blend_func_extended GL_ARB_draw_buffers_blend GL_ARB_draw_indirect GL_ARB_ES2_compatibility GL_ARB_explicit_attrib_location GL_ARB_gpu_shader_fp64 GL_ARB_gpu_shader5 GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_occlusion_query2 GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_separate_shader_objects GL_ARB_shader_bit_encoding GL_ARB_shader_subroutine GL_ARB_shading_language_include GL_ARB_tessellation_shader GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_cube_map_array GL_ARB_texture_gather GL_ARB_texture_query_lod GL_ARB_texture_rgb10_a2ui GL_ARB_texture_storage GL_ARB_texture_swizzle GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_vertex_attrib_64bit GL_ARB_vertex_type_2_10_10_10_rev GL_ARB_viewport_array GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_bounds_test GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_EXT_texture_mirror_clamp GL_EXT_texture_sRGB_decode GL_APPLE_client_storage GL_APPLE_container_object_shareable GL_APPLE_flush_render GL_APPLE_object_purgeable GL_APPLE_rgb_422 GL_APPLE_row_bytes GL_APPLE_texture_range GL_ATI_texture_mirror_once GL_NV_texture_barrier
WebGL 1 Extensions: ANGLE_instanced_arrays EXT_blend_minmax EXT_color_buffer_half_float EXT_float_blend EXT_frag_depth EXT_shader_texture_lod EXT_sRGB EXT_texture_compression_rgtc EXT_texture_filter_anisotropic MOZ_debug OES_element_index_uint OES_fbo_render_mipmap OES_standard_derivatives OES_texture_float OES_texture_float_linear OES_texture_half_float OES_texture_half_float_linear OES_vertex_array_object WEBGL_color_buffer_float WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_depth_texture WEBGL_draw_buffers WEBGL_lose_context
WebGL 2 Driver WSI Info: CGL
WebGL 2 Driver Renderer: ATI Technologies Inc. -- AMD Radeon Pro 555X OpenGL Engine
WebGL 2 Driver Version: 4.1 ATI-3.9.15
WebGL 2 Driver Extensions: GL_ARB_blend_func_extended GL_ARB_draw_buffers_blend GL_ARB_draw_indirect GL_ARB_ES2_compatibility GL_ARB_explicit_attrib_location GL_ARB_gpu_shader_fp64 GL_ARB_gpu_shader5 GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_occlusion_query2 GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_separate_shader_objects GL_ARB_shader_bit_encoding GL_ARB_shader_subroutine GL_ARB_shading_language_include GL_ARB_tessellation_shader GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_cube_map_array GL_ARB_texture_gather GL_ARB_texture_query_lod GL_ARB_texture_rgb10_a2ui GL_ARB_texture_storage GL_ARB_texture_swizzle GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_vertex_attrib_64bit GL_ARB_vertex_type_2_10_10_10_rev GL_ARB_viewport_array GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_bounds_test GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_EXT_texture_mirror_clamp GL_EXT_texture_sRGB_decode GL_APPLE_client_storage GL_APPLE_container_object_shareable GL_APPLE_flush_render GL_APPLE_object_purgeable GL_APPLE_rgb_422 GL_APPLE_row_bytes GL_APPLE_texture_range GL_ATI_texture_mirror_once GL_NV_texture_barrier
WebGL 2 Extensions: EXT_color_buffer_float EXT_float_blend EXT_texture_compression_rgtc EXT_texture_filter_anisotropic MOZ_debug OES_texture_float_linear WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_lose_context
Uses Tiling: true
Uses Tiling (Content): true
Off Main Thread Painting Enabled: true
Off Main Thread Painting Worker Count: 4
Target Frame Rate: 60
GPU #1
Active: Yes
Vendor ID: 0x1002
Device ID: 0x67ef
RAM: 0

Diagnostics
AzureCanvasBackend: skia
AzureContentBackend: skia
AzureFallbackCanvasBackend: none
CMSOutputProfile: AAACEGFwcGwEAAAAbW50clJHQiBYWVogB+QABgAFABEAFQANYWNzcEFQUEwAAAAAQVBQTAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBspnvRdHdv6bhi4V3UAB0y7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZGVzYwAAAPwAAABiY3BydAAAAWAAAAAjd3RwdAAAAYQAAAAUclhZWgAAAZgAAAAUZ1hZWgAAAawAAAAUYlhZWgAAAcAAAAAUclRSQwAAAdQAAAAQY2hhZAAAAeQAAAAsYlRSQwAAAdQAAAAQZ1RSQwAAAdQAAAAQZGVzYwAAAAAAAAAISFAgMjdlcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMjAAAFhZWiAAAAAAAADzzwABAAAAARhiWFlaIAAAAAAAAGj7AAA1owAAARNYWVogAAAAAAAAZuoAALdhAAARZFhZWiAAAAAAAAAm8QAAEvwAAMC1cGFyYQAAAAAAAAAAAAH2BHNmMzIAAAAAAAEMGgAABcD///L/AAAHYAAA/c7///uY///9lgAAA/QAAL9O
Display0: 1920x1080 scale:1.000000
DisplayCount: 1
TileHeight: 512
TileWidth: 512
Decision Log
HW_COMPOSITING:
available by default
OPENGL_COMPOSITING:
available by default
WEBRENDER:
opt-in by default: WebRender is an opt-in feature
WEBRENDER_QUALIFIED:
available by default
blacklisted by env: No qualified hardware
WEBRENDER_COMPOSITOR:
disabled by default: Disabled by default
WEBRENDER_ANGLE:
opt-in by default: WebRender ANGLE is an opt-in feature
WEBRENDER_DCOMP_PRESENT:
opt-in by default: WebRender DirectComposition is an opt-in feature
OMTP:
available by default
WEBGPU:
disabled by default: Disabled by default

Media

Audio Backend: audiounit-rust
Max Channels: 2
Preferred Sample Rate: 48000
Roundtrip latency (standard deviation): 58.06ms (0.01)
Output Devices
Name: Group
ZoomAudioDevice: zoom.us.zoomaudiodevice
MacBook Pro Speakers: builtin-internal-mic|spk
Input Devices
Name: Group
ZoomAudioDevice: zoom.us.zoomaudiodevice
MacBook Pro Microphone: builtin-internal-mic|spk
Media Capabilities
Enumerate database

Important Modified Preferences

accessibility.typeaheadfind.flashBar: 0
accessibility.warn_on_browsewithcaret: false
browser.cache.disk.amount_written: 71779
browser.cache.disk.capacity: 1048576
browser.cache.disk.filesystem_reported: 1
browser.cache.disk.hashstats_reported: 1
browser.cache.disk.smart_size.first_run: false
browser.cache.disk.telemetry_report_ID: 138
browser.contentblocking.category: custom
browser.download.useDownloadDir: false
browser.search.region: US
browser.search.useDBForOrder: true
browser.sessionstore.upgradeBackup.latestBuildID: 20200606214744
browser.startup.homepage: about:blank
browser.startup.homepage_override.buildID: 20200606214744
browser.startup.homepage_override.mstone: 79.0a1
browser.tabs.firstWindowRestore.numPinnedTabs: 0
browser.urlbar.placeholderName: DuckDuckGo
browser.urlbar.placeholderName.private: DuckDuckGo
browser.urlbar.searchTips.redirect.shownCount: 1
browser.urlbar.timesBeforeHidingSuggestionsHint: 0
dom.forms.autocomplete.formautofill: true
dom.push.userAgentID: 22a369145b0e49b19af02c180bb6e1da
extensions.formautofill.firstTimeUse: false
extensions.lastAppVersion: 79.0a1
font.internaluseonly.changed: false
idle.lastDailyNotification: 1591585521
media.benchmark.vp9.fps: 244
media.benchmark.vp9.versioncheck: 5
media.gmp-gmpopenh264.abi: x86_64-gcc3
media.gmp-gmpopenh264.lastUpdate: 1571420422
media.gmp-gmpopenh264.version: 1.8.1.1
media.gmp-manager.buildID: 20200606214744
media.gmp-manager.lastCheck: 1591570547
media.gmp-widevinecdm.abi: x86_64-gcc3
media.gmp-widevinecdm.lastUpdate: 1577143855
media.gmp-widevinecdm.version: 4.10.1582.2
media.gmp.storage.version.observed: 1
network.cookie.prefsMigrated: true
network.dns.disablePrefetch: true
network.http.speculative-parallel-limit: 0
network.predictor.cleaned-up: true
network.predictor.enabled: false
network.prefetch-next: false
places.database.lastMaintenance: 1591497063
places.history.expiration.transient_current_max_pages: 144300
plugin.disable_full_page_plugin_for_types: application/pdf
plugin.flash.arch: x86_64-gcc3
plugin.flash.blockliststate: 0
plugin.flash.desc: Shockwave Flash 32.0 r0
plugin.flash.lastmod_hi: 370
plugin.flash.lastmod_lo: 205032680
plugin.flash.path: /Library/Internet Plug-Ins/Flash Player.plugin
plugin.flash.version: 32.0.0.371
print.print_bgcolor: false
print.print_bgimages: false
print.print_duplex: 0
print.print_evenpages: true
print.print_in_color: true
print.print_margin_bottom: 0.5
print.print_margin_left: 0.5
print.print_margin_right: 0.5
print.print_margin_top: 0.5
print.print_oddpages: true
print.print_orientation: 0
print.print_page_delay: 50
print.print_paper_data: 0
print.print_paper_height: 11.00
print.print_paper_name:
print.print_paper_size_unit: 0
print.print_paper_width: 8.50
print.print_resolution: 0
print.print_reversed: false
print.print_scaling: 1.00
print.print_shrink_to_fit: true
print.print_to_file: false
print.print_unwriteable_margin_bottom: 17
print.print_unwriteable_margin_left: 17
print.print_unwriteable_margin_right: 17
print.print_unwriteable_margin_top: 17
privacy.cpd.offlineApps: true
privacy.cpd.siteSettings: true
privacy.donottrackheader.enabled: true
privacy.purge_trackers.date_in_cookie_database: 0
privacy.purge_trackers.last_purge: -1847344087
privacy.sanitize.pending: [{"id":"newtab-container","itemsToClear":[],"options":{}}]
privacy.socialtracking.notification.counter: 2
privacy.socialtracking.notification.lastShown: 1566811451659
privacy.trackingprotection.enabled: true
security.remote_settings.crlite_filters.checked: 1591556837
security.remote_settings.intermediates.checked: 1591556837
security.sandbox.content.tempDirSuffix: da97e743-a424-b24e-b803-4eb95615156b
security.sandbox.plugin.tempDirSuffix: 9951d891-f748-5847-b6ab-346f312e04a6
security.tls.version.enable-deprecated: true
services.sync.declinedEngines: tabs,bookmarks,addons,history,prefs,addresses,creditcards
services.sync.engine.addons: false
services.sync.engine.addresses.available: true
services.sync.engine.bookmarks: false
services.sync.engine.history: false
services.sync.engine.passwords.validation.lastTime: 1591566867
services.sync.engine.prefs: false
services.sync.engine.prefs.modified: false
services.sync.engine.tabs: false
services.sync.lastPing: 1591509243
services.sync.lastSync: Sun Jun 07 2020 19:34:56 GMT-0700 (Pacific Daylight Time)
signon.importedFromSqlite: true
storage.vacuum.last.index: 1
storage.vacuum.last.places.sqlite: 1589357262

Important Locked Preferences

dom.ipc.processCount.webIsolated: 1

Places Database

Accessibility

Activated: false
Prevent Accessibility: 0

Library Versions

NSPR
Expected minimum version: 4.26 Beta
Version in use: 4.26 Beta

NSS
Expected minimum version: 3.54 Beta
Version in use: 3.54 Beta

NSSSMIME
Expected minimum version: 3.54 Beta
Version in use: 3.54 Beta

NSSSSL
Expected minimum version: 3.54 Beta
Version in use: 3.54 Beta

NSSUTIL
Expected minimum version: 3.54 Beta
Version in use: 3.54 Beta

Sandbox

Content Process Sandbox Level: 3
Effective Content Process Sandbox Level: 3

Startup Cache

Disk Cache Path: /Users/lsuresh/Library/Caches/Firefox/Profiles/5bl39z6d.default-1549656440907/startupCache/startupCache.8.little
Ignore Disk Cache: false
Found Disk Cache on Init: true
Wrote to Disk Cache: true

Internationalization & Localization

Application Settings
Requested Locales: ["en-US"]
Available Locales: ["en-US"]
App Locales: ["en-US"]
Regional Preferences: ["en-US"]
Default Locale: "en-US"
Operating System
System Locales: ["en-US"]
Regional Preferences: ["en-US"]

Remote Debugging (Chromium Protocol)

Accepting Connections: false
URL:

:mstange, do you know if there is already a similar bug?

Flags: needinfo?(mstange)

The smooth scroll animation which is initiated by the page down key is not running on the compositor. Kats, can you find out why?
Furthermore, the page down key event itself could be processed by APZ, but it's processed by the main thread.

Status: UNCONFIRMED → NEW
Component: Graphics → Panning and Zooming
Ever confirmed: true
Flags: needinfo?(mstange) → needinfo?(kats)
Summary: Single digit fps on some pages on OSX → Single digit fps when scrolling with the page down key on reddit.com and on long github diffs

Another data point: scrolling by holding the arrow key is also slow.

Both github and reddit have non-passive key listeners registered on their root elements. Having that means we can't do APZ scrolling for keyboard inputs, unfortunately.

Flags: needinfo?(kats)

(In reply to Markus Stange [:mstange] from comment #5)

Furthermore, the page down key event itself could be processed by APZ, but it's processed by the main thread.

My comment explains this.

The smooth scroll animation which is initiated by the page down key is not running on the compositor. Kats, can you find out why?

This is still an open question, I can take a closer look.

Initial backtrace of spacebar scrolling shows that here the code is passing in ScrollMode::Smooth instead of ScrollMode::SmoothMsd. The latter will drive APZ scrolling while the former does not. So changing that should help. Markus, do you have cycles to try and that see if it breaks anything? Right now my focus is pretty much entirely on desktop zooming so I won't be able to look at this more in the near future.

Severity: normal → S3

Thanks! So maybe all that's needed here is to make Smooth behave like SmoothMsd (in the sense of handing it off to the compositor), just with a different scroll animation type. I'll try to find some time to look into this some more.

We could also just change the animations to use SmoothMsd. It would feel a little different but I doubt most people would notice the difference.

True.

Any update on this bug? I'd be happy to help test.

(In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #9)

Initial backtrace of spacebar scrolling shows that here the code is passing in ScrollMode::Smooth instead of ScrollMode::SmoothMsd. The latter will drive APZ scrolling while the former does not. So changing that should help.

It sounds like bug 1658169 should have fixed this?

With these conditions true, yes, I believe the spacebar scrolls should now be going through APZ and using the same scroll physics as the main thread used to. Same with up/down arrow keys. We're still going to have the problem where the key can't be handled directly by APZ because of the key listener. So the net result is that the scroll animation may be delayed, but once it starts, it should be smooth at 60fps.

The conditions linked above require both apz.allow_zooming=true (which is the case on Nightly but not on Beta or Release) and also apz.force_disable_desktop_zooming_scrollbars=false (which is not true anywhere yet).

suresh, if you have some time, you can try a recent Nightly build - go to about:config, ensure apz.allow_zooming is true, and change apz.force_disable_desktop_zooming_scrollbars to false. Then restart the browser and try keyboard scrolling. I expect the actual scroll animations to be smooth, even though there might be a bit of lag between pressing the key and the scroll animation starting.

Tried setting apz.force_disable_desktop_zooming_scrollbars=false, and keeping apz.allow_zooming=true on Nightly 83.0a1 (2020-09-30) (64-bit): the keyboard scroll is indeed smooth now! I'll run Nightly like this for a while and report if anything comes up.

Thanks!

Great to hear, thanks!

Depends on: 1657822
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: