bug 1415336 - use system-info to detect latest CPU instruction set for the update url on all platforms. r=mhowell

Fixes Linux CPU instruction set detection added in bug 1277359
Adds OS X CPU instruction set detection
Changes Windows CPU instruction added in bug 1271761 to use system-info
This commit is contained in:
Robert Strong 2017-11-30 13:39:40 -08:00
Родитель ad412b48b1
Коммит 4ba2eb0286
2 изменённых файлов: 14 добавлений и 67 удалений

Просмотреть файл

@ -176,47 +176,16 @@ function getMemoryMB() {
* Gets the supported CPU instruction set. * Gets the supported CPU instruction set.
*/ */
XPCOMUtils.defineLazyGetter(this, "gInstructionSet", function aus_gIS() { XPCOMUtils.defineLazyGetter(this, "gInstructionSet", function aus_gIS() {
if (AppConstants.platform == "win") { const CPU_EXTENSIONS = ["hasSSE4_2", "hasSSE4_1", "hasSSE4A", "hasSSSE3",
const PF_MMX_INSTRUCTIONS_AVAILABLE = 3; // MMX "hasSSE3", "hasSSE2", "hasSSE", "hasMMX",
const PF_XMMI_INSTRUCTIONS_AVAILABLE = 6; // SSE "hasNEON", "hasARMv7", "hasARMv6"];
const PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10; // SSE2 for (let ext of CPU_EXTENSIONS) {
const PF_SSE3_INSTRUCTIONS_AVAILABLE = 13; // SSE3 if (Services.sysinfo.getProperty(ext)) {
return ext.substring(3);
let lib = ctypes.open("kernel32.dll");
let IsProcessorFeaturePresent = lib.declare("IsProcessorFeaturePresent",
ctypes.winapi_abi,
ctypes.int32_t, /* success */
ctypes.uint32_t); /* DWORD */
let instructionSet = "unknown";
try {
if (IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE3";
} else if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE2";
} else if (IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE";
} else if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "MMX";
}
} catch (e) {
instructionSet = "error";
Cu.reportError("Error getting processor instruction set. " +
"Exception: " + e);
} }
lib.close();
return instructionSet;
} }
if (AppConstants == "linux") { return "unknown";
let instructionSet = "unknown";
if (navigator.cpuHasSSE2) {
instructionSet = "SSE2";
}
return instructionSet;
}
return "NA";
}); });
/* Windows only getter that returns the processor architecture. */ /* Windows only getter that returns the processor architecture. */

Просмотреть файл

@ -136,38 +136,16 @@ function getProcArchitecture() {
// Gets the supported CPU instruction set. // Gets the supported CPU instruction set.
function getInstructionSet() { function getInstructionSet() {
if (AppConstants.platform == "win") { const CPU_EXTENSIONS = ["hasSSE4_2", "hasSSE4_1", "hasSSE4A", "hasSSSE3",
const PF_MMX_INSTRUCTIONS_AVAILABLE = 3; // MMX "hasSSE3", "hasSSE2", "hasSSE", "hasMMX",
const PF_XMMI_INSTRUCTIONS_AVAILABLE = 6; // SSE "hasNEON", "hasARMv7", "hasARMv6"];
const PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10; // SSE2 for (let ext of CPU_EXTENSIONS) {
const PF_SSE3_INSTRUCTIONS_AVAILABLE = 13; // SSE3 if (Services.sysinfo.getProperty(ext)) {
return ext.substring(3);
let lib = ctypes.open("kernel32.dll");
let IsProcessorFeaturePresent = lib.declare("IsProcessorFeaturePresent",
ctypes.winapi_abi,
ctypes.int32_t, /* success */
ctypes.uint32_t); /* DWORD */
let instructionSet = "unknown";
try {
if (IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE3";
} else if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE2";
} else if (IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "SSE";
} else if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE)) {
instructionSet = "MMX";
}
} catch (e) {
Cu.reportError("Error getting processor instruction set. " +
"Exception: " + e);
} }
lib.close();
return instructionSet;
} }
return "NA"; return "error";
} }
// Gets the RAM size in megabytes. This will round the value because sysinfo // Gets the RAM size in megabytes. This will round the value because sysinfo