Flash/Hang Debugging

From MozillaWiki
Jump to: navigation, search

A number of our Windows users are seeing flash hangs on a regular basis. If you would like to help Mozilla's engineers diagnose and fix those problems for our users once and for all, please follow the process below.

A typical Flash hang happens when a movie or animation starts and Firefox becomes unresponsive, often for minutes at a time.

Getting Started

Before we can begin, you'll need:

  • An account on Google Drive, Dropbox or some other utility that allows you to share large files. These files will be too large to send over email or attach to Bugzilla, and may contain personally identifiable information, including passwords.
  • Install a Windows tool called Process Explorer
  • An up-to-date copy of Firefox. You can make sure your copy is up to date by looking in the Help menu, and selecting "About Firefox".
  • An up-to-date-copy of Flash.

Setting Up

You'll need to start by opening About:Config to set some preferences. Type "about:config" in the URL bar and hit enter. If this is the first time you've done this, you'll be presented with a warning message telling you to be careful, and you should click the button saying you will.

Find the following prefs and set them them as listed. This will disable the built-in plugin hang monitoring, use the standard Flash sandboxing configuration, and disable Firefix's Just-in-time JS compiler suite ("JITs") for better debuggability:

  • Set dom.ipc.plugins.hangUITimeoutSecs to 0
  • Set dom.ipc.plugins.timeoutSecs to 0
  • Set dom.ipc.plugins.flash.disable-protected-mode to false
  • Set dom.ipc.plugins.sandbox-level.flash to 0
  • Set javascript.options.baselinejit to false
  • Set javascript.options.ion to false
  • If you are using Nightly, open your Preferences and make sure "Enable E10S (multiprocess)" is unchecked.

Once that's done, restart Firefox and start Process Explorer, and start browsing the internet as usual.

Collecting Data

When you experience a Flash hang, open up Process Explorer to collect full debugging dumps from three processes. In process explorer you should see a list of nested processes including firefox.exe.

You want to select the following processes:

  • firefox.exe
  • plugin-container.exe (if there is more than one, you want the one with a child FlashPlayerPlugin process)
  • there should be two FlashPlayerPlugin processes. You want the deeper (second) one - see the diagram below.

The "CPU Usage" column of these processes should be zero or close to zero. If so, right-click on each of the three processes and choose Process -> Create Dump -> Create Full Dump, as in the picture below.

If the "CPU Usage" column is closer to 1, we're having a different problem; please email Benjamin Smedberg at this point for clarification.

Process Explorer screenshot of collecting a full dump

After you have collected the data, you should be able to kill the plugin-container process with a right-click in Process Explorer to un-hang Firefox.

Sending the Data to Mozilla

The dump files will be too large to email or add to Bugzilla. You'll need to upload them to Dropbox or Google Drive, and then share them with Benjamin Smedberg - bsmedberg@mozilla.com.

Please note that these files may contain personally identifiable information including passwords. We will handle these dumps with a great deal of respect and care, and will not share them outside of Mozilla and - with your permission - our collaborating engineers at Adobe. We will not store or redistribute this data outside of Mozilla or outside of Mozilla's immediate requirements to resolve this issue. Mozilla's copy of this data will be deleted as soon as it is no longer being used to investigate and resolve this issue.

Once you've done that, the last step is to please fill out six questions on this form about what page you were on, and how you were interacting with your web browser before Flash hung.

Some of the information that form asks for will be in "about:support" - you can open about:support the same way you opened about:config earlier.

Once you have submitted that form, you're done! We hope that by solving this problem, the web will be a better experience for everyone, and Mozilla thanks you for your time and effort.