Closed Bug 848692 Opened 11 years ago Closed 11 years ago

Progress bar animations on OS X stutter badly on HiDPI displays (<html:progress> and <xul:progressmeter>)

Categories

(Core :: Widget: Cocoa, defect)

All
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla22

People

(Reporter: fryn, Assigned: mstange)

References

(Blocks 1 open bug, )

Details

Attachments

(2 files)

On OS X, the animations in both <html:progress> and <xul:progressmeter> stutter every second or two. It is perceived as jumping ahead or skipping frames.

I believe it happens, because in HiDPI mode, the animations move half as fast as they should, and the animation restarts before they have moved the full width of the animation.
This stutter only occurs for <html:progress> in HiDPI mode, whereas it occurs for <xul:progressmeter> regardless of the value of "gfx.hidpi.enabled".

This bug affects the progress bars in the downloads panel and also the download progress bar in the Firefox application dock icon.

See the URL for a testcase of <html:progress>.
That's odd; I can definitely see what you're describing in your screen recording, but I'm not seeing it in local testing, either using the URL testcase or watching the download progress bar on the dock icon.
Here's an HTML progressbar testcase that also stutters in non-HiDPI, because it uses small progressbars instead of large ones:
data:text/html,<progress style="height:12px"></progress><br/><br/><progress value=".8" style="height:12px"></progress>
Attached patch v1Splinter Review
The " % 32" was responsible for the skipping. Small progress bars doubled their animation cycle time starting with 10.7 to 64 steps instead of 32.
This patch ups the value to 256, i.e. all possible values of uint8_t.
Assignee: nobody → mstange
Status: NEW → ASSIGNED
Attachment #722169 - Flags: review?(joshmoz)
The type of the phase field is defined as UInt8 in Appearance.h:
struct ProgressTrackInfo {
  /*
   * A UInt8 indicating the current phase of the track fill.
   */
  UInt8               phase;                  /* phase for indeterminate progress */
};

Let me know if I should rather cast to UInt8 instead of uint8_t.
Attachment #722169 - Flags: review?(joshmoz) → review+
https://hg.mozilla.org/mozilla-central/rev/b20599257ae7
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla22
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: