Hang Detector and Reporter:/Test Plan

From MozillaWiki
Jump to: navigation, search

Hang Detector and Reporter

Feature Status Lead engineer QA Lead Status
Hang Detector and Reporter Development in progress Vladan Djeric Simona Badau OK

Summary

  • The Hang Reporter feature - reports transient main thread hangs to Telemetry.
  • It relies on having Firefox compiled with frame pointers to unwind call stacks and because of this it is only useful on Windows builds from the Profiling branch.
  • The Hang Reporter functionality is #ifdef'd out on regular release builds.
  • It will not be enabled in release builds and the intended audience is Firefox developers.

Demo of the functionality: The minimum steps to see a demo of the functionality is to set up the profiling Nightly and the Symbolication Server locally.

How to set up the profiling Nightly:
1. Install the profiling link from here
2. Go to Help menu -> Options -> Advanced -> Update -> enable the option to 'Never check for updates' -> OK
3. Go to Help menu -> Options -> Advanced -> General -> enable the option to 'Submit performance data'.
4. Install the custom about:telemetry add-on

How to set up the Symbolication Server:
Prerequisites:
Install Git for Windows or Cygwin and Python or Cygwin.

5. Download some of the symbols for Nightly profiling build by extracting the zip locally.
6. Run “git clone git://github.com/vdjeric/Snappy-Symbolication-Server.git” in Windows command line.
7. Edit the Snappy Symbolication Server’s “sample.conf” file:

  • the firefoxSymbolsPath and the osSymbolsPath have to point to the “symbols_ffx” directory downloaded in step 5.

8. Run the symbolication server locally with the command “python symbolicationWebService.py sample.conf”.
9. To see the hang stacks go to your profiling Nightly -> in about config enable the pref toolkit.telemetry.enabled to true -> navigate to about:telemetry page -> click on 'Force Hang' button -> reload the page and click on the 'Symbolicate Stacks' button.

The stack should look like this:

Hang report #1 (18 seconds):
??? (in ntdll.dll)
PRMJ_Now (in mozjs.dll)
js_Date(JSContext *,unsigned int,JS::Value *) (in mozjs.dll)
???
???

Note that:

  • the minimum interval for capturing a hang is 10 seconds;
  • the value of the hang can be changed in about:config via the preference hangmonitor.timeout;

References

Use Cases

  • Check the hang stacks:
    • having the telemetry disabled or the hangmonitor.timeout pref set to zero;
    • having the telemetry enabled or the hangmonitor.timeout pref set to zero;
    • having the telemetry disabled or the hangmonitor.timeout pref set to non-zero;
    • having the telemetry enabled or the hangmonitor.timeout pref set to non-zero;

Test Cases

  • The test cases for this feature can be viewed here.

Important Bugs

  • 712109 - Implement non-fatal chromehang by turning on frame-pointers on a branch

Not Tested

  • TBD

Sign off Criteria

  • All the test cases were executed.
  • All the major bugs have been fixed.