forked from mirrors/gecko-dev
		
	 9c2e7458ba
			
		
	
	
		9c2e7458ba
		
	
	
	
	
		
			
			Most usage is a straight replacement but gtk needs extra changes as it transfers plain text in UTF8 natively and needs to be converted into UTF16, and Windows uses single-byte characters for RTF and CF_HTML formats so we preserve this. Differential Revision: https://phabricator.services.mozilla.com/D158587
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| add_task(async () => {
 | |
|   // Create a tab that loads a system font.
 | |
|   const CROSS_ORIGIN_DOMAIN = "https://example.com";
 | |
|   const TARGET_URL = `${CROSS_ORIGIN_DOMAIN}/browser/gfx/tests/browser/file_native_font_cache_macos.html`;
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     { gBrowser, url: TARGET_URL },
 | |
|     async browser => {
 | |
|       await SpecialPowers.spawn(browser, [], async () => {
 | |
|         // Capture a snapshot of the tab, which will load the system font in the
 | |
|         // parent process.
 | |
|         const TARGET_WIDTH = 200;
 | |
|         const TARGET_HEIGHT = 100;
 | |
| 
 | |
|         const rect = new content.window.DOMRect(
 | |
|           0,
 | |
|           0,
 | |
|           TARGET_WIDTH,
 | |
|           TARGET_HEIGHT
 | |
|         );
 | |
|         await SpecialPowers.snapshotContext(content.window, rect, "white");
 | |
|       });
 | |
|     }
 | |
|   );
 | |
| 
 | |
|   // Now create a tab that shows the memory reporter.
 | |
|   await BrowserTestUtils.withNewTab(
 | |
|     { gBrowser, url: "about:memory" },
 | |
|     async browser => {
 | |
|       // Click the "Measure" button.
 | |
|       await SpecialPowers.spawn(browser, [], () => {
 | |
|         let measureButton = content.document.getElementById("measureButton");
 | |
|         measureButton.click();
 | |
|       });
 | |
| 
 | |
|       // Copy the page text and check for an expected start with string.
 | |
|       let copiedText = await new Promise(resolve => {
 | |
|         const REPORT_TIMEOUT_MS = 15 * 1e3;
 | |
|         const EXPECTED_START_WITH = "Main Process";
 | |
|         let mostRecentTextOnClipboard = "";
 | |
| 
 | |
|         SimpleTest.waitForClipboard(
 | |
|           textOnClipboard => {
 | |
|             mostRecentTextOnClipboard = textOnClipboard;
 | |
|             const gotExpected = textOnClipboard.startsWith(EXPECTED_START_WITH);
 | |
|             if (!gotExpected) {
 | |
|               // Try copying again.
 | |
|               EventUtils.synthesizeKey("A", { accelKey: true });
 | |
|               EventUtils.synthesizeKey("C", { accelKey: true });
 | |
|             }
 | |
|             return gotExpected;
 | |
|           },
 | |
|           () => {
 | |
|             EventUtils.synthesizeKey("A", { accelKey: true });
 | |
|             EventUtils.synthesizeKey("C", { accelKey: true });
 | |
|           },
 | |
|           () => {
 | |
|             resolve(mostRecentTextOnClipboard);
 | |
|           },
 | |
|           () => {
 | |
|             info(`Didn't find expected text within ${REPORT_TIMEOUT_MS}ms.`);
 | |
|             dump("*******ACTUAL*******\n");
 | |
|             dump("<<<" + mostRecentTextOnClipboard + ">>>\n");
 | |
|             dump("********************\n");
 | |
|             resolve("");
 | |
|           },
 | |
|           "text/plain",
 | |
|           REPORT_TIMEOUT_MS
 | |
|         );
 | |
|       });
 | |
| 
 | |
|       isnot(copiedText, "", "Got some text from clipboard.");
 | |
| 
 | |
|       // Search the copied text for our desired pattern. Initially, check for
 | |
|       // a line with "native-font-resource-mac". If that exists, ensure that it
 | |
|       // has less than a maximum MB. If that doesn't exist, check instead for
 | |
|       // a line with "gfx" before the "Other Measurements" section. If that
 | |
|       // exists, it is tested against the same MB limit. If it doesn't exist,
 | |
|       // that is an indication that "gfx" doesn't occur in the first section
 | |
|       // "Explicit Allocations', and therefore isn't holding memory at all.
 | |
|       const MB_EXCLUSIVE_MAX = 20;
 | |
|       const nfrm_line = /^.*?(\d+)\.\d+ MB.*-- native-font-resource-mac/m;
 | |
|       const nfrm_match = nfrm_line.exec(copiedText);
 | |
|       if (nfrm_match) {
 | |
|         const nfrm_mb = nfrm_match[1];
 | |
|         ok(
 | |
|           nfrm_mb < MB_EXCLUSIVE_MAX,
 | |
|           `native-font-resource-mac ${nfrm_mb} MB should be less than ${MB_EXCLUSIVE_MAX} MB.`
 | |
|         );
 | |
|       } else {
 | |
|         // Figure out where the "Other Measurements" section begins.
 | |
|         const om_line = /^Other Measurements$/m;
 | |
|         const om_match = om_line.exec(copiedText);
 | |
| 
 | |
|         // Find the first gfx line, and if it occurs before the "Other
 | |
|         // Measurements" section, check its size.
 | |
|         const gfx_line = /^.*?(\d+)\.\d+ MB.*-- gfx/m;
 | |
|         const gfx_match = gfx_line.exec(copiedText);
 | |
|         if (gfx_match && gfx_match.index < om_match.index) {
 | |
|           const gfx_mb = gfx_match[1];
 | |
|           ok(
 | |
|             gfx_mb < MB_EXCLUSIVE_MAX,
 | |
|             `Explicit Allocations gfx ${gfx_mb} MB should be less than ${MB_EXCLUSIVE_MAX} MB.`
 | |
|           );
 | |
|         } else {
 | |
|           ok(true, "Explicit Allocations gfx is not listed.");
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   );
 | |
| });
 |