forked from mirrors/gecko-dev
		
	 de54c4e1fc
			
		
	
	
		de54c4e1fc
		
	
	
	
	
		
			
			This allows us to remove the timeout (which was there for these prefs) and makes the code a bit more explicit. Unconditionally making all tests wait for rAF causes some timing changes which cause some tests to time out / fail, see: https://treeherder.mozilla.org/jobs?repo=try&revision=3aef4c168c6ab7d762dd360f49d4f56dff686c03 So this only does it when changing the prefs that care about it. Fix some tests that were relying on the timeout to get this green. Differential Revision: https://phabricator.services.mozilla.com/D119040
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <?xml version="1.0"?>
 | |
| <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
 | |
| <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
 | |
|                  type="text/css"?>
 | |
| <window title="GC/CC logging with child processes"
 | |
|   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 | |
|   <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
 | |
| 
 | |
|   <!-- test results are displayed in the html:body -->
 | |
|   <body xmlns="http://www.w3.org/1999/xhtml">
 | |
|   </body>
 | |
| 
 | |
|   <!-- test code goes here -->
 | |
|   <script type="application/javascript"><![CDATA[
 | |
| 
 | |
|   SimpleTest.waitForExplicitFinish();
 | |
| 
 | |
|   let numRemotes = 3;
 | |
|   let numReady = 0;
 | |
| 
 | |
|   // Create some remote processes, and set up message-passing so that
 | |
|   // we know when each child is fully initialized.
 | |
|   let remotes = [];
 | |
|   SpecialPowers.pushPrefEnv({"set": [["dom.ipc.processCount", numRemotes]]}).then(function() {
 | |
|     for (let i = 0; i < numRemotes; i++) {
 | |
|       let w = remotes[i] = window.browsingContext.topChromeWindow.open("remote.xhtml", "", "chrome");
 | |
| 
 | |
|       w.addEventListener("load", function loadHandler() {
 | |
|         let remoteBrowser = w.document.getElementById("remote");
 | |
|         let mm = remoteBrowser.messageManager;
 | |
|         mm.addMessageListener("test:ready", function readyHandler() {
 | |
|           mm.removeMessageListener("test:ready", readyHandler);
 | |
|           numReady++;
 | |
|           if (numReady == numRemotes) {
 | |
|             // All the remote processes are ready.  Run test.
 | |
|             runTest();
 | |
|           }
 | |
|         });
 | |
|         mm.loadFrameScript("data:," + encodeURI("sendAsyncMessage('test:ready');"), true);
 | |
|       }, {once: true});
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   let dumper = Cc["@mozilla.org/memory-info-dumper;1"].
 | |
|                getService(Ci.nsIMemoryInfoDumper);
 | |
| 
 | |
|   function runTest() {
 | |
|     let numParents = 0;
 | |
|     let numChildren = 0;
 | |
|     dumper.dumpGCAndCCLogsToFile(
 | |
|       /* identifier: */ "test." + Date.now(),
 | |
|       /* allTraces: */ false,
 | |
|       /* childProcesses: */ true,
 | |
|       {
 | |
|         onDump(gcLog, ccLog, isParent) {
 | |
|           if (isParent) {
 | |
|             numParents++;
 | |
|           } else {
 | |
|             numChildren++;
 | |
|           }
 | |
|           checkAndRemoveLog(gcLog);
 | |
|           checkAndRemoveLog(ccLog);
 | |
|         },
 | |
|         onFinish() {
 | |
|           is(numParents, 1, "GC/CC logs for the parent process");
 | |
|           is(numChildren, numRemotes, "GC/CC logs for each child process");
 | |
|           cleanUpAndFinish();
 | |
|         },
 | |
|       }
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   function cleanUpAndFinish() {
 | |
|       // Close the remote processes.
 | |
|       for (let i = 0; i < numRemotes; i++) {
 | |
|           remotes[i].close();
 | |
|       }
 | |
|       SimpleTest.finish();
 | |
|   }
 | |
| 
 | |
|   function checkAndRemoveLog(logFile) {
 | |
|       let name = logFile.path;
 | |
|       ok(logFile.exists(), "log file "+name+" exists");
 | |
|       ok(logFile.isFile(), "log file "+name+" is a regular file");
 | |
|       ok(logFile.fileSize > 0, "log file "+name+" is not empty");
 | |
|       logFile.remove(/* recursive: */ false);
 | |
|   }
 | |
| 
 | |
|   ]]></script>
 | |
| </window>
 |