Fennec/NativeUI/checkerboarding: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
 
(32 intermediate revisions by 5 users not shown)
Line 1: Line 1:
===Checkerboarding===
== Intro ==
* Where are we bad right now?/What are the biggest problems? (Erin can lead this?)
#Zoom in (dbl tap, pinch 2 zoom)
#Zoom in (dbl tap, pinch 2 zoom)
#Zoom out (dbl tap, pinch 2 zoom)
#Zoom out (dbl tap, pinch 2 zoom)
Line 5: Line 6:
#Panning
#Panning


==Areas of improvement==
===Where do we spend our time?===
#gfx
# Zoomed in panning on CNN.com: http://bit.ly/HdccVU
#layout
#* 43ms PresShell::Paint
#java
#** 6ms displaylist building
#** 4ms compute visibility
#** 14ms drawthebeslayer (9ms DrawBackgroundImage)
#** 6ms buffer rotation
# Zoomed in panning on nytimes.com: http://bit.ly/HdceNy
#* 34ms PresShell::Paint
#** 5ms displaylist building
#** 2ms compute visibility
#** 10ms drawthebeslayer (4ms text drawing, 2ms DrawBackgroundImage)
#** 3ms buffer rotation
#** 8ms waiting for compositor
#** 4ms ContainerState::ProcessDisplayItems
# Zoom out on nytimes.com: http://bit.ly/HjC3eD (409ms paint) http://bit.ly/HIMqas (371ms paint)
#* mostly drawing text. We run into {{bug|742134}}


==Areas of regression==
#gfx
#layout
#java


==Areas of continued risk==
 
#gfx
 
#layout
* Painting
#java
* Upload/Syncing with compositing thread
* Layout
* Other ({{bug|742060}}, {{bug|742128}})
 
=== Work in progress ===
* Fixing up touch overhead at the beginning of pans - {{bug|740883}} and dependent bugs (kats)
* TiledThebesLayer {{bug|739679}} (bgirard) - This will help remove buffer rotation overhead and will make it so we can resize the display port with less cost.
* 16 bit drawing {{bug|733607}} (roc)
 
=== Todo ===
==== Front end ====
* Slow down panning {{bug|742115}}
* Adapt DisplayPort control for TiledThebesLayer {{bug|737510}}
* Lower/Remove Viewport:Change observer overhead {{bug|742128}}
* Round zoom level to avoid churning glyph cache?
==== GFX ====
* Improve text drawing {{bug|742134}} (This needs root causing still) (jfkthame)
* Make sure we're drawing background images efficiently {{bug|735895}}
* Cache tiles at different zoom levels/Don't discard visible tiles (bgirard)
==== Layout ====
* Unnecessary copies during image painting {{bug|733941}}
* Avoid compositing basic layers (this doesn't show up much on profiles yet but is still a waste) {{bug|735303}}
* ComputeVisibility slowness {{bug|735893}}
* DisplayList construction {{bug|735898}}
 
==== Other ideas? ====
* Building database of common pages/gestures
* On-demand/interruptable drawing (depends somewhat on tiles)


==Pan/Zoom Jank==
==Pan/Zoom Jank==
#page load?
* Our only known source of jank is texture upload.
#Zoom in (dbl tap, pinch 2 zoom)
* Currently we should never jank during zoom because we do not do any uploads then.
#Zoom out (dbl tap, pinch 2 zoom)
* Kats recently started drawing on double tap out. We introduced some jank during that operation. {{bug|742366}}
#Scrolling
If we need to, it should be possible to postpone the upload of until the end of zoom operation, or use another technique to bound the time we spend uploading.
#Panning
 
=== Work in progress ===
* {{bug|730718}} EGLImage (pcwalton)
* {{bug|729538}} gralloc (bgirardish)
 
== Correctness Bugs ==
* {{bug|737367}} Runfield rotation
* {{bug|741692}} Black flash


==Areas of improvement==
== QA ==
#gfx
* Would be good to get some subjective comparisons of checkerboard with us vs. XUL
#layout
#java


==Areas of regression==
== Eideticker ==
#gfx
* Needs to use a page other than http://taskjs.org/
#layout
** See [https://bugzilla.mozilla.org/show_bug.cgi?id=742086 bug 742086] to track this (with some initial ideas)
#java
* Native browser on Gingerbread won't ever checkerboard it just paints slower
* XUL and native fennec run the page at different zoom levels and scroll to different locations
* Eideticker is useful for cross-browser comparisons, but should we consider using other/methods tools (i.e. ones that don't require specialized hardware) for testing performance as well?
* Tracking FPS of scroll & zoom would be most useful.


==Areas of continued risk==
== When are we done? ==
#gfx
* What criteria do we have for being good enough?
#layout
* Not checkerboarding too much!
#java

Latest revision as of 19:14, 12 August 2013

Intro

  • Where are we bad right now?/What are the biggest problems? (Erin can lead this?)
  1. Zoom in (dbl tap, pinch 2 zoom)
  2. Zoom out (dbl tap, pinch 2 zoom)
  3. Scrolling
  4. Panning

Where do we spend our time?

  1. Zoomed in panning on CNN.com: http://bit.ly/HdccVU
    • 43ms PresShell::Paint
      • 6ms displaylist building
      • 4ms compute visibility
      • 14ms drawthebeslayer (9ms DrawBackgroundImage)
      • 6ms buffer rotation
  2. Zoomed in panning on nytimes.com: http://bit.ly/HdceNy
    • 34ms PresShell::Paint
      • 5ms displaylist building
      • 2ms compute visibility
      • 10ms drawthebeslayer (4ms text drawing, 2ms DrawBackgroundImage)
      • 3ms buffer rotation
      • 8ms waiting for compositor
      • 4ms ContainerState::ProcessDisplayItems
  3. Zoom out on nytimes.com: http://bit.ly/HjC3eD (409ms paint) http://bit.ly/HIMqas (371ms paint)



Work in progress

  • Fixing up touch overhead at the beginning of pans - bug 740883 and dependent bugs (kats)
  • TiledThebesLayer bug 739679 (bgirard) - This will help remove buffer rotation overhead and will make it so we can resize the display port with less cost.
  • 16 bit drawing bug 733607 (roc)

Todo

Front end

  • Slow down panning bug 742115
  • Adapt DisplayPort control for TiledThebesLayer bug 737510
  • Lower/Remove Viewport:Change observer overhead bug 742128
  • Round zoom level to avoid churning glyph cache?

GFX

  • Improve text drawing bug 742134 (This needs root causing still) (jfkthame)
  • Make sure we're drawing background images efficiently bug 735895
  • Cache tiles at different zoom levels/Don't discard visible tiles (bgirard)

Layout

  • Unnecessary copies during image painting bug 733941
  • Avoid compositing basic layers (this doesn't show up much on profiles yet but is still a waste) bug 735303
  • ComputeVisibility slowness bug 735893
  • DisplayList construction bug 735898

Other ideas?

  • Building database of common pages/gestures
  • On-demand/interruptable drawing (depends somewhat on tiles)

Pan/Zoom Jank

  • Our only known source of jank is texture upload.
  • Currently we should never jank during zoom because we do not do any uploads then.
  • Kats recently started drawing on double tap out. We introduced some jank during that operation. bug 742366

If we need to, it should be possible to postpone the upload of until the end of zoom operation, or use another technique to bound the time we spend uploading.

Work in progress

Correctness Bugs

QA

  • Would be good to get some subjective comparisons of checkerboard with us vs. XUL

Eideticker

  • Needs to use a page other than http://taskjs.org/
    • See bug 742086 to track this (with some initial ideas)
  • Native browser on Gingerbread won't ever checkerboard it just paints slower
  • XUL and native fennec run the page at different zoom levels and scroll to different locations
  • Eideticker is useful for cross-browser comparisons, but should we consider using other/methods tools (i.e. ones that don't require specialized hardware) for testing performance as well?
  • Tracking FPS of scroll & zoom would be most useful.

When are we done?

  • What criteria do we have for being good enough?
  • Not checkerboarding too much!