From a3c942162e4d685433febf30ab4caa08f92d386e Mon Sep 17 00:00:00 2001 From: <> Date: Thu, 3 Oct 2024 00:03:20 +0000 Subject: [PATCH] Updates --- addon_related_signatures.html | 24 - addon_related_signatures.js | 124 ----- all_missing_uplifts.html | 28 -- all_missing_uplifts.js | 426 ----------------- beta-stability-pushlog.html | 27 -- beta-stability-pushlog.js | 382 --------------- beta-startup.json | 1 - beta.json | 1 - buildid_changeset.html | 23 - buildid_changeset.js | 235 ---------- buildid_changeset_page.js | 26 - channels_diff.html | 43 -- channels_diff.js | 224 --------- common_landings.html | 47 -- common_landings.js | 216 --------- compare-betas.html | 33 -- compare-betas.js | 384 --------------- correlations.html | 42 -- correlations.js | 705 ---------------------------- correlations_page.js | 139 ------ exclamation_mark.svg | 1 - graphics_critical_errors.html | 17 - graphics_critical_errors.js | 36 -- graphics_critical_errors.json | 1 - images/addon_related_signatures.png | Bin 65227 -> 0 bytes images/beta-stability-pushlog.png | Bin 57154 -> 0 bytes images/buildid_changeset.png | Bin 22985 -> 0 bytes images/channels_diff.png | Bin 20424 -> 0 bytes images/common_landings.png | Bin 44934 -> 0 bytes images/compare-betas.png | Bin 239430 -> 0 bytes images/correlations.png | Bin 53178 -> 0 bytes images/dashboard.png | Bin 95508 -> 0 bytes images/graphics_critical_errors.png | Bin 48480 -> 0 bytes images/missing_uplifts.png | Bin 45511 -> 0 bytes images/supergraph.png | Bin 138138 -> 0 bytes index.html | 145 ------ missing_uplifts.html | 32 -- missing_uplifts.js | 284 ----------- nightly-startup.json | 1 - nightly.json | 1 - question_mark.svg | 1 - release-startup.json | 1 - release.json | 1 - rerank.html | 38 -- rerank.js | 167 ------- rocket_fly.png | Bin 531 -> 0 bytes scomp.css | 132 ------ scomp.html | 64 --- scomp.js | 395 ---------------- spin.svg | 1 - style.css | 66 --- supergraph.html | 25 - supergraph.js | 171 ------- 53 files changed, 4710 deletions(-) delete mode 100644 addon_related_signatures.html delete mode 100644 addon_related_signatures.js delete mode 100644 all_missing_uplifts.html delete mode 100644 all_missing_uplifts.js delete mode 100644 beta-stability-pushlog.html delete mode 100644 beta-stability-pushlog.js delete mode 100644 beta-startup.json delete mode 100644 beta.json delete mode 100644 buildid_changeset.html delete mode 100644 buildid_changeset.js delete mode 100644 buildid_changeset_page.js delete mode 100644 channels_diff.html delete mode 100644 channels_diff.js delete mode 100644 common_landings.html delete mode 100644 common_landings.js delete mode 100644 compare-betas.html delete mode 100644 compare-betas.js delete mode 100644 correlations.html delete mode 100644 correlations.js delete mode 100644 correlations_page.js delete mode 100644 exclamation_mark.svg delete mode 100644 graphics_critical_errors.html delete mode 100644 graphics_critical_errors.js delete mode 100644 graphics_critical_errors.json delete mode 100644 images/addon_related_signatures.png delete mode 100644 images/beta-stability-pushlog.png delete mode 100644 images/buildid_changeset.png delete mode 100644 images/channels_diff.png delete mode 100644 images/common_landings.png delete mode 100644 images/compare-betas.png delete mode 100644 images/correlations.png delete mode 100644 images/dashboard.png delete mode 100644 images/graphics_critical_errors.png delete mode 100644 images/missing_uplifts.png delete mode 100644 images/supergraph.png delete mode 100644 index.html delete mode 100644 missing_uplifts.html delete mode 100644 missing_uplifts.js delete mode 100644 nightly-startup.json delete mode 100644 nightly.json delete mode 100644 question_mark.svg delete mode 100644 release-startup.json delete mode 100644 release.json delete mode 100644 rerank.html delete mode 100644 rerank.js delete mode 100644 rocket_fly.png delete mode 100644 scomp.css delete mode 100644 scomp.html delete mode 100644 scomp.js delete mode 100644 spin.svg delete mode 100644 style.css delete mode 100644 supergraph.html delete mode 100644 supergraph.js diff --git a/addon_related_signatures.html b/addon_related_signatures.html deleted file mode 100644 index 7369d885..00000000 --- a/addon_related_signatures.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Addon-related signatures - - - - - -
- - - - - -
SignatureAddons
- - diff --git a/addon_related_signatures.js b/addon_related_signatures.js deleted file mode 100644 index 22acdbf7..00000000 --- a/addon_related_signatures.js +++ /dev/null @@ -1,124 +0,0 @@ -let options = { - channel: { - value: null, - type: "option", - }, -}; - -function getOption(name) { - return options[name].value; -} - -function getOptionType(name) { - return options[name].type; -} - -function setOption(name, value) { - return (options[name].value = value); -} - -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function getAddons(obj) { - return obj["addons"] - .reduce((prev, cur) => { - return prev.concat( - Object.getOwnPropertyNames(cur["item"]) - .filter((elem) => elem.startsWith("Addon")) - .map((elem) => { - return { - name: elem.substring( - elem.indexOf('"') + 1, - elem.lastIndexOf('"') - ), - support: cur["count_group"] / obj["total"], - }; - }) - ); - }, []) - .filter((addon, i, addons) => addons.indexOf(addon) === i); -} - -function addRow(obj) { - let table = document.getElementById("table"); - - let row = table.insertRow(table.rows.length); - - let signature_column = row.insertCell(0); - let signature_link = document.createElement("a"); - signature_link.textContent = obj["signature"]; - signature_link.href = - "https://crash-stats.mozilla.org/signature/?signature=" + - obj["signature"] + - "&release_channel=" + - getOption("channel") + - "#correlations"; - signature_column.appendChild(signature_link); - - let addons_column = row.insertCell(1); - let addons_pre = document.createElement("pre"); - - addons_pre.textContent = getAddons(obj) - .map( - (elem) => elem["name"] + " (" + (elem["support"] * 100).toFixed(2) + "%)" - ) - .join(", "); - - addons_column.appendChild(addons_pre); -} - -function buildTable() { - fetch( - "https://analysis-output.telemetry.mozilla.org/top-signatures-correlations/data/addon_related_signatures.json.gz" - ) - .then((response) => response.json()) - .then((addon_related_signatures) => { - addon_related_signatures[getOption("channel")] - .sort( - (obj1, obj2) => - Math.max(...getAddons(obj2).map((elem) => elem["support"])) - - Math.max(...getAddons(obj1).map((elem) => elem["support"])) - ) - .forEach((obj) => addRow(obj)); - }) - .catch(function (err) { - console.error(err); - }); -} - -function rebuildTable() { - let table = document.getElementById("table"); - - while (table.rows.length > 1) { - table.deleteRow(table.rows.length - 1); - } - - buildTable(); -} - -onLoad - .then(function () { - Object.keys(options).forEach(function (optionName) { - let optionType = getOptionType(optionName); - let elem = document.getElementById(optionName); - - if (optionType === "option") { - setOption(optionName, elem.options[elem.selectedIndex].value); - - elem.onchange = function () { - setOption(optionName, elem.options[elem.selectedIndex].value); - rebuildTable(); - }; - } else { - throw new Error("Unexpected option type."); - } - }); - }) - .then(function () { - buildTable(); - }) - .catch(function (err) { - console.error(err); - }); diff --git a/all_missing_uplifts.html b/all_missing_uplifts.html deleted file mode 100644 index 446cb0e8..00000000 --- a/all_missing_uplifts.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Missing uplifts - - - - - - - -

- - - - - - - -
BugSignature(s)Number of crashes
- - diff --git a/all_missing_uplifts.js b/all_missing_uplifts.js deleted file mode 100644 index f48d6279..00000000 --- a/all_missing_uplifts.js +++ /dev/null @@ -1,426 +0,0 @@ -let crashesFile, crashes; -let options = { - channel: { - value: null, - type: "option", - }, - wontfix: { - value: null, - type: "select", - }, -}; - -function getOption(name) { - return options[name].value; -} - -function getOptionType(name) { - return options[name].type; -} - -function setOption(name, value) { - return (options[name].value = value); -} - -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function agoString(val, str) { - return val + " " + (val == 1 ? str : str + "s") + " ago"; -} - -function prettyDate(date) { - date = new Date(date); - let today = new Date(); - - let hoursDiff = Math.round((today.getTime() - date.getTime()) / 3600000); - if (hoursDiff < 24) { - return agoString(hoursDiff, "hour"); - } - - let daysDiff = Math.round((today.getTime() - date.getTime()) / 86400000); - if (daysDiff < 10) { - return agoString(daysDiff, "day"); - } - - let weeksDiff = Math.round( - (today.getTime() - date.getTime()) / (7 * 86400000) - ); - if (weeksDiff < 3) { - return agoString(weeksDiff, "week"); - } - - let monthsDiff = - today.getMonth() + - 12 * today.getFullYear() - - (date.getMonth() + 12 * date.getFullYear()); - if (monthsDiff < 12) { - return agoString(monthsDiff, "month"); - } - - return agoString(today.getFullYear() - date.getFullYear(), "year"); -} - -function fetchWithRetry(url, trials = 0) { - return fetch(url) - .then((response) => { - if (!response.ok) { - throw new Error("Error while getting " + url); - } else { - return response; - } - }) - .catch((error) => { - let timeout = Math.pow(2, trials) * 1000; - - if (timeout > 32000) { - timeout = 32000; - } - - if (trials > 64) { - throw error; - } - - return new Promise(function (resolve, reject) { - setTimeout(() => { - fetchWithRetry(url, trials + 1).then(resolve, reject); - }, timeout); - }); - }); -} - -async function getVersion(channel) { - let response = await fetchWithRetry( - "https://product-details.mozilla.org/1.0/firefox_versions.json" - ); - let data = await response.json(); - - if (channel == "beta") { - return data["LATEST_FIREFOX_DEVEL_VERSION"]; - } else if (channel == "release") { - return data["LATEST_FIREFOX_VERSION"]; - } - - throw new Error("Unknown channel!"); -} - -function getMajor(version) { - return Number(version.substring(0, version.indexOf("."))); -} - -function getFixedIn(bug, version) { - let statuses = ["", "---", "?", "fix-optional", "affected"]; - if (getOption("wontfix")) { - statuses.push("wontfix"); - } - - if (!statuses.includes(bug["cf_status_firefox" + version])) { - return []; - } - - let versionEnd = version; - if (getOption("channel") == "beta") { - versionEnd += 2; - } else if (getOption("channel") == "release") { - versionEnd += 3; - } - - let fixedIn = []; - for (version += 1; version <= versionEnd; version++) { - if ( - bug["cf_status_firefox" + version] === "fixed" || - bug["cf_status_firefox" + version] === "verified" - ) { - fixedIn.push(version); - } - } - - return fixedIn; -} - -function addRow(bug, version) { - let table = document.getElementById("table"); - - let row = table.insertRow(table.rows.length); - - let today = new Date(); - let three_days_ago = new Date().setDate(today.getDate() - 3); - let ten_days_ago = new Date().setDate(today.getDate() - 10); - let bug_elem = row.insertCell(0); - - let fixedIn = getFixedIn(bug, version); - - let bugLink = document.createElement("a"); - bugLink.appendChild( - document.createTextNode( - bug.id + - " - " + - "Fixed in " + - fixedIn.join(", ") + - ", '" + - bug["cf_status_firefox" + version] + - "' in " + - version + - "." - ) - ); - bugLink.title = - (bug.resolution ? bug.resolution + " - " : "") + - "Last activity: " + - prettyDate(bug.last_change_time); - bugLink.href = "https://bugzilla.mozilla.org/show_bug.cgi?id=" + bug.id; - - let bugDate = new Date(bug.last_change_time); - if (bugDate > three_days_ago) { - bugLink.style.color = "green"; - } else if (bugDate > ten_days_ago) { - bugLink.style.color = "orange"; - } else { - bugLink.style.color = "red"; - } - - bug_elem.appendChild(bugLink); - - let signatures_elem = row.insertCell(1); - bug["signatures"].forEach((signature) => { - let signature_link = document.createElement("a"); - signature_link.appendChild(document.createTextNode(signature)); - signature_link.href = - "https://crash-stats.mozilla.org/signature/?signature=" + - encodeURIComponent(signature); - signatures_elem.appendChild(signature_link); - signatures_elem.appendChild(document.createElement("br")); - }); - - let crashes_count = row.insertCell(2); - crashes_count.appendChild(document.createTextNode(bug["crashes_count"])); -} - -function buildTable() { - return getVersion(getOption("channel")).then((full_version) => { - let version = getMajor(full_version); - let versionEnd = version; - if (getOption("channel") == "beta") { - versionEnd += 1; - } else if (getOption("channel") == "release") { - versionEnd += 2; - } - - let query = - "https://bugzilla.mozilla.org/rest/bug?f1=cf_crash_signature&o1=isnotempty&"; - let fieldNum = 2; - - query += "j" + fieldNum + "=AND&f" + fieldNum + "=OP&"; - fieldNum++; - - query += - "f" + - fieldNum + - "=cf_status_firefox" + - version + - "&o" + - fieldNum + - "=notequals&v" + - fieldNum + - "=fixed&"; - fieldNum++; - query += - "f" + - fieldNum + - "=cf_status_firefox" + - version + - "&o" + - fieldNum + - "=notequals&v" + - fieldNum + - "=verified&"; - fieldNum++; - query += - "f" + - fieldNum + - "=cf_status_firefox" + - version + - "&o" + - fieldNum + - "=notequals&v" + - fieldNum + - "=unaffected&"; - fieldNum++; - if (!getOption("wontfix")) { - query += - "f" + - fieldNum + - "=cf_status_firefox" + - version + - "&o" + - fieldNum + - "=notequals&v" + - fieldNum + - "=wontfix&"; - fieldNum++; - } - - query += "f" + fieldNum + "=CP&"; - fieldNum++; - - query += "j" + fieldNum + "=OR&f" + fieldNum + "=OP&"; - fieldNum++; - - for (v = version + 1; v <= versionEnd; v++) { - query += "j" + fieldNum + "=OR&f" + fieldNum + "=OP&"; - fieldNum++; - query += - "f" + - fieldNum + - "=cf_status_firefox" + - v + - "&o" + - fieldNum + - "=equals&v" + - fieldNum + - "=verified&"; - fieldNum++; - query += - "f" + - fieldNum + - "=cf_status_firefox" + - v + - "&o" + - fieldNum + - "=equals&v" + - fieldNum + - "=fixed&"; - fieldNum++; - query += "f" + fieldNum + "=CP&"; - fieldNum++; - } - query += "f" + fieldNum + "=CP&"; - fieldNum++; - - query += "include_fields=id,last_change_time,cf_crash_signature"; - for (v = version; v <= versionEnd; v++) { - query += ",cf_status_firefox" + v; - } - - return fetchWithRetry(query) - .then((response) => response.json()) - .then((data) => data["bugs"]) - .then((bugs) => - Promise.all( - bugs.map((bug) => { - let signatures = bug["cf_crash_signature"] - .split(/\s*]\s*/) - .map((signature) => signature.substring(2).trim()); - signatures = signatures.filter((signature) => signature != ""); - - let count = 0; - - return Promise.all( - signatures.map((signature) => - fetchWithRetry( - "https://crash-stats.mozilla.org/api/SuperSearch/?version=" + - full_version + - "&signature=%3D" + - encodeURIComponent(signature) + - "&product=Firefox&_results_number=0&_facets_size=0" - ) - .then((response) => response.json()) - .then((result) => { - count += result["total"]; - }) - ) - ).then(() => { - bug["signatures"] = signatures; - bug["crashes_count"] = count; - return bug; - }); - }) - ) - ) - .then((bugs) => bugs.filter((bug) => bug["crashes_count"] > 0)) - .then((bugs) => - bugs.sort((a, b) => b["crashes_count"] - a["crashes_count"]) - ) - .then((bugs) => bugs.forEach((bug) => addRow(bug, version))); - }); -} - -function startSpinner() { - document.getElementById("spin").style.display = ""; - document.getElementById("table").style.display = "none"; -} - -function stopSpinner() { - document.getElementById("spin").style.display = "none"; - document.getElementById("table").style.display = ""; -} - -function reloadPage() { - let url = new URL(location.href); - url.search = "?channel=" + getOption("channel"); - window.location = url; -} - -onLoad - .then(() => startSpinner()) - .then(() => { - let queryVars = new URL(location.href).search.substring(1).split("&"); - - Object.keys(options).forEach(function (optionName) { - let optionType = getOptionType(optionName); - let elem = document.getElementById(optionName); - - for (let queryVar of queryVars) { - if (queryVar.startsWith(optionName + "=")) { - let option = queryVar.substring((optionName + "=").length).trim(); - setOption(optionName, option); - } - } - - if (optionType === "select") { - if (getOption(optionName)) { - elem.checked = getOption(optionName); - } - - setOption(optionName, elem.checked); - - elem.onchange = function () { - setOption(optionName, elem.checked); - reloadPage(); - }; - } else if (optionType === "option") { - if (getOption(optionName)) { - for (let i = 0; i < elem.options.length; i++) { - if (elem.options[i].value === getOption(optionName)) { - elem.selectedIndex = i; - break; - } - } - } - - setOption(optionName, elem.options[elem.selectedIndex].value); - - elem.onchange = function () { - setOption(optionName, elem.options[elem.selectedIndex].value); - reloadPage(); - }; - } else if (optionType === "button") { - if (getOption(optionName)) { - elem.value = getOption(optionName); - } - - setOption(optionName, elem.value); - - document.getElementById(optionName + "Button").onclick = function () { - setOption(optionName, elem.value); - reloadPage(); - }; - } else { - throw new Error("Unexpected option type."); - } - }); - }) - .then(() => buildTable()) - .then(() => stopSpinner()) - .catch((err) => console.error(err)); diff --git a/beta-stability-pushlog.html b/beta-stability-pushlog.html deleted file mode 100644 index c556c3fe..00000000 --- a/beta-stability-pushlog.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Compare Betas - - - - - - - - -

-
- - - - - - -
BugSignaturesEvolution
- - diff --git a/beta-stability-pushlog.js b/beta-stability-pushlog.js deleted file mode 100644 index 8638e24b..00000000 --- a/beta-stability-pushlog.js +++ /dev/null @@ -1,382 +0,0 @@ -let options = { - beta1: { - value: null, - type: "option", - }, - beta2: { - value: null, - type: "option", - }, - product: { - value: null, - type: "option", - }, -}; - -function getOption(name) { - return options[name].value; -} - -function getOptionType(name) { - return options[name].type; -} - -function setOption(name, value) { - return (options[name].value = value); -} - -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function dateToStr(date) { - let month = "" + (date.getMonth() + 1); - let day = "" + date.getDate(); - let year = date.getFullYear(); - - if (month.length < 2) { - month = "0" + month; - } - - if (day.length < 2) { - day = "0" + day; - } - - return year + "-" + month + "-" + day; -} - -function addDays(date, days) { - let result = new Date(date); - result.setDate(result.getDate() + days); - let today = new Date(); - if (result > today) { - return today; - } else { - return result; - } -} - -function getBaseVersion(version) { - return version.substring(0, version.indexOf(".0b")); -} - -function getReleaseDate(version, release_history) { - if (version.endsWith("b99") && !(version in release_history)) { - // XXX: Assume release date is really close to latest beta build. Remove this - // hack when https://bugzilla.mozilla.org/show_bug.cgi?id=1192197 is fixed. - let maxDate = new Date(0); - for (let release of Object.entries(release_history).filter((r) => - r[0].startsWith(getBaseVersion(version)) - )) { - let date = new Date(release[1]); - if (date > maxDate) { - maxDate = date; - } - } - - return maxDate; - } - - return new Date(release_history[version]); -} - -function getTag(version) { - if (version.endsWith("b99")) { - return "FIREFOX_RELEASE_" + getBaseVersion(version) + "_BASE"; - } - - return "FIREFOX_" + version.replace(".", "_") + "_RELEASE"; -} - -function getComparison() { - if (!getOption("beta1") || !getOption("beta2")) { - return; - } - - while (table.rows.length > 1) { - table.deleteRow(table.rows.length - 1); - } - - let url = new URL(location.href); - url.search = - "?product=" + - getOption("product") + - "&beta1=" + - getOption("beta1") + - "&beta2=" + - getOption("beta2"); - history.replaceState({}, document.title, url.href); - - fetch( - "https://product-details.mozilla.org/1.0/firefox_history_development_releases.json" - ) - .then((response) => response.json()) - .then((release_history) => { - let date1 = getReleaseDate(getOption("beta1"), release_history); - let date2 = getReleaseDate(getOption("beta2"), release_history); - let endDate1 = addDays(date1, 7); - let endDate2 = addDays(date2, 7); - - document.getElementById("dates").innerHTML = - getOption("beta1") + - " released on " + - dateToStr(date1) + - " (crashes from " + - dateToStr(date1) + - " to " + - dateToStr(endDate1) + - ")
" + - getOption("beta2") + - " released on " + - dateToStr(date2) + - " (crashes from " + - dateToStr(date2) + - " to " + - dateToStr(endDate2) + - ")"; - - let fromchange = getTag(getOption("beta1")); - let tochange = getTag(getOption("beta2")); - - fetch( - "https://hg.mozilla.org/releases/mozilla-beta/pushloghtml?fromchange=" + - fromchange + - "&tochange=" + - tochange - ) - .then((response) => response.text()) - .then((data) => { - let bugs = new Set(); - let regex = /Bug ([0-9]+)/gi; - let res; - while ((res = regex.exec(data)) !== null) { - bugs.add(res[1]); - } - - let table = document.getElementById("table"); - - bugs.forEach((bug) => - fetch( - "https://bugzilla.mozilla.org/rest/bug/" + - bug + - "?include_fields=product,component,cf_crash_signature" - ) - .then((response) => response.json()) - .then((data) => { - // Skip bugs with no signatures. - if ( - "bugs" in data && - data["bugs"][0]["cf_crash_signature"] == "" - ) { - return; - } - - // Skip bugs that are not related to the current product. - if ( - "bugs" in data && - getOption("product") === "Firefox" && - (data["bugs"][0]["product"] === "Firefox for Android" || - data["bugs"][0]["component"] === "WebExtensions: Android") - ) { - return; - } - - // Skip bugs where the cf_crash_signature field is not defined. - if ( - "bugs" in data && - !("cf_crash_signature" in data["bugs"][0]) - ) { - return; - } - - let row = table.insertRow(table.rows.length); - let bugElem = row.insertCell(0); - let aElem = document.createElement("a"); - aElem.href = - "https://bugzilla.mozilla.org/show_bug.cgi?id=" + bug; - aElem.textContent = bug; - bugElem.appendChild(aElem); - - let signaturesCell = row.insertCell(1); - - let evolution = row.insertCell(2); - - let result = document.createElement("span"); - - if (!("bugs" in data)) { - result.style.color = "maroon"; - result.textContent = "Not accessible."; - } else { - let signatures = data["bugs"][0]["cf_crash_signature"]; - signatures = signatures.replace(/\[@ /g, "[@"); - signatures = signatures.replace(/\[@/g, ""); - signatures = signatures.replace(/ ]\r\n/g, "\\"); - signatures = signatures.replace(/]\r\n/g, "\\"); - signatures = signatures.replace("]", ""); - - signatures = signatures.split("\\"); - - for (let signature of signatures) { - let signatureElem = document.createElement("a"); - signatureElem.href = - "https://crash-stats.mozilla.org/signature/?signature=" + - signature; - signatureElem.textContent = signature; - signaturesCell.appendChild(signatureElem); - signaturesCell.appendChild(document.createElement("br")); - } - - let query1 = fetch( - "https://crash-stats.mozilla.org/api/SuperSearch/?product=" + - getOption("product") + - "&_results_number=0&_facets_size=0&version=" + - getOption("beta1") + - "&date=>%3D" + - dateToStr(date1) + - "&date=<%3D" + - dateToStr(endDate1) + - "&signature=%3D" + - signatures.join("&signature=%3D") - ).then((response) => response.json()); - let query2 = fetch( - "https://crash-stats.mozilla.org/api/SuperSearch/?product=" + - getOption("product") + - "&_results_number=0&_facets_size=0&version=" + - getOption("beta2") + - "&date=>%3D" + - dateToStr(date2) + - "&date=<%3D" + - dateToStr(endDate2) + - "&signature=%3D" + - signatures.join("&signature=%3D") - ).then((response) => response.json()); - - Promise.all([query1, query2]).then((data) => { - result.textContent = - data[0]["total"] + - " before; " + - data[1]["total"] + - " after."; - }); - } - - evolution.appendChild(result); - }) - ); - }); - }); -} - -let curBeta; - -onLoad - .then(() => - fetch("https://product-details.mozilla.org/1.0/firefox_versions.json") - ) - .then((response) => response.json()) - .then((result) => { - let betaVersion = result["LATEST_FIREFOX_DEVEL_VERSION"]; - curBeta = betaVersion.substring(0, betaVersion.indexOf(".")); - }) - .then(() => - fetch( - "https://product-details.mozilla.org/1.0/firefox_history_development_releases.json" - ) - ) - .then((response) => response.json()) - .then((data) => { - let betas1 = document.getElementById("beta1"); - let betas2 = document.getElementById("beta2"); - - let versions = Object.keys(data).filter((version) => - version.startsWith(curBeta) - ); - - console.log(versions); - - if (versions.length <= 1) { - let warning = "Need at least two beta builds in order to compare."; - if (versions.length == 1) { - warning += " Currently only " + version + " is available."; - } - document.getElementById("dates").innerHTML = - '

' + warning + "

"; - throw new Error("Need at least two beta builds in order to compare."); - } - - for (let i = 0; i < versions.length; i++) { - let version = versions[i]; - - var opt = document.createElement("option"); - opt.value = version; - opt.textContent = version; - - if (i != versions.length - 1) { - betas1.appendChild(opt); - } - - if (i != 0) { - betas2.appendChild(opt.cloneNode(true)); - } - } - - betas1.selectedIndex = betas1.options.length - 1; - betas2.selectedIndex = betas2.options.length - 1; - }) - .then(function () { - let queryVars = new URL(location.href).search.substring(1).split("&"); - - Object.keys(options).forEach(function (optionName) { - let optionType = getOptionType(optionName); - let elem = document.getElementById(optionName); - - for (let queryVar of queryVars) { - if (queryVar.startsWith(optionName + "=")) { - let option = queryVar.substring((optionName + "=").length).trim(); - setOption(optionName, option); - } - } - - if (optionType === "select") { - if (getOption(optionName)) { - elem.checked = getOption(optionName); - } - - setOption(optionName, elem.checked); - } else if (optionType === "option") { - if (getOption(optionName)) { - for (let i = 0; i < elem.options.length; i++) { - if (elem.options[i].value === getOption(optionName)) { - elem.selectedIndex = i; - break; - } - } - } - - setOption(optionName, elem.options[elem.selectedIndex].value); - - elem.onchange = function () { - setOption(optionName, elem.options[elem.selectedIndex].value); - }; - } else if (optionType === "button") { - if (getOption(optionName)) { - elem.value = getOption(optionName); - } - - setOption(optionName, elem.value.trim()); - } else { - throw new Error("Unexpected option type."); - } - - document.getElementById("compareButton").onclick = function () { - getComparison(); - }; - }); - - if (queryVars.length >= 2) { - getComparison(); - } - }) - .catch(function (err) { - console.error(err); - }); diff --git a/beta-startup.json b/beta-startup.json deleted file mode 100644 index 6bfce201..00000000 --- a/beta-startup.json +++ /dev/null @@ -1 +0,0 @@ -{"start_date": "2024-09-17", "end_date": "2024-09-27", "versions": ["131.0b1", "131.0b2", "131.0b3", "131.0b4", "131.0b5", "131.0b6", "131.0b7", "131.0b8", "131.0b9"], "signatures": {"XREMain::XRE_main": {"tc_rank": 1, "crash_count": 40, "estimated_user_count": 13, "startup_percent": 1.0, "bugs": [{"component": "General", "product": "Core", "resolution": "MOVED", "cf_status_firefox132": "---", "last_change_time": "2024-08-16T12:31:28Z", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 981681}, {"component": "XPCOM", "resolution": "", "product": "Core", "last_change_time": "2024-08-19T13:00:10Z", "cf_status_firefox132": "---", "id": 1909700, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}]}, "shutdownhang | mozilla::BounceTrackingProtectionStorage::WaitForInitialization | mozilla::BounceTrackingProtectionStorage::BlockShutdown": {"tc_rank": 2, "crash_count": 21, "estimated_user_count": 21, "startup_percent": 1.0, "bugs": []}, "firefox_on_glean::metrics::__glean_metric_maps::COUNTER_MAP::closure$0": {"tc_rank": 3, "crash_count": 19, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::dom::ServiceWorkerRegistrar::GetShutdownPhase": {"tc_rank": 4, "crash_count": 19, "estimated_user_count": 4, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2024-08-30T12:33:57Z", "id": 1471720, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "XPCOM", "resolution": "FIXED", "product": "Core"}]}, "EMPTY: no frame data available; EmptyMinidump": {"tc_rank": 5, "crash_count": 10, "estimated_user_count": 4, "startup_percent": 1.0, "bugs": [{"cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1245570, "last_change_time": "2024-09-16T13:45:38Z", "cf_status_firefox132": "---", "product": "Fenix", "resolution": "", "component": "Crash Reporting"}, {"resolution": "", "product": "Toolkit", "component": "Crash Reporting", "id": 1360392, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-08-09T15:44:14Z", "cf_status_firefox132": "---"}, {"cf_status_firefox132": "---", "last_change_time": "2024-01-12T02:38:31Z", "id": 1644486, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "component": "Crash Reporting", "resolution": "", "product": "Fenix"}, {"component": "Graphics: CanvasWebGL", "resolution": "WONTFIX", "product": "Core", "last_change_time": "2024-08-22T13:02:19Z", "cf_status_firefox132": "---", "id": 1866123, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}]}, "libnvidia-eglcore.so.550.107.02": {"tc_rank": 6, "crash_count": 10, "estimated_user_count": 2, "startup_percent": 1.0, "bugs": []}, "RedBlackTreeNode::Left": {"tc_rank": 7, "crash_count": 9, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::dom::Document::SetLastFocusTime": {"tc_rank": 8, "crash_count": 8, "estimated_user_count": 3, "startup_percent": 1.0, "bugs": [{"id": 1711442, "cf_status_firefox131": "---", "component": "DOM: UI Events & Focus Handling", "resolution": "FIXED", "last_change_time": "2021-07-28T18:50:06Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}]}, "encoding_rs::mem::is_ascii_impl": {"tc_rank": 9, "crash_count": 7, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "JS::Rooted::~Rooted": {"tc_rank": 10, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"resolution": "", "last_change_time": "2023-11-20T12:20:19Z", "cf_status_firefox132": "---", "id": 1837205, "cf_status_firefox131": "---", "component": "Crash Reporting", "cf_tracking_firefox131": "---", "product": "Toolkit"}]}, "nsLocalFile::GetDateImpl": {"tc_rank": 11, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "nsWindow::GetDefaultScaleInternal": {"tc_rank": 12, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "OOM | small": {"tc_rank": 13, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "component": "DOM: Workers", "cf_status_firefox131": "---", "id": 683271, "resolution": "WORKSFORME", "last_change_time": "2020-07-08T19:57:17Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"component": "General", "resolution": "WORKSFORME", "last_change_time": "2016-11-14T22:46:38Z", "id": 1028720, "product": "Thunderbird"}, {"cf_status_firefox131": "---", "id": 1034254, "cf_status_firefox132": "---", "component": "General", "last_change_time": "2016-08-24T19:54:55Z", "cf_tracking_firefox131": "---", "product": "Firefox", "resolution": "WONTFIX"}, {"cf_status_firefox132": "---", "component": "Graphics", "id": 1053934, "cf_status_firefox131": "---", "resolution": "FIXED", "last_change_time": "2015-05-27T03:59:01Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_status_firefox132": "---", "component": "Untriaged", "cf_status_firefox131": "---", "id": 1057869, "resolution": "INCOMPLETE", "last_change_time": "2015-04-13T14:49:28Z", "cf_tracking_firefox131": "---", "product": "Firefox"}, {"id": 1059563, "cf_status_firefox131": "---", "component": "Graphics", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2018-01-16T21:31:43Z", "resolution": "WORKSFORME"}, {"cf_status_firefox131": "---", "id": 1060268, "cf_status_firefox132": "---", "component": "Graphics", "last_change_time": "2020-09-11T13:34:57Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME"}, {"component": "Graphics", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1081790, "resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2014-12-19T19:24:38Z"}, {"last_change_time": "2021-03-08T20:53:51Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "WORKSFORME", "id": 1089682, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "JavaScript: GC"}, {"cf_status_firefox132": "---", "component": "JavaScript: GC", "id": 1115929, "cf_status_firefox131": "---", "resolution": "WORKSFORME", "last_change_time": "2016-07-19T16:18:49Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2015-02-22T01:02:16Z", "component": "Audio/Video", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1127554}, {"component": "Plug-ins", "resolution": "WORKSFORME", "last_change_time": "2022-05-16T19:51:10Z", "product": "Core Graveyard", "id": 1153515}, {"last_change_time": "2016-07-31T16:41:38Z", "id": 1174324, "product": "Thunderbird", "component": "General", "resolution": "WORKSFORME"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2022-03-02T15:48:14Z", "resolution": "WORKSFORME", "id": 1205110, "cf_status_firefox131": "---", "component": "General", "cf_status_firefox132": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2015-12-31T15:22:18Z", "resolution": "WORKSFORME", "id": 1205771, "cf_status_firefox131": "---", "component": "Graphics", "cf_status_firefox132": "---"}, {"cf_status_firefox131": "---", "id": 1209673, "component": "Graphics", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2016-05-27T22:45:49Z", "resolution": "WORKSFORME"}, {"cf_status_firefox132": "---", "component": "General", "cf_status_firefox131": "---", "id": 1215181, "resolution": "WORKSFORME", "last_change_time": "2016-02-13T20:28:02Z", "cf_tracking_firefox131": "---", "product": "Firefox"}, {"id": 1234842, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Audio/Video: Playback", "last_change_time": "2021-10-12T11:13:25Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "INACTIVE"}, {"component": "Graphics: Layers", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1310134, "resolution": "WORKSFORME", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2021-02-02T20:43:52Z"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-02-21T21:36:16Z", "resolution": "", "cf_status_firefox131": "---", "id": 1318272, "component": "XML", "cf_status_firefox132": "---"}, {"cf_status_firefox132": "---", "component": "DOM: Service Workers", "cf_status_firefox131": "---", "id": 1333070, "resolution": "FIXED", "last_change_time": "2017-09-20T08:40:37Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"last_change_time": "2017-02-23T11:25:59Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME", "cf_status_firefox131": "---", "id": 1341573, "cf_status_firefox132": "---", "component": "General"}, {"cf_status_firefox132": "---", "component": "General", "id": 1341744, "cf_status_firefox131": "---", "resolution": "INCOMPLETE", "last_change_time": "2017-10-11T19:59:55Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_status_firefox131": "---", "id": 1342017, "cf_status_firefox132": "---", "component": "Graphics: Layers", "last_change_time": "2021-09-02T08:13:55Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME"}, {"cf_status_firefox132": "---", "component": "DOM: Security", "cf_status_firefox131": "---", "id": 1353762, "resolution": "FIXED", "last_change_time": "2017-09-01T08:55:36Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2021-08-13T16:05:22Z", "component": "Graphics: Layers", "cf_status_firefox132": "---", "id": 1357359, "cf_status_firefox131": "---"}, {"resolution": "INVALID", "component": "General", "product": "Firefox for Android Graveyard", "id": 1361354, "last_change_time": "2020-12-21T18:38:46Z"}, {"component": "Audio/Video: Playback", "cf_status_firefox132": "---", "id": 1384026, "cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2017-07-27T01:06:00Z"}, {"last_change_time": "2024-09-21T09:43:36Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "", "id": 1421345, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Web Painting"}, {"cf_status_firefox131": "---", "id": 1428612, "cf_status_firefox132": "---", "component": "Telemetry", "last_change_time": "2018-01-31T23:26:11Z", "cf_tracking_firefox131": "---", "product": "Toolkit", "resolution": "FIXED"}, {"last_change_time": "2019-06-07T15:29:16Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1433816, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "General"}, {"cf_status_firefox132": "---", "component": "CSS Parsing and Computation", "id": 1442965, "cf_status_firefox131": "---", "resolution": "WORKSFORME", "last_change_time": "2018-05-07T19:35:40Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-02-13T14:30:27Z", "resolution": "INCOMPLETE", "cf_status_firefox131": "---", "id": 1458221, "component": "General", "cf_status_firefox132": "---"}, {"resolution": "WORKSFORME", "component": "Message Compose Window", "last_change_time": "2019-09-29T00:12:42Z", "id": 1477582, "product": "Thunderbird"}, {"last_change_time": "2018-12-27T00:56:14Z", "product": "External Software Affecting Firefox", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1505094, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Other"}, {"cf_status_firefox132": "---", "component": "Other", "cf_status_firefox131": "---", "id": 1519123, "resolution": "INVALID", "last_change_time": "2022-06-07T15:46:47Z", "cf_tracking_firefox131": "---", "product": "External Software Affecting Firefox"}, {"component": "General", "cf_status_firefox132": "---", "id": 1519129, "cf_status_firefox131": "---", "resolution": "INCOMPLETE", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2019-07-03T13:53:47Z"}, {"last_change_time": "2024-09-21T09:43:13Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "", "id": 1541092, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Web Painting"}, {"resolution": "FIXED", "last_change_time": "2019-04-30T21:53:32Z", "cf_tracking_firefox131": "---", "product": "Web Compatibility", "cf_status_firefox132": "---", "component": "Site Reports", "cf_status_firefox131": "---", "id": 1547102}, {"cf_status_firefox131": "---", "id": 1549181, "component": "Graphics", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2022-08-07T22:04:06Z", "resolution": "WORKSFORME"}, {"component": "General", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1565970, "resolution": "WORKSFORME", "cf_tracking_firefox131": "---", "product": "Firefox", "last_change_time": "2019-09-11T20:05:49Z"}, {"resolution": "WONTFIX", "product": "Firefox", "cf_tracking_firefox131": "---", "last_change_time": "2022-07-17T12:59:47Z", "component": "General", "cf_status_firefox132": "---", "id": 1575950, "cf_status_firefox131": "---"}, {"resolution": "WONTFIX", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2020-10-13T14:07:25Z", "component": "Storage: localStorage & sessionStorage", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1578224}, {"cf_status_firefox132": "---", "component": "Networking", "cf_status_firefox131": "---", "id": 1595460, "resolution": "WORKSFORME", "last_change_time": "2020-09-15T12:32:54Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"id": 1616720, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "last_change_time": "2021-07-20T12:16:19Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "INCOMPLETE"}, {"last_change_time": "2024-09-21T09:42:52Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "", "cf_status_firefox131": "---", "id": 1647269, "cf_status_firefox132": "---", "component": "Graphics: ImageLib"}, {"resolution": "", "component": "General", "id": 1660696, "product": "Thunderbird", "last_change_time": "2024-01-16T04:06:03Z"}, {"component": "General", "resolution": "", "last_change_time": "2023-03-28T01:38:32Z", "id": 1660710, "product": "Thunderbird"}, {"resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-09-21T09:42:14Z", "component": "XPCOM", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1673778}, {"resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-09-21T09:42:01Z", "component": "IPC", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1699340}, {"id": 1721164, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics: CanvasWebGL", "last_change_time": "2021-12-13T20:25:18Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "WORKSFORME"}, {"resolution": "", "last_change_time": "2024-09-21T09:41:47Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics: WebRender", "id": 1749192, "cf_status_firefox131": "---"}, {"last_change_time": "2024-03-25T10:08:26Z", "product": "Thunderbird", "id": 1779669, "resolution": "WORKSFORME", "component": "General"}, {"resolution": "INCOMPLETE", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-03-02T14:51:10Z", "component": "General", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1784233}, {"cf_status_firefox132": "---", "component": "Memory Allocator", "cf_status_firefox131": "---", "id": 1806202, "resolution": "", "last_change_time": "2024-09-21T09:41:32Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"component": "Message Compose Window", "resolution": "", "product": "Thunderbird", "id": 1851428, "last_change_time": "2024-09-21T09:41:17Z"}, {"resolution": "", "component": "Address Book", "product": "Thunderbird", "id": 1896086, "last_change_time": "2024-09-06T15:45:32Z"}, {"component": "General", "resolution": "FIXED", "id": 1728744, "product": "Thunderbird", "last_change_time": "2021-12-12T04:02:12Z"}]}, "bad hardware | AudioDeviceInfo::GetMinLatency": {"tc_rank": 14, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "JSContext::realm": {"tc_rank": 15, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "JSJitInfo::type": {"tc_rank": 16, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "js::irregexp::RegExpDepthCheck::VisitAssertion": {"tc_rank": 17, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::URLPreloader::BackgroundReadFiles": {"tc_rank": 18, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2023-02-21T21:37:17Z", "id": 1404743, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "XPConnect", "resolution": "", "product": "Core"}, {"component": "XPConnect", "resolution": "INCOMPLETE", "product": "Core", "cf_status_firefox132": "---", "last_change_time": "2018-05-07T20:42:52Z", "id": 1458782, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---"}]}, "nsUserIdleService::nsUserIdleService": {"tc_rank": 19, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 1.0, "bugs": []}, "__delayLoadHelper2 | _tailMerge_imm32.dll | nsWindow::Create": {"tc_rank": 20, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "bad hardware | PR_IntervalToSeconds | socket_io_wait": {"tc_rank": 21, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mojo::core::ports::Node::OnObserveProxyAck": {"tc_rank": 22, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::DataMutexBase::AutoLockBase::AutoLockBase": {"tc_rank": 23, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::MozPromise::ThenValueBase::Dispatch": {"tc_rank": 24, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"last_change_time": "2022-04-24T13:58:20Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "component": "IPC", "id": 1637890, "cf_status_firefox131": "---", "product": "Core"}, {"component": "Gecko Profiler", "id": 1643020, "cf_status_firefox131": "---", "last_change_time": "2020-06-04T09:38:36Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "product": "Core"}]}, "mozilla::PointerEventHandler::InitializeStatics": {"tc_rank": 25, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "strncmp | nsPrefBranch::GetChildList": {"tc_rank": 26, "crash_count": 2, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "@0x0 | Windows::UI::ViewManagement::AccessibilitySettings::get_HighContrastScheme": {"tc_rank": 27, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "@0x0 | mozilla::gl::GLLibraryEGL::fQueryString": {"tc_rank": 28, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"product": "Core", "resolution": "", "last_change_time": "2024-07-11T01:12:09Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "id": 1897747, "cf_status_firefox131": "---", "component": "Graphics"}]}, "EMPTY: no frame data available; MissingThreadList": {"tc_rank": 29, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"id": 1245570, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2024-09-16T13:45:38Z", "resolution": "", "product": "Fenix", "component": "Crash Reporting"}, {"product": "Toolkit", "resolution": "", "component": "Crash Reporting", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1360392, "last_change_time": "2024-08-09T15:44:14Z", "cf_status_firefox132": "---"}, {"last_change_time": "2023-12-20T12:08:13Z", "component": "General", "resolution": "WORKSFORME", "id": 1853506, "product": "Thunderbird"}]}, "InitializeNSSWithFallbacks": {"tc_rank": 30, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"product": "Core", "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2024-01-28T17:29:46Z", "id": 1834770, "component": "Security: PSM", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---"}]}, "Microsoft::WRL::SimpleActivationFactory::ActivateInstance": {"tc_rank": 31, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "NdrCreateServerInterfaceFromStub": {"tc_rank": 32, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "OOM | unknown | NS_ABORT_OOM | XPCJSContext::Initialize": {"tc_rank": 33, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"product": "Core", "resolution": "WONTFIX", "cf_status_firefox132": "---", "last_change_time": "2020-02-28T19:00:14Z", "cf_tracking_firefox131": "---", "id": 1615310, "cf_status_firefox131": "---", "component": "JavaScript Engine"}]}, "RtlpFreeHeapInternal | RtlFreeHeap | CoTaskMemFreeDeleter::operator()": {"tc_rank": 34, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "SECMOD_LoadModule": {"tc_rank": 35, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "Windows::UI::ViewManagement::UISettings::SaveUISettingsToCache": {"tc_rank": 36, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "__delayLoadHelper2 | _tailMerge_setupapi.dll | HasBattery": {"tc_rank": 37, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "__pthread_mutex_lock_full": {"tc_rank": 38, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "component": "Crash Reporting", "cf_tracking_firefox131": "---", "id": 1912696, "last_change_time": "2024-09-23T13:18:48Z", "product": "Toolkit", "resolution": "", "cf_status_firefox131": "---"}]}, "_tailMerge_d3dcompiler_47.dll | Windows::UI::ViewManagement::UISettings::SaveUISettingsToCache": {"tc_rank": 39, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "_tailMerge_d3dcompiler_47.dll | mozglue_static::impl$2::dealloc": {"tc_rank": 40, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "bad hardware | FileSeek64": {"tc_rank": 41, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "bad hardware | btreeLockCarefully": {"tc_rank": 42, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "bad hardware | hb_language_item_t::operator=": {"tc_rank": 43, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "bad hardware | nsZipHandle::findDataStart": {"tc_rank": 44, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "core::result::unwrap_failed | rayon_core::latch::impl$6::set": {"tc_rank": 45, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "js::gcstats::Statistics::recordPhaseBegin": {"tc_rank": 46, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "JavaScript: GC", "id": 1366217, "cf_status_firefox132": "---", "last_change_time": "2017-09-15T19:50:43Z", "resolution": "FIXED"}]}, "mozilla::AppWindow::CreateNewWindow": {"tc_rank": 47, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::AppWindow::IntrinsicallySizeShell": {"tc_rank": 48, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::TaskController::InitializeThreadPool": {"tc_rank": 49, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"product": "Core", "id": 1910208, "cf_status_firefox131": "wontfix", "component": "XPCOM", "resolution": "", "cf_status_firefox132": "affected", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-10T15:50:25Z"}]}, "mozilla::net::CacheFileIOManager::GetDoomedFile": {"tc_rank": 50, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "nsGlobalWindowInner::FreeInnerObjects": {"tc_rank": 51, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "nsINIParser_internal::SetString": {"tc_rank": 52, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "nsScriptSecurityManager::CheckLoadURIWithPrincipalFromJS": {"tc_rank": 53, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2021-02-12T22:21:42Z", "component": "Security", "cf_status_firefox131": "---", "id": 1690942, "product": "Core", "cf_tracking_firefox131": "---"}]}, "stackoverflow | CComCatalog::GetClassInfoInternal": {"tc_rank": 54, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "stackoverflow | webrender::frame_builder::FrameBuilder::build_layer_screen_rects_and_cull_layers": {"tc_rank": 55, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "xul.dll | nsQueryInterfaceISupportsWithError::operator()": {"tc_rank": 56, "crash_count": 1, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}}} \ No newline at end of file diff --git a/beta.json b/beta.json deleted file mode 100644 index c522e639..00000000 --- a/beta.json +++ /dev/null @@ -1 +0,0 @@ -{"start_date": "2024-09-17", "end_date": "2024-09-27", "versions": ["131.0b1", "131.0b2", "131.0b3", "131.0b4", "131.0b5", "131.0b6", "131.0b7", "131.0b8", "131.0b9"], "signatures": {"OOM | small": {"tc_rank": 1, "crash_count": 1059, "estimated_user_count": 701, "startup_percent": 0.003777148253068933, "bugs": [{"last_change_time": "2020-07-08T19:57:17Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "WORKSFORME", "id": 683271, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "DOM: Workers"}, {"last_change_time": "2016-11-14T22:46:38Z", "product": "Thunderbird", "id": 1028720, "component": "General", "resolution": "WORKSFORME"}, {"cf_status_firefox131": "---", "id": 1034254, "component": "General", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Firefox", "last_change_time": "2016-08-24T19:54:55Z", "resolution": "WONTFIX"}, {"last_change_time": "2015-05-27T03:59:01Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1053934, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics"}, {"product": "Firefox", "cf_tracking_firefox131": "---", "last_change_time": "2015-04-13T14:49:28Z", "resolution": "INCOMPLETE", "id": 1057869, "cf_status_firefox131": "---", "component": "Untriaged", "cf_status_firefox132": "---"}, {"cf_status_firefox131": "---", "id": 1059563, "cf_status_firefox132": "---", "component": "Graphics", "last_change_time": "2018-01-16T21:31:43Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME"}, {"resolution": "WORKSFORME", "last_change_time": "2020-09-11T13:34:57Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics", "id": 1060268, "cf_status_firefox131": "---"}, {"resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2014-12-19T19:24:38Z", "component": "Graphics", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1081790}, {"cf_status_firefox131": "---", "id": 1089682, "cf_status_firefox132": "---", "component": "JavaScript: GC", "last_change_time": "2021-03-08T20:53:51Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME"}, {"id": 1115929, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "JavaScript: GC", "last_change_time": "2016-07-19T16:18:49Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "WORKSFORME"}, {"last_change_time": "2015-02-22T01:02:16Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1127554, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Audio/Video"}, {"product": "Core Graveyard", "id": 1153515, "last_change_time": "2022-05-16T19:51:10Z", "resolution": "WORKSFORME", "component": "Plug-ins"}, {"id": 1174324, "product": "Thunderbird", "last_change_time": "2016-07-31T16:41:38Z", "component": "General", "resolution": "WORKSFORME"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2022-03-02T15:48:14Z", "resolution": "WORKSFORME", "id": 1205110, "cf_status_firefox131": "---", "component": "General", "cf_status_firefox132": "---"}, {"last_change_time": "2015-12-31T15:22:18Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME", "cf_status_firefox131": "---", "id": 1205771, "cf_status_firefox132": "---", "component": "Graphics"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2016-05-27T22:45:49Z", "resolution": "WORKSFORME", "cf_status_firefox131": "---", "id": 1209673, "component": "Graphics", "cf_status_firefox132": "---"}, {"resolution": "WORKSFORME", "last_change_time": "2016-02-13T20:28:02Z", "product": "Firefox", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "id": 1215181, "cf_status_firefox131": "---"}, {"last_change_time": "2021-10-12T11:13:25Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "INACTIVE", "id": 1234842, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Audio/Video: Playback"}, {"resolution": "WORKSFORME", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2021-02-02T20:43:52Z", "component": "Graphics: Layers", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1310134}, {"component": "XML", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1318272, "resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-02-21T21:36:16Z"}, {"last_change_time": "2017-09-20T08:40:37Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED", "cf_status_firefox131": "---", "id": 1333070, "cf_status_firefox132": "---", "component": "DOM: Service Workers"}, {"resolution": "WORKSFORME", "last_change_time": "2017-02-23T11:25:59Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "id": 1341573, "cf_status_firefox131": "---"}, {"cf_status_firefox131": "---", "id": 1341744, "cf_status_firefox132": "---", "component": "General", "last_change_time": "2017-10-11T19:59:55Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "INCOMPLETE"}, {"cf_status_firefox131": "---", "id": 1342017, "cf_status_firefox132": "---", "component": "Graphics: Layers", "last_change_time": "2021-09-02T08:13:55Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "WORKSFORME"}, {"resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2017-09-01T08:55:36Z", "component": "DOM: Security", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1353762}, {"last_change_time": "2021-08-13T16:05:22Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1357359, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics: Layers"}, {"component": "General", "resolution": "INVALID", "product": "Firefox for Android Graveyard", "id": 1361354, "last_change_time": "2020-12-21T18:38:46Z"}, {"component": "Audio/Video: Playback", "cf_status_firefox132": "---", "id": 1384026, "cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2017-07-27T01:06:00Z"}, {"cf_status_firefox132": "---", "component": "Web Painting", "cf_status_firefox131": "---", "id": 1421345, "resolution": "", "last_change_time": "2024-09-21T09:43:36Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"cf_status_firefox132": "---", "component": "Telemetry", "id": 1428612, "cf_status_firefox131": "---", "resolution": "FIXED", "last_change_time": "2018-01-31T23:26:11Z", "product": "Toolkit", "cf_tracking_firefox131": "---"}, {"id": 1433816, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "last_change_time": "2019-06-07T15:29:16Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2018-05-07T19:35:40Z", "resolution": "WORKSFORME", "id": 1442965, "cf_status_firefox131": "---", "component": "CSS Parsing and Computation", "cf_status_firefox132": "---"}, {"cf_status_firefox131": "---", "id": 1458221, "component": "General", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-02-13T14:30:27Z", "resolution": "INCOMPLETE"}, {"product": "Thunderbird", "id": 1477582, "last_change_time": "2019-09-29T00:12:42Z", "component": "Message Compose Window", "resolution": "WORKSFORME"}, {"cf_status_firefox132": "---", "component": "Other", "id": 1505094, "cf_status_firefox131": "---", "resolution": "FIXED", "last_change_time": "2018-12-27T00:56:14Z", "product": "External Software Affecting Firefox", "cf_tracking_firefox131": "---"}, {"resolution": "INVALID", "product": "External Software Affecting Firefox", "cf_tracking_firefox131": "---", "last_change_time": "2022-06-07T15:46:47Z", "component": "Other", "cf_status_firefox132": "---", "id": 1519123, "cf_status_firefox131": "---"}, {"cf_status_firefox131": "---", "id": 1519129, "component": "General", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2019-07-03T13:53:47Z", "resolution": "INCOMPLETE"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-09-21T09:43:13Z", "resolution": "", "cf_status_firefox131": "---", "id": 1541092, "component": "Web Painting", "cf_status_firefox132": "---"}, {"id": 1547102, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Site Reports", "last_change_time": "2019-04-30T21:53:32Z", "product": "Web Compatibility", "cf_tracking_firefox131": "---", "resolution": "FIXED"}, {"resolution": "WORKSFORME", "last_change_time": "2022-08-07T22:04:06Z", "cf_tracking_firefox131": "---", "product": "Core", "cf_status_firefox132": "---", "component": "Graphics", "cf_status_firefox131": "---", "id": 1549181}, {"resolution": "WORKSFORME", "last_change_time": "2019-09-11T20:05:49Z", "product": "Firefox", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "id": 1565970, "cf_status_firefox131": "---"}, {"component": "General", "cf_status_firefox132": "---", "id": 1575950, "cf_status_firefox131": "---", "resolution": "WONTFIX", "product": "Firefox", "cf_tracking_firefox131": "---", "last_change_time": "2022-07-17T12:59:47Z"}, {"component": "Storage: localStorage & sessionStorage", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1578224, "resolution": "WONTFIX", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2020-10-13T14:07:25Z"}, {"id": 1595460, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Networking", "last_change_time": "2020-09-15T12:32:54Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "WORKSFORME"}, {"cf_status_firefox131": "---", "id": 1616720, "component": "General", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2021-07-20T12:16:19Z", "resolution": "INCOMPLETE"}, {"id": 1647269, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics: ImageLib", "last_change_time": "2024-09-21T09:42:52Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": ""}, {"component": "General", "resolution": "", "last_change_time": "2024-01-16T04:06:03Z", "id": 1660696, "product": "Thunderbird"}, {"component": "General", "resolution": "", "last_change_time": "2023-03-28T01:38:32Z", "id": 1660710, "product": "Thunderbird"}, {"resolution": "", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-21T09:42:14Z", "component": "XPCOM", "cf_status_firefox132": "---", "id": 1673778, "cf_status_firefox131": "---"}, {"resolution": "", "last_change_time": "2024-09-21T09:42:01Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "IPC", "id": 1699340, "cf_status_firefox131": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2021-12-13T20:25:18Z", "resolution": "WORKSFORME", "id": 1721164, "cf_status_firefox131": "---", "component": "Graphics: CanvasWebGL", "cf_status_firefox132": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-21T09:41:47Z", "resolution": "", "id": 1749192, "cf_status_firefox131": "---", "component": "Graphics: WebRender", "cf_status_firefox132": "---"}, {"resolution": "WORKSFORME", "component": "General", "last_change_time": "2024-03-25T10:08:26Z", "product": "Thunderbird", "id": 1779669}, {"resolution": "INCOMPLETE", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-03-02T14:51:10Z", "component": "General", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1784233}, {"component": "Memory Allocator", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1806202, "resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-09-21T09:41:32Z"}, {"product": "Thunderbird", "id": 1851428, "last_change_time": "2024-09-21T09:41:17Z", "component": "Message Compose Window", "resolution": ""}, {"resolution": "", "component": "Address Book", "id": 1896086, "product": "Thunderbird", "last_change_time": "2024-09-06T15:45:32Z"}, {"resolution": "FIXED", "component": "General", "id": 1728744, "product": "Thunderbird", "last_change_time": "2021-12-12T04:02:12Z"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::gc::AllocateTenuredCellInGC": {"tc_rank": 2, "crash_count": 256, "estimated_user_count": 176, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-08-16T16:17:43Z", "cf_status_firefox132": "---", "id": 1472062, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "component": "JavaScript: GC", "resolution": "", "product": "Core"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::gc::TraceEdgeInternal": {"tc_rank": 3, "crash_count": 185, "estimated_user_count": 114, "startup_percent": 0.0, "bugs": [{"resolution": "", "product": "Core", "component": "JavaScript: GC", "id": 1472062, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "last_change_time": "2024-08-16T16:17:43Z", "cf_status_firefox132": "---"}]}, "mozilla::dom::quota::QuotaManager::Shutdown::::operator()": {"tc_rank": 4, "crash_count": 118, "estimated_user_count": 106, "startup_percent": 0.0, "bugs": [{"component": "Storage: Quota Manager", "id": 1588498, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-06-27T12:54:02Z", "resolution": "", "product": "Core"}, {"cf_status_firefox132": "---", "last_change_time": "2024-05-07T13:35:55Z", "cf_tracking_firefox131": "---", "resolution": "WONTFIX", "component": "Storage: Quota Manager", "id": 1872960, "cf_status_firefox131": "---", "product": "Core"}]}, "js::gc::detail::CellHasStoreBuffer": {"tc_rank": 5, "crash_count": 101, "estimated_user_count": 77, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "id": 719114, "component": "JavaScript: GC", "resolution": "", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-24T16:22:48Z", "product": "Core"}, {"resolution": "", "cf_tracking_firefox131": "---", "last_change_time": "2024-07-16T04:03:19Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1541905, "component": "JavaScript: GC", "product": "Core"}]}, "OOM | large | mozilla::JSHolderMap::Put": {"tc_rank": 6, "crash_count": 96, "estimated_user_count": 73, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-03-02T00:07:19Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1333035, "component": "Cycle Collector", "product": "Core", "resolution": ""}, {"last_change_time": "2024-05-17T09:59:40Z", "component": "General", "resolution": "", "id": 1882757, "product": "Thunderbird"}, {"resolution": "", "product": "Core", "component": "DOM: Core & HTML", "id": 1892171, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-05-30T18:26:48Z", "cf_status_firefox132": "---"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | CCGraphBuilder::AddNode": {"tc_rank": 7, "crash_count": 91, "estimated_user_count": 61, "startup_percent": 0.0, "bugs": [{"resolution": "", "product": "Core", "component": "JavaScript: GC", "id": 1472062, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2024-08-16T16:17:43Z"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::gc::GetGCKindSlots": {"tc_rank": 8, "crash_count": 83, "estimated_user_count": 58, "startup_percent": 0.0, "bugs": [{"component": "JavaScript: GC", "cf_status_firefox131": "---", "id": 1472062, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-08-16T16:17:43Z", "resolution": "", "product": "Core"}]}, "AsyncShutdownTimeout | IOUtils: waiting for sendTelemetry IO to complete | TelemetryController: shutting down": {"tc_rank": 9, "crash_count": 72, "estimated_user_count": 68, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "component": "Telemetry", "id": 1315306, "cf_status_firefox132": "---", "last_change_time": "2023-09-19T15:13:19Z", "resolution": "", "product": "Toolkit", "cf_tracking_firefox131": "---"}, {"resolution": "", "last_change_time": "2023-12-17T13:14:45Z", "component": "General", "product": "Thunderbird", "id": 1813973}]}, "AsyncShutdownTimeout | IOUtils: waiting for profileBeforeChange IO to complete | JSON store: writing data for 'targeting.snapshot'": {"tc_rank": 10, "crash_count": 70, "estimated_user_count": 67, "startup_percent": 0.0, "bugs": [{"id": 1799823, "resolution": "FIXED", "product": "Toolkit Graveyard", "component": "OS.File", "last_change_time": "2023-05-17T14:14:46Z"}, {"product": "Toolkit", "resolution": "FIXED", "component": "Background Tasks", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1804757, "last_change_time": "2024-01-29T09:01:54Z", "cf_status_firefox132": "---"}, {"last_change_time": "2024-02-29T18:59:37Z", "cf_status_firefox132": "---", "id": 1830551, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "Background Tasks", "resolution": "", "product": "Toolkit"}, {"product": "Toolkit", "resolution": "", "component": "Background Tasks", "cf_status_firefox131": "affected", "cf_tracking_firefox131": "---", "id": 1877111, "last_change_time": "2024-08-21T14:24:34Z", "cf_status_firefox132": "---"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | js::Nursery::maybeMoveRawBufferOnPromotion": {"tc_rank": 11, "crash_count": 68, "estimated_user_count": 52, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2024-08-16T16:17:43Z", "resolution": "", "cf_status_firefox131": "---", "component": "JavaScript: GC", "id": 1472062, "product": "Core", "cf_tracking_firefox131": "---"}]}, "js::gc::HeaderWord::get": {"tc_rank": 12, "crash_count": 62, "estimated_user_count": 52, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-09-23T11:44:56Z", "component": "JavaScript: GC", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "id": 1799300, "product": "Core", "cf_status_firefox131": "---", "resolution": ""}, {"product": "Core", "cf_status_firefox131": "---", "resolution": "FIXED", "last_change_time": "2024-09-19T02:36:31Z", "component": "JavaScript Engine", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "id": 1889049}, {"product": "Thunderbird", "last_change_time": "2024-06-04T03:35:38Z", "id": 1895101, "resolution": "", "component": "General"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | js::gc::AllocateTenuredCellInGC": {"tc_rank": 13, "crash_count": 61, "estimated_user_count": 57, "startup_percent": 0.0, "bugs": [{"id": 1472062, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2024-08-16T16:17:43Z", "resolution": "", "product": "Core", "component": "JavaScript: GC"}]}, "OOM | large | alloc::raw_vec::handle_error": {"tc_rank": 14, "crash_count": 55, "estimated_user_count": 50, "startup_percent": 0.0, "bugs": [{"product": "Core", "id": 1906769, "cf_status_firefox131": "---", "component": "Graphics: WebRender", "resolution": "", "last_change_time": "2024-07-16T11:44:43Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---"}]}, "IPC::MessageReader::FatalError | IPC::MessageBufferReader::MessageBufferReader | IPC::ParamTraits::Read | IPC::ParamTraits::Read | IPC::ParamTraits::Read | IPC::ParamTraits::Read | IPC::ParamTraits::Read ...": {"tc_rank": 18, "crash_count": 50, "estimated_user_count": 40, "startup_percent": 0.0, "bugs": []}, "AsyncShutdownTimeout | AddonManager: Waiting to start provider shutdown. | AddonRepository Background Updater": {"tc_rank": 19, "crash_count": 47, "estimated_user_count": 47, "startup_percent": 0.0, "bugs": [{"product": "Toolkit", "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2024-09-09T12:20:34Z", "cf_status_firefox132": "---", "component": "Add-ons Manager", "cf_tracking_firefox131": "---", "id": 1841444}]}, "EnterJit": {"tc_rank": 20, "crash_count": 43, "estimated_user_count": 32, "startup_percent": 0.0, "bugs": [{"product": "Core", "component": "JavaScript Engine", "cf_status_firefox131": "---", "id": 858032, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-22T12:18:48Z", "resolution": ""}, {"cf_status_firefox131": "---", "id": 1034706, "component": "JavaScript Engine: JIT", "resolution": "INCOMPLETE", "last_change_time": "2022-02-24T19:55:36Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "product": "Core"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2020-01-09T22:52:38Z", "cf_status_firefox132": "---", "resolution": "INCOMPLETE", "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "id": 1453671}, {"product": "Core", "component": "JavaScript Engine: JIT", "id": 1848391, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2023-09-04T12:52:29Z", "cf_tracking_firefox131": "---", "resolution": "FIXED"}]}, "js::gc::MarkBitmap::markIfUnmarkedAtomic": {"tc_rank": 21, "crash_count": 43, "estimated_user_count": 37, "startup_percent": 0.0, "bugs": [{"component": "JavaScript: GC", "cf_status_firefox131": "---", "id": 719114, "cf_status_firefox132": "---", "last_change_time": "2024-09-24T16:22:48Z", "resolution": "", "product": "Core", "cf_tracking_firefox131": "---"}]}, "XREMain::XRE_main": {"tc_rank": 22, "crash_count": 41, "estimated_user_count": 14, "startup_percent": 0.975609756097561, "bugs": [{"id": 981681, "cf_tracking_firefox131": "---", "component": "General", "cf_status_firefox132": "---", "last_change_time": "2024-08-16T12:31:28Z", "product": "Core", "resolution": "MOVED", "cf_status_firefox131": "---"}, {"product": "Core", "resolution": "", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "component": "XPCOM", "cf_status_firefox132": "---", "id": 1909700, "last_change_time": "2024-08-19T13:00:10Z"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | js::gc::StoreBuffer::MonoTypeBuffer::sinkStore": {"tc_rank": 23, "crash_count": 39, "estimated_user_count": 34, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::Nursery::maybeMoveRawBufferOnPromotion": {"tc_rank": 24, "crash_count": 39, "estimated_user_count": 30, "startup_percent": 0.0, "bugs": [{"product": "Core", "last_change_time": "2024-08-16T16:17:43Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "component": "JavaScript: GC", "id": 1472062, "cf_status_firefox131": "---"}]}, "mozilla::LinkedListElement::setPreviousUnsafe": {"tc_rank": 25, "crash_count": 29, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"id": 1816848, "cf_status_firefox131": "---", "component": "Application Update", "resolution": "", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-13T16:27:30Z", "cf_status_firefox132": "---", "product": "Toolkit"}, {"cf_status_firefox131": "---", "id": 1822907, "component": "DOM: Animation", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2023-03-23T17:08:08Z", "product": "Core"}]}, "EMPTY: no frame data available; EmptyMinidump": {"tc_rank": 26, "crash_count": 28, "estimated_user_count": 21, "startup_percent": 0.35714285714285715, "bugs": [{"last_change_time": "2024-09-16T13:45:38Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Crash Reporting", "id": 1245570, "cf_status_firefox131": "---", "resolution": "", "product": "Fenix"}, {"cf_status_firefox131": "---", "resolution": "", "product": "Toolkit", "last_change_time": "2024-08-09T15:44:14Z", "component": "Crash Reporting", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "id": 1360392}, {"product": "Fenix", "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2024-01-12T02:38:31Z", "id": 1644486, "component": "Crash Reporting", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---"}, {"last_change_time": "2024-08-22T13:02:19Z", "id": 1866123, "cf_tracking_firefox131": "---", "component": "Graphics: CanvasWebGL", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "resolution": "WONTFIX", "product": "Core"}]}, "TppRaiseInvalidParameter": {"tc_rank": 27, "crash_count": 28, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"last_change_time": "2016-05-23T18:13:14Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "Audio/Video: Playback", "id": 1274127, "cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core"}, {"product": "Core", "resolution": "FIXED", "cf_status_firefox131": "---", "component": "Audio/Video: Playback", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "id": 1274132, "last_change_time": "2016-05-25T21:58:26Z"}, {"product": "External Software Affecting Firefox", "resolution": "", "cf_status_firefox131": "---", "id": 1905107, "cf_tracking_firefox131": "---", "component": "Other", "cf_status_firefox132": "---", "last_change_time": "2024-09-10T12:18:25Z"}]}, "mozilla::MFCDMChild::MFCDMChild": {"tc_rank": 28, "crash_count": 25, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"id": 1819492, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "last_change_time": "2023-10-18T03:43:49Z", "cf_status_firefox132": "---", "resolution": "FIXED", "product": "Core", "component": "Audio/Video"}]}, "shutdownhang | mozilla::SpinEventLoopUntil | nsThreadPool::ShutdownWithTimeout": {"tc_rank": 29, "crash_count": 25, "estimated_user_count": 24, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "resolution": "", "last_change_time": "2024-09-04T07:51:23Z", "cf_status_firefox131": "---", "component": "XPCOM", "id": 1866944, "product": "Core", "cf_tracking_firefox131": "---"}, {"resolution": "FIXED", "last_change_time": "2024-08-29T13:01:40Z", "cf_status_firefox132": "---", "id": 1895110, "component": "Address Bar", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "product": "Firefox"}]}, "shutdownhang | mozilla::SpinEventLoopUntil | mozilla::net::nsHttpConnectionMgr::Shutdown": {"tc_rank": 30, "crash_count": 23, "estimated_user_count": 21, "startup_percent": 0.0, "bugs": [{"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-05-24T13:38:02Z", "resolution": "", "cf_status_firefox132": "---", "id": 1633342, "component": "Networking", "cf_status_firefox131": "---"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js_memcpy": {"tc_rank": 31, "crash_count": 21, "estimated_user_count": 17, "startup_percent": 0.0, "bugs": [{"product": "Core", "resolution": "", "cf_status_firefox131": "---", "id": 1472062, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "JavaScript: GC", "last_change_time": "2024-08-16T16:17:43Z"}]}, "shutdownhang | mozilla::BounceTrackingProtectionStorage::WaitForInitialization | mozilla::BounceTrackingProtectionStorage::BlockShutdown": {"tc_rank": 32, "crash_count": 21, "estimated_user_count": 21, "startup_percent": 1.0, "bugs": []}, "mozilla::interceptor::ReadOnlyTargetBytes::IsValidAtOffset": {"tc_rank": 33, "crash_count": 20, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"product": "Toolkit", "component": "Application Update", "cf_status_firefox131": "---", "id": 1816848, "last_change_time": "2024-09-13T16:27:30Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": ""}]}, "firefox_on_glean::metrics::__glean_metric_maps::COUNTER_MAP::closure$0": {"tc_rank": 34, "crash_count": 19, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::StaticPrefs::InitStaticPrefsFromShared": {"tc_rank": 35, "crash_count": 19, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"component": "Preferences: Backend", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1573731, "resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2019-09-06T18:24:27Z"}, {"id": 1578430, "cf_status_firefox131": "---", "component": "Preferences: Backend", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2022-12-09T16:58:08Z", "resolution": ""}]}, "mozilla::dom::ServiceWorkerRegistrar::GetShutdownPhase": {"tc_rank": 36, "crash_count": 19, "estimated_user_count": 4, "startup_percent": 1.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2024-08-30T12:33:57Z", "resolution": "FIXED", "component": "XPCOM", "cf_status_firefox131": "---", "id": 1471720, "product": "Core", "cf_tracking_firefox131": "---"}]}, "shutdownhang | ZwAlpcSendWaitReceivePort": {"tc_rank": 37, "crash_count": 19, "estimated_user_count": 19, "startup_percent": 0.0, "bugs": []}, "__pthread_mutex_lock_full": {"tc_rank": 38, "crash_count": 18, "estimated_user_count": 7, "startup_percent": 0.05555555555555555, "bugs": [{"component": "Crash Reporting", "product": "Toolkit", "resolution": "", "cf_status_firefox132": "---", "last_change_time": "2024-09-23T13:18:48Z", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1912696}]}, "js::frontend::RewritingParseNodeVisitor::visit": {"tc_rank": 39, "crash_count": 18, "estimated_user_count": 11, "startup_percent": 0.0, "bugs": [{"resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2023-12-03T05:23:26Z", "id": 1547561, "cf_status_firefox131": "---", "component": "JavaScript Engine", "product": "Core"}, {"product": "Core", "last_change_time": "2024-08-27T12:15:00Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "component": "JavaScript Engine", "cf_status_firefox131": "---", "id": 1868775}]}, "shutdownhang | mozilla::SpinEventLoopUntil | nsThreadManager::ShutdownNonMainThreads": {"tc_rank": 40, "crash_count": 18, "estimated_user_count": 14, "startup_percent": 0.0, "bugs": [{"product": "Core", "resolution": "", "component": "XPCOM", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1505660, "cf_status_firefox132": "---", "last_change_time": "2024-07-17T12:20:58Z"}]}, "js::gc::Arena::zone": {"tc_rank": 41, "crash_count": 17, "estimated_user_count": 14, "startup_percent": 0.0, "bugs": []}, "shutdownhang | mozilla::SpinEventLoopUntil | mozilla::PreferencesWriter::Flush": {"tc_rank": 42, "crash_count": 17, "estimated_user_count": 13, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "id": 1710018, "component": "Preferences: Backend", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-08-19T12:43:26Z", "resolution": ""}]}, "mozilla::widget::NativeKey::GetFollowingCharMessage": {"tc_rank": 43, "crash_count": 16, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": [{"id": 962140, "component": "Widget: WinRT", "product": "Core Graveyard", "resolution": "FIXED", "last_change_time": "2019-03-26T17:53:39Z"}, {"resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2017-02-02T14:41:52Z", "id": 992751, "cf_status_firefox131": "---", "component": "Widget: Win32", "product": "Core"}, {"product": "Core", "component": "Widget: Win32", "id": 1302956, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2017-01-30T02:24:39Z", "cf_status_firefox132": "---", "resolution": "FIXED"}, {"product": "Core", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2017-02-07T06:27:12Z", "resolution": "FIXED", "component": "Widget: Win32", "cf_status_firefox131": "---", "id": 1334947}, {"last_change_time": "2017-02-07T06:27:56Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "component": "Widget: Win32", "cf_status_firefox131": "---", "id": 1335670, "product": "Core"}, {"product": "Core", "component": "Widget: Win32", "id": 1336028, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2017-02-07T06:28:20Z", "cf_tracking_firefox131": "---", "resolution": "FIXED"}, {"product": "Core", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2017-02-07T06:30:08Z", "id": 1336080, "cf_status_firefox131": "---", "component": "Widget: Win32"}, {"product": "Core", "cf_status_firefox131": "---", "id": 1336322, "component": "Widget: Win32", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2017-02-07T06:30:19Z"}, {"component": "Widget: Win32", "id": 1336331, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2017-02-07T06:30:32Z", "cf_tracking_firefox131": "---", "resolution": "FIXED", "product": "Core"}, {"component": "Widget: Win32", "cf_status_firefox131": "---", "id": 1343446, "last_change_time": "2017-03-14T22:10:37Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "product": "Core"}, {"last_change_time": "2024-09-27T12:06:12Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "fixed", "resolution": "FIXED", "component": "DOM: UI Events & Focus Handling", "id": 1919824, "cf_status_firefox131": "affected", "product": "Core"}]}, "AsyncShutdownTimeout | profile-before-change | Places Connection shutdown": {"tc_rank": 44, "crash_count": 15, "estimated_user_count": 14, "startup_percent": 0.0, "bugs": [{"cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Places", "id": 1395542, "last_change_time": "2024-01-01T12:27:57Z", "resolution": "", "cf_status_firefox131": "---", "product": "Toolkit"}]}, "IPCError-browser | GPUProcessKill": {"tc_rank": 45, "crash_count": 15, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-05-29T22:26:56Z", "cf_status_firefox132": "---", "id": 1897636, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "Graphics", "resolution": "FIXED", "product": "Core"}, {"cf_status_firefox132": "affected", "last_change_time": "2024-09-26T20:51:39Z", "cf_status_firefox131": "affected", "cf_tracking_firefox131": "---", "id": 1908798, "component": "Graphics: WebRender", "product": "Core", "resolution": ""}]}, "js::NativeObject::getDenseInitializedLength": {"tc_rank": 46, "crash_count": 15, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"component": "JavaScript: GC", "resolution": "", "product": "Core", "last_change_time": "2024-05-14T16:41:23Z", "cf_status_firefox132": "---", "id": 1639157, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}]}, "mozilla::Maybe::operator-> | mozilla::gfx::DeviceManagerDx::CreateContentDevice": {"tc_rank": 47, "crash_count": 15, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": [{"resolution": "", "cf_status_firefox131": "---", "product": "Core", "id": 1894405, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Audio/Video", "last_change_time": "2024-07-30T13:38:45Z"}]}, "mozilla::detail::IntrinsicAddSub::add": {"tc_rank": 48, "crash_count": 15, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-08-20T21:18:09Z", "resolution": "FIXED", "component": "DOM: Workers", "cf_status_firefox131": "---", "id": 1907383, "product": "Core"}]}, "nsGlobalWindowInner::ClearDocumentDependentSlots": {"tc_rank": 49, "crash_count": 15, "estimated_user_count": 13, "startup_percent": 0.0, "bugs": [{"id": 1405521, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "DOM: Core & HTML", "last_change_time": "2024-05-05T14:25:18Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": ""}, {"resolution": "INCOMPLETE", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2022-03-22T17:04:34Z", "component": "DOM: Core & HTML", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1573464}, {"resolution": "INCOMPLETE", "last_change_time": "2023-01-11T15:58:54Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "id": 1803675, "cf_status_firefox131": "---"}]}, "AsyncShutdownTimeout | profile-before-change | RemoteSettingsClient - finish IDB access.": {"tc_rank": 50, "crash_count": 14, "estimated_user_count": 14, "startup_percent": 0.0, "bugs": [{"component": "Remote Settings Client", "cf_status_firefox131": "---", "id": 1624878, "cf_status_firefox132": "---", "last_change_time": "2024-09-02T12:26:04Z", "resolution": "", "product": "Firefox", "cf_tracking_firefox131": "---"}, {"last_change_time": "2024-08-22T10:42:38Z", "resolution": "FIXED", "cf_status_firefox132": "---", "id": 1912893, "component": "Remote Settings Client", "cf_status_firefox131": "fixed", "cf_tracking_firefox131": "---", "product": "Firefox"}]}, "js::InternalBarrierMethods::isMarkable": {"tc_rank": 51, "crash_count": 14, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "js::frontend::ParseNode::getKind": {"tc_rank": 52, "crash_count": 14, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2014-03-11T19:37:40Z", "cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 972961}, {"cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED", "last_change_time": "2023-12-06T15:55:46Z", "cf_status_firefox132": "---", "id": 1515051, "component": "JavaScript Engine", "cf_status_firefox131": "---"}, {"cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED", "last_change_time": "2019-06-12T01:43:14Z", "cf_status_firefox132": "---", "id": 1550628, "component": "JavaScript Engine", "cf_status_firefox131": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "component": "JavaScript Engine", "cf_status_firefox131": "---", "id": 1801916, "cf_status_firefox132": "---", "last_change_time": "2024-06-12T12:21:58Z", "resolution": ""}, {"product": "DevTools", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2023-10-20T12:02:51Z", "resolution": "INCOMPLETE", "cf_status_firefox131": "---", "component": "Inspector: Rules", "id": 1853224}, {"last_change_time": "2016-07-02T17:34:31Z", "id": 1127012, "component": "JavaScript Engine", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core"}]}, "objc_msgSend | -[_NSTrackingAreaAKManager _updateActiveTrackingAreasForWindowLocation:modifierFlags:]": {"tc_rank": 53, "crash_count": 14, "estimated_user_count": 14, "startup_percent": 0.0, "bugs": []}, "OOM | large | mozilla::dom::CallbackObject::DeleteCycleCollectable": {"tc_rank": 54, "crash_count": 13, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-03-28T22:51:55Z", "cf_tracking_firefox131": "---", "component": "Cycle Collector", "cf_status_firefox132": "---", "id": 1861431, "product": "Core", "cf_status_firefox131": "---", "resolution": ""}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | js::gc::StoreBuffer::WholeCellBuffer::allocateCellSet": {"tc_rank": 55, "crash_count": 13, "estimated_user_count": 13, "startup_percent": 0.0, "bugs": []}, "hsw::gather": {"tc_rank": 56, "crash_count": 13, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "shutdownhang | google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread": {"tc_rank": 57, "crash_count": 13, "estimated_user_count": 13, "startup_percent": 0.0, "bugs": [{"cf_tracking_firefox131": "---", "product": "Toolkit", "last_change_time": "2024-01-30T10:37:59Z", "resolution": "", "cf_status_firefox132": "---", "id": 1726517, "component": "Crash Reporting", "cf_status_firefox131": "---"}, {"product": "Toolkit", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2024-01-11T12:17:11Z", "resolution": "", "cf_status_firefox131": "---", "component": "Crash Reporting", "id": 1852842}]}, "(unloaded obs-virtualcam-module64.dll) | webrtc::videocapturemodule::VideoCaptureDS::~VideoCaptureDS": {"tc_rank": 58, "crash_count": 12, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"component": "WebRTC: Audio/Video", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1707060, "resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-08-02T08:53:38Z"}]}, "AllocInfo::GetInChunk": {"tc_rank": 59, "crash_count": 12, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"id": 1825837, "cf_status_firefox131": "---", "component": "Memory Allocator", "resolution": "INVALID", "cf_tracking_firefox131": "---", "last_change_time": "2024-01-05T22:15:41Z", "cf_status_firefox132": "---", "product": "Core"}]}, "JS::Rooted::~Rooted": {"tc_rank": 60, "crash_count": 12, "estimated_user_count": 6, "startup_percent": 0.5, "bugs": [{"id": 1837205, "cf_status_firefox131": "---", "component": "Crash Reporting", "resolution": "", "last_change_time": "2023-11-20T12:20:19Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "product": "Toolkit"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | v8::internal::Zone::New": {"tc_rank": 61, "crash_count": 12, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "js::gc::InCollectedNurseryRegion": {"tc_rank": 62, "crash_count": 12, "estimated_user_count": 11, "startup_percent": 0.0, "bugs": []}, "shutdownhang | mozilla::SpinEventLoopUntil | mozilla::dom::quota::QuotaManager::Observer::Observe": {"tc_rank": 63, "crash_count": 12, "estimated_user_count": 12, "startup_percent": 0.0, "bugs": [{"id": 1538619, "cf_status_firefox131": "---", "component": "Storage: IndexedDB", "resolution": "FIXED", "cf_tracking_firefox131": "---", "last_change_time": "2020-06-05T06:56:28Z", "cf_status_firefox132": "---", "product": "Core"}, {"product": "Core", "id": 1542541, "cf_status_firefox131": "---", "component": "Storage: IndexedDB", "resolution": "FIXED", "last_change_time": "2019-06-26T01:54:12Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---"}, {"resolution": "", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-06-27T12:54:02Z", "id": 1588498, "cf_status_firefox131": "---", "component": "Storage: Quota Manager", "product": "Core"}, {"cf_status_firefox132": "---", "component": "Storage: Quota Manager", "cf_tracking_firefox131": "---", "id": 1487194, "last_change_time": "2019-10-23T19:20:54Z", "resolution": "WONTFIX", "cf_status_firefox131": "---", "product": "Core"}]}, "OOM | large | IPC::ParamTraits::Read | mozilla::dom::PContentParent::OnMessageReceived": {"tc_rank": 64, "crash_count": 11, "estimated_user_count": 11, "startup_percent": 0.0, "bugs": []}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | nsTSubstring::GetMutableData | IPC::ParamTraits >::Read::::operator() | IPC::ReadSequenceParam | IPC::ParamTraits >::Read | IPC::ParamTraits const&, (anonymous namespace)::ParentImpl::ShutdownBackgroundThread::&&, nsIThread*) | (anonymous namespace)::ParentImpl::ShutdownBackgroundThread": {"tc_rank": 67, "crash_count": 11, "estimated_user_count": 11, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2024-01-20T07:22:34Z", "resolution": "INVALID", "component": "General", "cf_status_firefox131": "---", "id": 1875602}, {"product": "Toolkit", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "last_change_time": "2024-09-20T12:22:36Z", "cf_status_firefox131": "---", "component": "Crash Reporting", "id": 1885714}]}, "ICUReporter::Alloc": {"tc_rank": 68, "crash_count": 10, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": []}, "OOM | large | EMPTY: no frame data available; EmptyMinidump": {"tc_rank": 69, "crash_count": 10, "estimated_user_count": 10, "startup_percent": 0.0, "bugs": [{"product": "Toolkit", "resolution": "", "cf_status_firefox131": "---", "id": 1360392, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "Crash Reporting", "last_change_time": "2024-08-09T15:44:14Z"}]}, "RedBlackTreeNode::Left": {"tc_rank": 70, "crash_count": 10, "estimated_user_count": 2, "startup_percent": 0.9, "bugs": []}, "libnvidia-eglcore.so.550.107.02": {"tc_rank": 71, "crash_count": 10, "estimated_user_count": 2, "startup_percent": 1.0, "bugs": []}, "mozilla::detail::VectorImpl::new_": {"tc_rank": 72, "crash_count": 10, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "mozilla::dom::RemoteObjectProxyBase::GetOrCreateProxyObject": {"tc_rank": 73, "crash_count": 10, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": [{"component": "DOM: Content Processes", "resolution": "WORKSFORME", "product": "Core", "last_change_time": "2022-01-10T13:18:20Z", "cf_status_firefox132": "---", "id": 1568238, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}, {"component": "DOM: Window and Location", "product": "Core", "resolution": "", "cf_status_firefox132": "---", "last_change_time": "2024-04-30T23:42:25Z", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1829760}, {"cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1891409, "cf_status_firefox132": "---", "last_change_time": "2024-05-09T21:03:47Z", "product": "Core", "resolution": "", "component": "DOM: Window and Location"}]}, "shutdownhang | NtAlpcSendWaitReceivePort": {"tc_rank": 74, "crash_count": 10, "estimated_user_count": 10, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "component": "Widget: Win32", "id": 1551856, "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2024-05-22T21:13:24Z", "product": "Core", "cf_tracking_firefox131": "---"}]}, "FREEBL_GetVector": {"tc_rank": 75, "crash_count": 9, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | AppendUTF16toUTF8 | NS_ConvertUTF16toUTF8::NS_ConvertUTF16toUTF8 | mozilla::css::Loader::LoadInlineStyle": {"tc_rank": 76, "crash_count": 9, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": []}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | AppendUTF16toUTF8 | NS_ConvertUTF16toUTF8::NS_ConvertUTF16toUTF8 | mozilla::dom::serviceWorkerScriptCache::(anonymous namespace)::CompareManager::WriteToCache(JSContext*, mozilla::dom::cache::...": {"tc_rank": 77, "crash_count": 9, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": []}, "OOM | large | mozilla::JSHolderMap::Extract": {"tc_rank": 78, "crash_count": 9, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-05-17T09:59:40Z", "resolution": "", "product": "Thunderbird", "component": "General", "id": 1882757}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | v8::internal::Zone::New(v8::internal::(anonymous namespace)::RegExpParserState*&, v8::internal::(anonymous namespace)::SubexpressionType&, v8::internal:...": {"tc_rank": 79, "crash_count": 9, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": []}, "googleinputtools.ime": {"tc_rank": 80, "crash_count": 9, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": []}, "mio::sys::windows::named_pipe::read_done": {"tc_rank": 81, "crash_count": 9, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-09-11T12:16:52Z", "component": "Audio/Video: Playback", "cf_status_firefox132": "affected", "cf_tracking_firefox131": "---", "id": 1916629, "product": "Core", "cf_status_firefox131": "affected", "resolution": ""}]}, "mozilla::dom::Selection::SelectFrames": {"tc_rank": 82, "crash_count": 9, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-09-22T19:18:36Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "", "id": 1885462, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "DOM: Selection"}, {"cf_status_firefox132": "---", "component": "DOM: Selection", "cf_status_firefox131": "---", "id": 1890888, "resolution": "FIXED", "last_change_time": "2024-04-12T08:23:05Z", "cf_tracking_firefox131": "---", "product": "Core"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-06-18T19:22:11Z", "resolution": "FIXED", "cf_status_firefox131": "---", "id": 1896229, "component": "DOM: Selection", "cf_status_firefox132": "---"}, {"cf_status_firefox132": "---", "component": "DOM: Selection", "cf_status_firefox131": "---", "id": 1907464, "resolution": "FIXED", "last_change_time": "2024-07-17T12:58:46Z", "cf_tracking_firefox131": "---", "product": "Core"}]}, "shutdownhang | mozilla::SpinEventLoopUntil | nsThreadManager::SpinEventLoopUntilInternal": {"tc_rank": 83, "crash_count": 9, "estimated_user_count": 9, "startup_percent": 0.0, "bugs": []}, "wr_shaders_delete": {"tc_rank": 84, "crash_count": 9, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "WORKSFORME", "last_change_time": "2023-03-10T00:30:24Z", "cf_status_firefox131": "---", "component": "Graphics: WebRender", "id": 1751607}]}, "AsyncShutdownTimeout | Places Clients shutdown | sanitize.js: Sanitize on shutdown": {"tc_rank": 85, "crash_count": 8, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": [{"product": "Core", "component": "Storage: Quota Manager", "cf_status_firefox131": "---", "id": 1404105, "cf_tracking_firefox131": "---", "last_change_time": "2021-08-14T20:51:55Z", "cf_status_firefox132": "---", "resolution": "FIXED"}, {"product": "Firefox", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-07-22T12:23:56Z", "resolution": "", "component": "Session Restore", "cf_status_firefox131": "---", "id": 1426941}, {"cf_status_firefox131": "---", "id": 1507171, "component": "Data Sanitization", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2019-05-05T10:08:54Z", "product": "Toolkit"}, {"product": "Toolkit", "cf_tracking_firefox131": "---", "last_change_time": "2019-10-29T17:21:35Z", "cf_status_firefox132": "---", "resolution": "FIXED", "component": "Data Sanitization", "id": 1524200, "cf_status_firefox131": "---"}, {"id": 1578273, "cf_status_firefox131": "---", "component": "Data Sanitization", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2023-07-15T12:15:10Z", "product": "Toolkit"}]}, "AsyncShutdownTimeout | profile-before-change | AddonManager: shutting down.": {"tc_rank": 86, "crash_count": 8, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": []}, "IPC::Channel::ChannelImpl::SetOtherPid | IPC::Channel::ChannelImpl::ProcessIncomingMessages | IPC::Channel::ChannelImpl::OnIOCompleted | base::MessagePumpForIO::WaitForIOCompletion | base::MessagePumpForIO::WaitForWork | base::MessagePumpForIO::DoRunLoop": {"tc_rank": 87, "crash_count": 8, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "OOM | large | IPC::ParamTraits::Read | mozilla::gfx::PGPUChild::OnMessageReceived": {"tc_rank": 88, "crash_count": 8, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | v8::internal::Zone::NewArray": {"tc_rank": 89, "crash_count": 8, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::gc::StoreBuffer::MonoTypeBuffer::sinkStore": {"tc_rank": 90, "crash_count": 8, "estimated_user_count": 8, "startup_percent": 0.0, "bugs": []}, "TypedBaseAlloc::dealloc": {"tc_rank": 91, "crash_count": 8, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "mozilla::dom::Document::SetLastFocusTime": {"tc_rank": 92, "crash_count": 8, "estimated_user_count": 3, "startup_percent": 1.0, "bugs": [{"id": 1711442, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "DOM: UI Events & Focus Handling", "last_change_time": "2021-07-28T18:50:06Z", "resolution": "FIXED", "cf_status_firefox131": "---", "product": "Core"}]}, "shutdownhang | mozilla::SyncRunnable::DispatchToThread": {"tc_rank": 93, "crash_count": 8, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": [{"last_change_time": "2019-02-26T17:00:24Z", "id": 1453038, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "Safe Browsing", "cf_status_firefox131": "---", "resolution": "FIXED", "product": "Toolkit"}, {"id": 1504774, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "Safe Browsing", "last_change_time": "2019-01-08T17:20:49Z", "resolution": "FIXED", "cf_status_firefox131": "---", "product": "Toolkit"}]}, "AsyncShutdownTimeout | IOUtils: waiting for profileBeforeChange IO to complete | CrashMonitor: Writing notifications to file after receiving profile-before-change and awaiting all checkpoints written": {"tc_rank": 94, "crash_count": 7, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": [{"product": "Firefox", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2022-04-20T15:20:46Z", "id": 1761652, "cf_status_firefox131": "---", "component": "Session Restore"}]}, "HandleGLibMessage": {"tc_rank": 95, "crash_count": 7, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-03-15T09:25:40Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1743144, "component": "Widget: Gtk", "product": "Core", "resolution": "FIXED"}, {"product": "Core", "resolution": "", "component": "Widget: Gtk", "cf_tracking_firefox131": "---", "cf_status_firefox131": "affected", "id": 1890074, "cf_status_firefox132": "---", "last_change_time": "2024-09-27T13:22:32Z"}, {"product": "Core", "resolution": "", "component": "Widget: Gtk", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1917270, "cf_status_firefox132": "---", "last_change_time": "2024-09-27T13:38:48Z"}]}, "MsaaProxy::get_TextContainer": {"tc_rank": 96, "crash_count": 7, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-05-20T05:59:43Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1890155, "component": "Disability Access APIs", "product": "Core", "resolution": ""}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | js::gc::StoreBuffer::GenericBuffer::put": {"tc_rank": 97, "crash_count": 7, "estimated_user_count": 7, "startup_percent": 0.0, "bugs": []}, "_DllMainCRTStartup": {"tc_rank": 98, "crash_count": 7, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "encoding_rs::mem::is_ascii_impl": {"tc_rank": 99, "crash_count": 7, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "mozilla::dom::quota::QuotaManager::Shutdown::$::operator()": {"tc_rank": 100, "crash_count": 7, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-06-27T12:54:02Z", "resolution": "", "cf_status_firefox132": "---", "id": 1588498, "cf_status_firefox131": "---", "component": "Storage: Quota Manager", "cf_tracking_firefox131": "---", "product": "Core"}]}, "neqo_common::codec::Encoder::encode_uint": {"tc_rank": 101, "crash_count": 7, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"component": "Networking: DNS", "cf_status_firefox132": "affected", "id": 1919678, "cf_status_firefox131": "affected", "resolution": "", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-27T18:01:39Z"}]}, "nsThread::Dispatch": {"tc_rank": 102, "crash_count": 7, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"component": "Networking", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 716386, "resolution": "WONTFIX", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2016-02-11T16:34:42Z"}, {"resolution": "INCOMPLETE", "last_change_time": "2020-02-03T20:22:00Z", "product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "XPCOM", "id": 1182878, "cf_status_firefox131": "---"}, {"last_change_time": "2018-02-07T23:23:23Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED", "cf_status_firefox131": "---", "id": 1433855, "cf_status_firefox132": "---", "component": "Security: Process Sandboxing"}]}, "@0x0 | tokenmgr.dll | secmod_ModuleInit": {"tc_rank": 103, "crash_count": 6, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "AsyncShutdownTimeout | profile-before-change | Remote Settings profile-before-change": {"tc_rank": 104, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"id": 1605973, "cf_status_firefox131": "---", "component": "Remote Settings Client", "resolution": "", "last_change_time": "2024-09-23T17:45:03Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Firefox"}]}, "CallHookWithSEH": {"tc_rank": 105, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"id": 1400169, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2023-07-19T18:09:46Z", "resolution": "", "product": "External Software Affecting Firefox", "component": "Other"}, {"last_change_time": "2023-11-06T14:02:51Z", "component": "Mail Window Front End", "resolution": "INVALID", "id": 1771815, "product": "Thunderbird"}]}, "InitializeNSSWithFallbacks": {"tc_rank": 106, "crash_count": 6, "estimated_user_count": 3, "startup_percent": 0.16666666666666666, "bugs": [{"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-01-28T17:29:46Z", "resolution": "", "cf_status_firefox132": "---", "id": 1834770, "cf_status_firefox131": "---", "component": "Security: PSM"}]}, "NSToCoordRoundWithClamp": {"tc_rank": 107, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "OOM | large | nsTArray_Impl::AppendElementsInternal | nsTArray::AppendElement | CCGraphBuilder::NoteWeakMapping": {"tc_rank": 108, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | JS::CallbackTracer::onEdge": {"tc_rank": 109, "crash_count": 6, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"resolution": "", "product": "Core", "component": "JavaScript: GC", "id": 1472062, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-08-16T16:17:43Z", "cf_status_firefox132": "---"}, {"cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1891944, "cf_status_firefox132": "---", "last_change_time": "2024-04-18T12:43:08Z", "product": "Core", "resolution": "WONTFIX", "component": "JavaScript Engine"}]}, "PtrInfo::AnnotatedReleaseAssert": {"tc_rank": 110, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"resolution": "", "cf_status_firefox132": "---", "last_change_time": "2023-03-14T17:41:58Z", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1277280, "component": "Cycle Collector", "product": "Core"}, {"product": "Core", "resolution": "FIXED", "cf_status_firefox132": "---", "last_change_time": "2018-08-13T18:27:51Z", "cf_tracking_firefox131": "---", "id": 1448604, "cf_status_firefox131": "---", "component": "Security: CAPS"}, {"product": "Core", "last_change_time": "2023-01-30T23:54:53Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "component": "Cycle Collector", "id": 1612857, "cf_status_firefox131": "---"}]}, "RedBlackTree::TreeNode::SetColor": {"tc_rank": 111, "crash_count": 6, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2021-06-23T12:19:08Z", "resolution": "WORKSFORME", "cf_status_firefox132": "---", "id": 1466567, "cf_status_firefox131": "---", "component": "Memory Allocator"}, {"cf_tracking_firefox131": "---", "product": "Core", "resolution": "", "last_change_time": "2024-01-02T14:39:09Z", "cf_status_firefox132": "---", "id": 1872261, "component": "Memory Allocator", "cf_status_firefox131": "---"}]}, "RtlpUnwindPrologue | RtlpxVirtualUnwind | RtlpUnwindPrologue | RtlpxVirtualUnwind | RtlpUnwindPrologue | RtlpxVirtualUnwind | RtlpUnwindPrologue | RtlpxVirtualUnwind | RtlpUnwindPrologue | RtlpxVirtualUnwind | RtlpUnwindPrologue | RtlpxVirtualUnwind | ...": {"tc_rank": 112, "crash_count": 6, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"product": "External Software Affecting Firefox", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-11T11:26:45Z", "cf_status_firefox132": "---", "resolution": "", "component": "Other", "cf_status_firefox131": "---", "id": 1913267}]}, "bad hardware | nsZipHandle::findDataStart": {"tc_rank": 113, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 0.16666666666666666, "bugs": []}, "js::ObjectSlots::isSharedEmptySlots": {"tc_rank": 114, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"component": "JavaScript: GC", "id": 787879, "cf_status_firefox131": "---", "last_change_time": "2023-10-03T12:14:51Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "", "product": "Core"}]}, "mozilla::EbmlComposer::WriteSimpleBlock": {"tc_rank": 115, "crash_count": 6, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "id": 1702483, "cf_status_firefox132": "---", "component": "Audio/Video: Recording", "last_change_time": "2023-04-27T14:42:50Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED"}, {"id": 1808680, "cf_status_firefox131": "---", "component": "Audio/Video: Recording", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2023-04-27T14:43:10Z", "resolution": "FIXED"}, {"cf_status_firefox132": "---", "component": "Audio/Video: Recording", "cf_status_firefox131": "---", "id": 1830323, "resolution": "", "last_change_time": "2023-08-29T13:40:38Z", "cf_tracking_firefox131": "---", "product": "Core"}]}, "mozilla::Maybe::ref | js::gc::GCRuntime::gcOptions": {"tc_rank": 116, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"id": 1911488, "cf_status_firefox131": "affected", "component": "JavaScript: GC", "resolution": "", "last_change_time": "2024-08-06T16:22:14Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}]}, "mozilla::MediaChangeMonitor::DecodeFirstSample::::operator()": {"tc_rank": 117, "crash_count": 6, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"resolution": "", "last_change_time": "2024-09-25T12:13:05Z", "cf_status_firefox132": "affected", "id": 1916625, "component": "Audio/Video: Playback", "cf_status_firefox131": "affected", "cf_tracking_firefox131": "---", "product": "Core"}]}, "mozilla::detail::nsTStringLengthStorage::nsTStringLengthStorage": {"tc_rank": 118, "crash_count": 6, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-01-02T18:55:36Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "", "id": 1869203, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "XPCOM"}]}, "mozilla::dom::TypedArray_base::ProcessFixedData": {"tc_rank": 119, "crash_count": 6, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"component": "DOM: Bindings (WebIDL)", "resolution": "", "product": "Core", "cf_status_firefox132": "---", "last_change_time": "2024-08-06T09:58:08Z", "id": 1856672, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}]}, "mozilla::net::DocumentChannel::SetLoadFlags": {"tc_rank": 120, "crash_count": 6, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "id": 1634598, "cf_status_firefox132": "---", "component": "Networking", "last_change_time": "2020-08-03T20:15:43Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": "FIXED"}, {"last_change_time": "2024-05-27T20:38:10Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "FIXED", "id": 1656925, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Networking"}, {"cf_status_firefox131": "wontfix", "id": 1694904, "cf_status_firefox132": "affected", "component": "DOM: Navigation", "last_change_time": "2024-09-27T18:12:12Z", "cf_tracking_firefox131": "---", "product": "Core", "resolution": ""}]}, "nsLocalFile::GetDateImpl": {"tc_rank": 121, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "pthread_kill | abort | __report_load": {"tc_rank": 122, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2022-11-29T16:27:14Z", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1670195, "component": "Other", "product": "External Software Affecting Firefox", "resolution": "INVALID"}]}, "shutdownhang | RtlpWaitOnAddressWithTimeout | RtlpWaitOnAddress | RtlWaitOnAddress | WaitOnAddress": {"tc_rank": 123, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"resolution": "FIXED", "product": "Data Platform and Tools", "component": "Glean: SDK", "id": 1828066, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2023-07-14T00:12:00Z", "cf_status_firefox132": "---"}]}, "shutdownhang | mozilla::LazyIdleThreadShutdown": {"tc_rank": 124, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": []}, "shutdownhang | mozilla::SpinEventLoopUntil | nsThread::Shutdown | mozilla::storage::Connection::shutdownAsyncThread": {"tc_rank": 125, "crash_count": 6, "estimated_user_count": 6, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-05-21T12:38:54Z", "resolution": "", "product": "Thunderbird", "component": "General", "id": 1861875}]}, "wdhints.dll | Microsoft::WRL::Details::RuntimeClassImpl::Release": {"tc_rank": 126, "crash_count": 6, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "(anonymous namespace)::get_output_buffer": {"tc_rank": 127, "crash_count": 5, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"product": "Core", "resolution": "", "cf_tracking_firefox131": "---", "last_change_time": "2024-06-24T16:56:43Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1843903, "component": "Audio/Video: cubeb"}]}, "CallQueryInterface": {"tc_rank": 128, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"id": 136185, "cf_status_firefox131": "---", "component": "Print Preview", "resolution": "FIXED", "last_change_time": "2002-05-03T17:24:45Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "DOM: Core & HTML", "id": 205225, "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2013-04-04T20:53:36Z"}, {"last_change_time": "2014-04-26T10:31:07Z", "resolution": "FIXED", "cf_status_firefox132": "---", "id": 265181, "cf_status_firefox131": "---", "component": "Layout: Tables", "cf_tracking_firefox131": "---", "product": "Core"}, {"id": 269501, "cf_status_firefox131": "---", "component": "Layout", "last_change_time": "2011-06-09T21:58:40Z", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"component": "DOM: Events", "cf_status_firefox131": "---", "id": 364219, "cf_status_firefox132": "---", "last_change_time": "2007-01-24T00:11:30Z", "resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---"}, {"product": "Thunderbird", "component": "General", "id": 1861670, "last_change_time": "2024-01-28T17:22:40Z", "resolution": ""}, {"id": 211146, "component": "Internationalization", "product": "MailNews Core", "resolution": "WORKSFORME", "last_change_time": "2011-06-09T21:58:37Z"}]}, "CanonicalizeXPCOMParticipant": {"tc_rank": 129, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"product": "Thunderbird", "id": 815141, "last_change_time": "2018-11-09T03:38:34Z", "resolution": "WORKSFORME", "component": "General"}, {"id": 935911, "cf_status_firefox131": "---", "component": "XPCOM", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2014-07-31T11:42:32Z", "resolution": "WORKSFORME"}, {"id": 1151352, "cf_status_firefox131": "---", "component": "XPCOM", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2015-06-03T21:16:56Z", "resolution": "INVALID"}, {"id": 1820427, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "XPCOM", "last_change_time": "2023-05-04T21:19:28Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": "INCOMPLETE"}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-23T06:50:37Z", "resolution": "", "id": 1903892, "cf_status_firefox131": "---", "component": "Cycle Collector", "cf_status_firefox132": "---"}]}, "IPC::MessageReader::FatalError | IPC::MessageBufferReader::MessageBufferReader | IPC::ReadSequenceParamImpl | IPC::ReadSequenceParam | IPC::ParamTraits >::Read | IPC::ParamTraits::Read | IPC::Param...": {"tc_rank": 130, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": []}, "JSString::isRope": {"tc_rank": 131, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2015-05-30T06:25:07Z", "resolution": "FIXED", "id": 636487, "cf_status_firefox131": "---", "component": "JavaScript Engine", "cf_status_firefox132": "---"}, {"id": 643284, "cf_status_firefox131": "---", "component": "JavaScript Engine", "cf_status_firefox132": "---", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2011-08-05T07:54:17Z", "resolution": "FIXED"}, {"resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-04-11T16:42:12Z", "component": "JavaScript Engine", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1826607}, {"last_change_time": "2013-01-19T22:35:09Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 785576, "component": "JavaScript Engine", "product": "Core", "resolution": "FIXED"}]}, "LdrpCallInitRoutine": {"tc_rank": 132, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"resolution": "INVALID", "id": 1753868, "product": "Thunderbird", "component": "Message Compose Window", "last_change_time": "2022-02-22T14:54:56Z"}]}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | js::AutoEnterOOMUnsafeRegion::crash | v8::internal::Zone::New": {"tc_rank": 133, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": []}, "RtlpReportHeapFailure | RtlpFreeHeapInternal | RtlFreeHeap | dnslib.dll": {"tc_rank": 134, "crash_count": 5, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "js::jit::CalleeToToken": {"tc_rank": 135, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "memcpy | mozilla::image::BlendAnimationFilter::WriteBaseFrameRow": {"tc_rank": 136, "crash_count": 5, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"resolution": "INCOMPLETE", "last_change_time": "2024-02-10T08:34:16Z", "cf_tracking_firefox131": "---", "product": "Core", "cf_status_firefox132": "---", "component": "Graphics: ImageLib", "cf_status_firefox131": "---", "id": 1753060}, {"component": "Graphics: ImageLib", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1826257, "resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-07-12T14:19:57Z"}]}, "mozilla::TaskController::InitializeThreadPool": {"tc_rank": 137, "crash_count": 5, "estimated_user_count": 4, "startup_percent": 0.2, "bugs": [{"resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-09-10T15:50:25Z", "component": "XPCOM", "cf_status_firefox132": "affected", "cf_status_firefox131": "wontfix", "id": 1910208}]}, "mozilla::detail::InvalidArrayIndex_CRASH | nsTArray_Impl::ElementAt | nsTArray_Impl::operator[] | ClusterIterator::ClusterIterator": {"tc_rank": 138, "crash_count": 5, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-09-26T12:01:59Z", "component": "Layout", "cf_status_firefox132": "fixed", "id": 1885702, "cf_status_firefox131": "affected"}]}, "mozilla::gmp::GMPLoader::Load": {"tc_rank": 139, "crash_count": 5, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "affected", "last_change_time": "2024-09-19T03:33:53Z", "resolution": "", "component": "Audio/Video: GMP", "cf_status_firefox131": "affected", "id": 1830431, "product": "Core", "cf_tracking_firefox131": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "component": "Audio/Video: GMP", "cf_status_firefox131": "---", "id": 1830950, "cf_status_firefox132": "---", "last_change_time": "2023-06-15T01:09:44Z", "resolution": "FIXED"}, {"id": 1912449, "component": "Security: Process Sandboxing", "cf_status_firefox131": "verified", "last_change_time": "2024-08-27T09:56:46Z", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}]}, "mozilla::layers::PCompositorBridgeChild::SendNotifyChildRecreated": {"tc_rank": 140, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "mozilla::net::ZstdWrapper::ZstdWrapper": {"tc_rank": 141, "crash_count": 5, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "nsCycleCollectionParticipant::TraverseNativeAndJS": {"tc_rank": 142, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2023-01-30T23:54:45Z", "id": 1801132, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "component": "Cycle Collector", "resolution": "", "product": "Core"}]}, "nsTArray_Impl::~nsTArray_Impl | mozilla::CreateWRClipPathAndMasks": {"tc_rank": 143, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "nsWindow::GetDefaultScaleInternal": {"tc_rank": 144, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "shutdownhang | ZwCreateUserProcess": {"tc_rank": 145, "crash_count": 5, "estimated_user_count": 5, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2017-09-24T23:03:25Z", "resolution": "FIXED", "id": 1373958, "cf_status_firefox131": "---", "component": "XPCOM", "cf_status_firefox132": "---"}]}, "std::_Func_impl_no_alloc::_Func_impl_no_alloc | std::_Func_impl_no_alloc::_Copy | mozilla::DefaultDelete::operator()": {"tc_rank": 146, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "webrender::prim_store::text_run::impl$4::from": {"tc_rank": 147, "crash_count": 5, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "AsyncShutdownTimeout | AddonManager: Waiting to start provider shutdown. | EnvironmentAddonBuilder": {"tc_rank": 148, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"resolution": "FIXED", "cf_tracking_firefox131": "---", "product": "Toolkit", "last_change_time": "2019-12-12T21:41:34Z", "component": "Add-ons Manager", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1513855}, {"cf_status_firefox131": "---", "id": 1601678, "component": "Telemetry", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Toolkit", "last_change_time": "2020-11-17T13:49:35Z", "resolution": "FIXED"}]}, "AsyncShutdownTimeout | IOUtils: waiting for profileBeforeChange IO to complete | CrashMonitor: Writing notifications to file after receiving profile-before-change and awaiting all checkpoints written,SessionFile: Finish writing Session Restore data": {"tc_rank": 149, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "CrashChannel::OpenContentStream": {"tc_rank": 150, "crash_count": 4, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"component": "Networking", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1515987, "resolution": "INVALID", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2024-08-28T16:47:20Z"}, {"cf_status_firefox131": "---", "id": 1849669, "component": "Marionette", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Remote Protocol", "last_change_time": "2024-09-23T06:54:36Z", "resolution": ""}, {"product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2024-08-27T22:50:54Z", "resolution": "WONTFIX", "id": 1912061, "cf_status_firefox131": "---", "component": "Networking", "cf_status_firefox132": "---"}]}, "EdgePool::Iterator::operator*": {"tc_rank": 151, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"component": "Cycle Collector", "cf_status_firefox132": "---", "id": 500105, "cf_status_firefox131": "---", "resolution": "", "product": "Core", "cf_tracking_firefox131": "---", "last_change_time": "2023-12-13T15:58:37Z"}, {"id": 1869503, "cf_status_firefox131": "---", "cf_status_firefox132": "---", "component": "Cycle Collector", "last_change_time": "2024-07-31T10:01:53Z", "product": "Core", "cf_tracking_firefox131": "---", "resolution": ""}]}, "JSClass::hasTrace": {"tc_rank": 152, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"id": 1867165, "cf_status_firefox132": "---", "component": "JavaScript: GC", "cf_tracking_firefox131": "---", "last_change_time": "2023-12-05T17:56:10Z", "resolution": "", "cf_status_firefox131": "---", "product": "Core"}]}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | CopyUTF8toUTF16 | nsGenericHTMLElement::GetURIAttr": {"tc_rank": 153, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"component": "General", "product": "Thunderbird", "id": 1869147, "resolution": "", "last_change_time": "2024-01-02T03:22:17Z"}]}, "OOM | large | hashbrown::raw::Fallibility::alloc_err | hashbrown::raw::RawTable::reserve": {"tc_rank": 154, "crash_count": 4, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"product": "Core", "resolution": "", "last_change_time": "2024-09-10T06:45:57Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "id": 1913804, "cf_status_firefox131": "?", "component": "CSS Parsing and Computation"}]}, "OOM | large | nsTArray_Impl::AppendElementInternal | nsTArray::AppendElement | mozilla::AnimationEventDispatcher::QueueEvent": {"tc_rank": 155, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "OOM | large | nsTArray_Impl::EmplaceBackInternal | nsTArray::EmplaceBack | nsFlexContainerFrame::GenerateFlexItemForChild": {"tc_rank": 156, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "OOM | large | w2c_env_mozalloc_handle_oom": {"tc_rank": 157, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | js::AutoEnterOOMUnsafeRegion::crash_impl | mozilla::Variant::Variant | js::frontend::GenericAtom::GenericAtom": {"tc_rank": 158, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "RtlpReportHeapFailure | RtlpFreeHeap | RtlpFreeHeapInternal | RtlFreeHeap | dnslib.dll": {"tc_rank": 159, "crash_count": 4, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "XPCJSRuntime::UnprivilegedJunkScope": {"tc_rank": 160, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2021-06-11T11:07:48Z", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 1665862, "component": "DOM: Networking", "product": "Core", "resolution": "FIXED"}]}, "__CFStringHash": {"tc_rank": 161, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "component": "Widget: Cocoa", "id": 1801419, "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2024-07-13T16:53:07Z", "product": "Core", "cf_tracking_firefox131": "---"}]}, "__delayLoadHelper2 | ": {"tc_rank": 162, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "last_change_time": "2024-08-13T07:27:51Z", "resolution": "", "component": "Security: Process Sandboxing", "cf_status_firefox131": "---", "id": 1884469, "product": "Core", "cf_tracking_firefox131": "---"}]}, "bad hardware | AudioDeviceInfo::GetMinLatency": {"tc_rank": 163, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "core::ptr::swap_nonoverlapping_simple_untyped": {"tc_rank": 164, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": []}, "igd10iumd32.dll | NDXGI::CDevice::CreateDriverInstance": {"tc_rank": 165, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "je_free": {"tc_rank": 166, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"resolution": "INCOMPLETE", "cf_status_firefox131": "---", "product": "Core", "id": 677552, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics", "last_change_time": "2016-05-12T20:56:33Z"}, {"cf_status_firefox131": "---", "resolution": "INCOMPLETE", "product": "Firefox", "last_change_time": "2016-06-13T23:29:37Z", "cf_tracking_firefox131": "---", "component": "General", "cf_status_firefox132": "---", "id": 710880}, {"cf_status_firefox131": "---", "resolution": "INCOMPLETE", "product": "Core", "last_change_time": "2017-09-13T20:32:11Z", "id": 1374318, "cf_status_firefox132": "---", "component": "WebRTC", "cf_tracking_firefox131": "---"}, {"product": "Core", "cf_status_firefox131": "---", "resolution": "INCOMPLETE", "last_change_time": "2017-09-13T20:32:19Z", "id": 1374527, "cf_tracking_firefox131": "---", "component": "WebRTC", "cf_status_firefox132": "---"}, {"product": "Core", "cf_status_firefox131": "---", "resolution": "INCOMPLETE", "last_change_time": "2017-10-10T01:17:22Z", "cf_status_firefox132": "---", "component": "WebRTC", "cf_tracking_firefox131": "---", "id": 1382054}, {"product": "Core", "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2023-07-10T06:19:48Z", "component": "mozglue", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "id": 1744421}]}, "js::PrivateScriptData::gcthings": {"tc_rank": 167, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"last_change_time": "2024-09-24T16:22:48Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 719114, "component": "JavaScript: GC", "product": "Core", "resolution": ""}]}, "js::gc::FreeSpan::allocate": {"tc_rank": 168, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "component": "JavaScript: GC", "id": 1864087, "cf_status_firefox131": "---", "resolution": "", "last_change_time": "2023-11-30T13:49:56Z", "product": "Core", "cf_tracking_firefox131": "---"}]}, "js::gc::StoreBuffer::CellPtrEdge::trace": {"tc_rank": 169, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"component": "JavaScript: GC", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1865753, "resolution": "", "cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2023-12-13T16:07:57Z"}]}, "libgallium_dri.so": {"tc_rank": 170, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "memset | MaybePoison": {"tc_rank": 171, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"component": "mozglue", "resolution": "", "product": "Core", "cf_status_firefox132": "---", "last_change_time": "2024-08-05T06:49:45Z", "id": 1844401, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---"}]}, "mozilla::detail::InvalidArrayIndex_CRASH | nsTArray_Impl::ElementAt | nsWifiMonitor::CallWifiListeners": {"tc_rank": 172, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "affected", "component": "DOM: Geolocation", "id": 1917201, "cf_status_firefox131": "fix-optional", "resolution": "", "last_change_time": "2024-09-17T15:22:50Z", "product": "Core", "cf_tracking_firefox131": "---"}]}, "mozilla::dom::AbstractRange::UpdateCommonAncestorIfNecessary": {"tc_rank": 173, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"id": 1703040, "cf_status_firefox131": "---", "component": "DOM: Selection", "resolution": "", "last_change_time": "2024-08-20T02:25:19Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}]}, "mozilla::dom::ClientSource::SetController": {"tc_rank": 174, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"product": "Core", "cf_tracking_firefox131": "---", "component": "DOM: Service Workers", "cf_status_firefox131": "---", "id": 1462077, "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2019-01-19T23:16:36Z"}, {"cf_status_firefox132": "---", "last_change_time": "2019-02-12T22:45:43Z", "resolution": "FIXED", "component": "DOM: Service Workers", "cf_status_firefox131": "---", "id": 1469873, "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_tracking_firefox131": "---", "product": "Core", "last_change_time": "2020-06-02T06:36:20Z", "resolution": "FIXED", "cf_status_firefox132": "---", "id": 1535699, "component": "DOM: Service Workers", "cf_status_firefox131": "---"}, {"component": "Privacy: Anti-Tracking", "cf_status_firefox131": "---", "id": 1743236, "cf_status_firefox132": "---", "last_change_time": "2021-11-30T17:15:48Z", "resolution": "FIXED", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_status_firefox132": "---", "resolution": "", "last_change_time": "2024-07-29T20:20:17Z", "component": "DOM: Service Workers", "cf_status_firefox131": "---", "id": 1880012, "product": "Core", "cf_tracking_firefox131": "---"}]}, "mozilla::dom::Promise::CreateInfallible | mozilla::dom::streams_abstract::SetUpReadableByteStreamController": {"tc_rank": 175, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "mozilla::image::DecodePool::DecodePool": {"tc_rank": 176, "crash_count": 4, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core", "last_change_time": "2015-11-10T08:44:05Z", "id": 1219501, "cf_tracking_firefox131": "---", "component": "Graphics: ImageLib", "cf_status_firefox132": "---"}, {"cf_status_firefox131": "---", "resolution": "FIXED", "product": "Core", "last_change_time": "2018-02-20T15:28:03Z", "id": 1436247, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "Graphics: ImageLib"}, {"resolution": "", "cf_status_firefox131": "---", "product": "Core", "component": "Graphics: ImageLib", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "id": 1840159, "last_change_time": "2023-07-04T02:54:05Z"}]}, "nsObserverService::EnsureValidCall | nsObserverService::RemoveObserver | LocalesChangedObserver::Unregister": {"tc_rank": 177, "crash_count": 4, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"id": 1824697, "cf_status_firefox131": "---", "component": "Widget: Win32", "resolution": "", "last_change_time": "2023-03-27T13:56:51Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}]}, "osclientcerts_static::backend_macos::Key::sign_internal": {"tc_rank": 178, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "shutdownhang | __CFRunLoopServiceMachPort": {"tc_rank": 179, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": [{"id": 1610213, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "General", "last_change_time": "2024-07-10T12:21:45Z", "resolution": "", "cf_status_firefox131": "---", "product": "Core"}]}, "shutdownhang | memcpy | FontFileReference::ReadIntoBuffer": {"tc_rank": 180, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "shutdownhang | mozilla::SpinEventLoopUntil | mozilla::net::CacheFileIOManager::Shutdown": {"tc_rank": 181, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "shutdownhang | mozilla::SpinEventLoopUntil(nsTSubstring const&, (anonymous namespace)::ParentImpl::ShutdownBackgroundThread()::$_0&&, nsIThread*) | (anonymous namespace)::ParentImpl::ShutdownBackgroundThread": {"tc_rank": 182, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "stackoverflow | BuildTextRunsScanner::ScanFrame": {"tc_rank": 183, "crash_count": 4, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "stackoverflow | OnThreadExit": {"tc_rank": 184, "crash_count": 4, "estimated_user_count": 4, "startup_percent": 0.0, "bugs": []}, "@0x0": {"tc_rank": 185, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"component": "Plug-ins", "last_change_time": "2022-05-16T19:51:10Z", "product": "Core Graveyard", "id": 436817, "resolution": "FIXED"}, {"component": "QuickTime (Apple)", "last_change_time": "2016-04-28T16:13:05Z", "id": 520650, "resolution": "INCOMPLETE", "product": "Plugins Graveyard"}, {"product": "External Software Affecting Firefox Graveyard", "id": 533520, "resolution": "FIXED", "component": "Flash (Adobe)", "last_change_time": "2022-09-09T17:12:14Z"}, {"resolution": "WORKSFORME", "id": 677400, "product": "Firefox for Android Graveyard", "last_change_time": "2011-09-07T15:01:27Z", "component": "General"}, {"resolution": "FIXED", "product": "Core", "component": "Audio/Video", "id": 846465, "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "cf_status_firefox132": "---", "last_change_time": "2013-03-29T05:38:16Z"}, {"product": "Core Graveyard", "id": 848659, "resolution": "WORKSFORME", "component": "Plug-ins", "last_change_time": "2022-05-16T19:51:10Z"}, {"cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "id": 977668, "last_change_time": "2014-06-19T22:30:22Z", "cf_status_firefox132": "---", "product": "Core", "resolution": "FIXED", "component": "Disability Access APIs"}, {"component": "JavaScript Engine", "resolution": "FIXED", "product": "Core", "last_change_time": "2015-03-09T12:23:12Z", "cf_status_firefox132": "---", "id": 1137050, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---"}, {"product": "Firefox for Android Graveyard", "resolution": "WONTFIX", "id": 1283068, "component": "General", "last_change_time": "2020-12-21T18:38:46Z"}, {"resolution": "INCOMPLETE", "product": "Core", "component": "DOM: Content Processes", "id": 1408752, "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "last_change_time": "2022-09-20T13:30:37Z", "cf_status_firefox132": "---"}]}, "AsyncShutdownTimeout | IOUtils: waiting for profileBeforeChange IO to complete | CrashMonitor: Writing notifications to file after receiving profile-before-change and awaiting all checkpoints written,SessionFile: Finish writing Session Restore data,Ses...": {"tc_rank": 186, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"product": "Firefox", "resolution": "", "component": "Session Restore", "cf_tracking_firefox131": "---", "cf_status_firefox131": "---", "id": 1743674, "last_change_time": "2023-09-18T06:57:36Z", "cf_status_firefox132": "---"}]}, "AsyncShutdownTimeout | Places Clients shutdown | Interactions.sys.mjs:: store": {"tc_rank": 187, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "CF_IS_OBJC": {"tc_rank": 188, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 0.0, "bugs": [{"cf_status_firefox131": "---", "id": 1898774, "component": "DOM: Device Interfaces", "resolution": "", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2024-06-17T14:59:31Z", "product": "Core"}, {"resolution": "", "cf_tracking_firefox131": "---", "last_change_time": "2024-05-24T16:18:54Z", "cf_status_firefox132": "---", "cf_status_firefox131": "---", "id": 1898776, "component": "Widget: Cocoa", "product": "Core"}, {"component": "Widget: Cocoa", "cf_status_firefox131": "---", "id": 1902057, "last_change_time": "2024-07-01T02:13:17Z", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "product": "Core"}]}, "EnterBaseline": {"tc_rank": 189, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": [{"resolution": "FIXED", "last_change_time": "2013-06-26T00:43:29Z", "cf_status_firefox132": "---", "id": 858022, "component": "JavaScript Engine", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 858032, "cf_status_firefox132": "---", "last_change_time": "2024-09-22T12:18:48Z", "resolution": "", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 858083, "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2013-10-18T23:19:21Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_tracking_firefox131": "---", "product": "Core", "id": 863685, "component": "JavaScript Engine", "cf_status_firefox131": "---", "resolution": "WORKSFORME", "last_change_time": "2014-01-09T14:53:19Z", "cf_status_firefox132": "---"}, {"cf_status_firefox131": "---", "component": "JavaScript Engine: JIT", "id": 935322, "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2016-09-02T13:05:43Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 935491, "cf_status_firefox132": "---", "resolution": "WORKSFORME", "last_change_time": "2013-11-22T14:28:19Z", "product": "Core", "cf_tracking_firefox131": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2015-02-26T05:53:35Z", "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "id": 947661}, {"resolution": "FIXED", "last_change_time": "2016-09-02T13:05:36Z", "cf_status_firefox132": "---", "id": 947703, "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"id": 1053692, "cf_status_firefox131": "---", "component": "JavaScript Engine: JIT", "last_change_time": "2016-09-02T13:05:25Z", "resolution": "FIXED", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"last_change_time": "2016-09-02T13:05:14Z", "resolution": "WORKSFORME", "cf_status_firefox132": "---", "id": 1111629, "cf_status_firefox131": "---", "component": "Untriaged", "cf_tracking_firefox131": "---", "product": "Firefox"}, {"product": "Core", "cf_tracking_firefox131": "---", "component": "JavaScript Engine", "cf_status_firefox131": "---", "id": 1192673, "cf_status_firefox132": "---", "resolution": "INCOMPLETE", "last_change_time": "2015-11-16T18:53:41Z"}, {"cf_status_firefox132": "---", "last_change_time": "2016-03-26T02:12:15Z", "resolution": "FIXED", "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "id": 1247312, "product": "Core", "cf_tracking_firefox131": "---"}, {"component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "id": 1268025, "cf_status_firefox132": "---", "last_change_time": "2016-05-09T17:36:32Z", "resolution": "WORKSFORME", "product": "Core", "cf_tracking_firefox131": "---"}, {"product": "Firefox for Android Graveyard", "component": "General", "id": 1286522, "resolution": "WORKSFORME", "last_change_time": "2020-12-21T18:38:46Z"}, {"cf_status_firefox132": "---", "last_change_time": "2018-05-14T21:31:49Z", "resolution": "WORKSFORME", "cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 1293188, "product": "Core", "cf_tracking_firefox131": "---"}, {"product": "Core", "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "resolution": "INCOMPLETE", "last_change_time": "2018-05-14T21:37:54Z", "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "id": 1409978}, {"id": 1420487, "component": "JavaScript Engine: JIT", "cf_status_firefox131": "---", "resolution": "INVALID", "last_change_time": "2017-12-04T17:31:17Z", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "product": "Core"}, {"cf_status_firefox132": "---", "resolution": "FIXED", "last_change_time": "2023-06-27T12:47:38Z", "cf_status_firefox131": "---", "component": "JavaScript Engine", "id": 1839669, "product": "Core", "cf_tracking_firefox131": "---"}, {"cf_tracking_firefox131": "---", "product": "Core", "id": 1841777, "cf_status_firefox131": "---", "component": "JavaScript Engine", "last_change_time": "2023-07-05T19:39:42Z", "resolution": "INVALID", "cf_status_firefox132": "---"}, {"last_change_time": "2015-02-26T05:53:26Z", "id": 952321, "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "component": "JavaScript Engine", "product": "Core", "cf_status_firefox131": "---", "resolution": "FIXED"}]}, "JS::Value::isMagic": {"tc_rank": 190, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"id": 787667, "cf_tracking_firefox131": "---", "cf_status_firefox132": "---", "component": "JavaScript Engine", "last_change_time": "2013-01-11T05:58:53Z", "product": "Core", "resolution": "FIXED", "cf_status_firefox131": "---"}, {"resolution": "FIXED", "cf_status_firefox131": "---", "product": "Core", "id": 1572051, "cf_tracking_firefox131": "---", "component": "JavaScript Engine: JIT", "cf_status_firefox132": "---", "last_change_time": "2022-01-10T13:13:44Z"}]}, "JSContext::realm": {"tc_rank": 191, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "JSJitInfo::type": {"tc_rank": 192, "crash_count": 3, "estimated_user_count": 1, "startup_percent": 1.0, "bugs": []}, "OOM | large | GlyphBufferAzure::AddCapacity": {"tc_rank": 193, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | CopyASCIItoUTF16 | mozilla::dom::CharacterData::GetData": {"tc_rank": 194, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "OOM | large | NS_ABORT_OOM | nsTSubstring::AllocFailed | nsTSubstring::GetMutableData | IPC::ParamTraits >::Read::::operator() | IPC::ReadSequenceParam | IPC::ParamTraits >::Read | mozilla::ipc::ReadIPDLParam": {"tc_rank": 195, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "OOM | large | nsTArray_Impl::AppendElementInternal | nsTArray::AppendElement | mozilla::dom::PerformanceMainThread::AddImagesPendingRendering": {"tc_rank": 196, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": []}, "OOM | large | nsTArray_Impl::AppendElementInternal | nsTArray::AppendElement | mozilla::MediaTrackDemuxer::SamplesHolder::AppendSample": {"tc_rank": 197, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"cf_status_firefox132": "---", "resolution": "", "last_change_time": "2024-07-31T18:53:44Z", "component": "Audio/Video: Playback", "cf_status_firefox131": "---", "id": 1851054, "product": "Core", "cf_tracking_firefox131": "---"}]}, "OOM | large | sk_malloc_flags": {"tc_rank": 198, "crash_count": 3, "estimated_user_count": 2, "startup_percent": 0.0, "bugs": []}, "OOM | unknown | NS_ABORT_OOM | XPCJSContext::Initialize": {"tc_rank": 199, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.3333333333333333, "bugs": [{"resolution": "WONTFIX", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2020-02-28T19:00:14Z", "id": 1615310, "cf_status_firefox131": "---", "component": "JavaScript Engine", "product": "Core"}]}, "PtrInfo::WasTraversed": {"tc_rank": 200, "crash_count": 3, "estimated_user_count": 3, "startup_percent": 0.0, "bugs": [{"product": "Core", "id": 500105, "cf_status_firefox131": "---", "component": "Cycle Collector", "resolution": "", "cf_status_firefox132": "---", "cf_tracking_firefox131": "---", "last_change_time": "2023-12-13T15:58:37Z"}]}}} \ No newline at end of file diff --git a/buildid_changeset.html b/buildid_changeset.html deleted file mode 100644 index c103dc0e..00000000 --- a/buildid_changeset.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Build ID <-> Changeset - - - - - - - -

- - - - - diff --git a/buildid_changeset.js b/buildid_changeset.js deleted file mode 100644 index ff7b3ad2..00000000 --- a/buildid_changeset.js +++ /dev/null @@ -1,235 +0,0 @@ -function parseBuildID(buildID) { - return { - year: Number(buildID.substring(0, 4)), - month: Number(buildID.substring(4, 6)), - day: Number(buildID.substring(6, 8)), - hour: Number(buildID.substring(8, 10)), - minute: Number(buildID.substring(10, 12)), - second: Number(buildID.substring(12, 14)), - }; -} - -function compareBuildIDs(buildID1, buildID2) { - let buildObj1 = parseBuildID(buildID1); - let buildObj2 = parseBuildID(buildID2); - - if (buildObj1.year > buildObj2.year) { - return 1; - } else if (buildObj1.year < buildObj2.year) { - return -1; - } - - if (buildObj1.month > buildObj2.month) { - return 1; - } else if (buildObj1.month < buildObj2.month) { - return -1; - } - - if (buildObj1.day > buildObj2.day) { - return 1; - } else if (buildObj1.day < buildObj2.day) { - return -1; - } - - if (buildObj1.hour > buildObj2.hour) { - return 1; - } else if (buildObj1.hour < buildObj2.hour) { - return -1; - } - - if (buildObj1.minute > buildObj2.minute) { - return 1; - } else if (buildObj1.minute < buildObj2.minute) { - return -1; - } - - if (buildObj1.second > buildObj2.second) { - return 1; - } else if (buildObj1.second < buildObj2.second) { - return -1; - } - - return 0; -} - -function toTwoDigits(num) { - if (num < 10) { - return "0" + num; - } - - return num; -} - -function fromBuildIDtoChangeset(buildID, channel = "nightly") { - let buildObj = parseBuildID(buildID); - - let dirEnd; - if (channel === "nightly") { - dirEnd = "central"; - } - - let directory = - "https://ftp.mozilla.org/pub/firefox/nightly/" + - buildObj.year + - "/" + - toTwoDigits(buildObj.month) + - "/" + - buildObj.year + - "-" + - toTwoDigits(buildObj.month) + - "-" + - toTwoDigits(buildObj.day) + - "-" + - toTwoDigits(buildObj.hour) + - "-" + - toTwoDigits(buildObj.minute) + - "-" + - toTwoDigits(buildObj.second) + - "-mozilla-" + - dirEnd + - "/"; - - return fetch(directory) - .then((response) => response.text()) - .then((data) => { - let file = data.match(/firefox-\d+.0a[12].en-US.win32.txt/); - if (!file) { - file = data.match(/firefox-\d+.0a[12].en-US.linux-x86_64.txt/); - } - if (file && file.length == 1) { - return file[0]; - } else { - throw new Error( - "Couldn't find *.win32.txt or *.linux-x86_64.txt file." - ); - } - }) - .then((file) => fetch(directory + file)) - .then((response) => response.text()) - .then((data) => { - let lines = data.split("\n"); - lines = lines.map((line) => line.replace("\r", "")); - let buildIDfromFile = lines[0]; - if (buildID != buildIDfromFile) { - throw new Error("Unexpected error: wrong build ID in directory."); - } - return lines[1]; - }); -} - -function getRevFromChangeset(changeset, channel = "nightly") { - let re; - if (channel === "nightly") { - re = /https:\/\/hg.mozilla.org\/mozilla-central\/rev\/([A-Za-z0-9]+)/; - } - let result = re.exec(changeset); - return result[1]; -} - -function getChangesetDate(changeset, channel = "nightly") { - let baseURL; - if (channel === "nightly") { - baseURL = "https://hg.mozilla.org/mozilla-central"; - } - - return fetch(baseURL + "/json-rev/" + changeset) - .then((response) => response.json()) - .then((json_rev) => new Date(json_rev["pushdate"][0] * 1000)); -} - -function findFirstBuildIDInSet(buildIDs, date, i = 0) { - return fromBuildIDtoChangeset(buildIDs[i]) - .then((buildChangeset) => - getChangesetDate(getRevFromChangeset(buildChangeset)) - ) - .then((buildDate) => { - if (buildDate >= date) { - return buildIDs[i]; - } else { - return findFirstBuildIDInSet(buildIDs, date, i + 1); - } - }); -} - -function findFirstBuildID(date, year = null, month = null) { - // Who knows where Firefox is built, so give the build ID some slack. - let possibleDate = new Date(date.getTime()); - possibleDate.setUTCHours(possibleDate.getUTCHours() - 9); - let possibleBuildID = - "" + - possibleDate.getUTCFullYear() + - toTwoDigits(possibleDate.getUTCMonth() + 1) + - toTwoDigits(possibleDate.getUTCDate()) + - toTwoDigits(possibleDate.getUTCHours()) + - toTwoDigits(possibleDate.getUTCMinutes()) + - toTwoDigits(possibleDate.getUTCSeconds()); - - if (year == null) { - year = possibleDate.getUTCFullYear(); - month = possibleDate.getUTCMonth() + 1; - } - - return fetch( - "https://ftp.mozilla.org/pub/firefox/nightly/" + - year + - "/" + - toTwoDigits(month) + - "/" - ) - .then((response) => response.text()) - .then((data) => { - let re = />(\d+)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-mozilla-central\/ { - if (buildIDs.length === 0) { - return null; - } - - return findFirstBuildIDInSet(buildIDs, date); - }) - .then((rev) => { - if (!rev) { - let nextYear = month + 1 == 13 ? year + 1 : year; - let nextMonth = month + 1; - if (nextMonth == 13) { - nextMonth = 1; - } - - if ( - nextYear > new Date().getUTCFullYear() || - (nextYear == new Date().getUTCFullYear() && - nextMonth > new Date().getUTCMonth() + 1) - ) { - return null; - } - - return findFirstBuildID(date, nextYear, nextMonth); - } - - return rev; - }); -} - -function getBuildID(changeset) { - return getChangesetDate(changeset).then((date) => findFirstBuildID(date)); -} diff --git a/buildid_changeset_page.js b/buildid_changeset_page.js deleted file mode 100644 index f000b9cd..00000000 --- a/buildid_changeset_page.js +++ /dev/null @@ -1,26 +0,0 @@ -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -onLoad.then(function () { - document.getElementById("getChangeset").onclick = function () { - // e.g. 20161001030430 - fromBuildIDtoChangeset(document.getElementById("buildID").value).then( - (changeset) => - (document.getElementById("getChangesetResult").textContent = changeset) - ); - }; - - document.getElementById("getBuildID").onclick = function () { - // e.g. 87cd291d2db6 - // 1: Find date of the changeset - // 2: Find first build ID that is greater than the date of the changeset - // 3: Get the changeset for the build ID found in (2), if it's older than changeset, go to the next build. - getBuildID(document.getElementById("changeset").value).then( - (buildID) => - (document.getElementById("getBuildIDResult").textContent = buildID - ? buildID - : "Not shipped yet.") - ); - }; -}); diff --git a/channels_diff.html b/channels_diff.html deleted file mode 100644 index 73c85c91..00000000 --- a/channels_diff.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Analyze distribution - - - - - - - - - - - - - - - - - -
Percentage in nightlyPercentage in betaPercentage in release
- - - diff --git a/channels_diff.js b/channels_diff.js deleted file mode 100644 index fb36f2bb..00000000 --- a/channels_diff.js +++ /dev/null @@ -1,224 +0,0 @@ -let options = { - property: { - value: null, - type: "option", - }, - value: { - value: null, - type: "option", - }, -}; - -function getOption(name) { - return options[name].value; -} - -function getOptionType(name) { - return options[name].type; -} - -function setOption(name, value) { - return (options[name].value = value); -} - -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function setURL() { - let url = new URL(location.href); - - let property = getOption("property"); - let value = getOption("value"); - if (!property) { - url.search = ""; - } else if (!value) { - url.search = "?property=" + property; - } else { - url.search = "?property=" + property + "&value=" + value; - } - - history.replaceState({}, document.title, url.href); -} - -function populateTable() { - let property = getOption("property"); - let value = getOption("value"); - if (!property || !value) { - return; - } - - let channels = ["nightly", "beta", "release"]; - - let results = {}; - - Promise.all( - channels.map((channel, index) => - correlations - .getChannelsPercentage("Firefox", channel, property, value) - .then((result) => (results[channel] = result)) - ) - ).then(() => { - let table = document.getElementById("table"); - while (table.rows.length > 1) { - table.deleteRow(table.rows.length - 1); - } - - let row = table.insertRow(table.rows.length); - - channels.forEach((channel, index) => { - let cell = row.insertCell(index); - cell.appendChild( - document.createTextNode( - correlations.toPercentage( - (results[channel] && results[channel].p) || 0 - ) + " %" - ) - ); - }); - - let svgElem = document.getElementById("image"); - - d3.select(svgElem).selectAll("*").remove(); - - let margin = { top: 20, right: 300, bottom: 70, left: 300 }; - let width = svgElem.getAttribute("width") - margin.left - margin.right; - let height = svgElem.getAttribute("height") - margin.top - margin.bottom; - - let x = d3.scale.ordinal().rangeRoundBands([0, width], 0.05); - let y = d3.scale.linear().range([height, 0]); - - let color = d3.scale.ordinal().range(["black", "blue", "red", "orange"]); - - let xAxis = d3.svg.axis().scale(x).orient("bottom"); - - let yAxis = d3.svg.axis().scale(y).orient("left").ticks(10); - - var svg = d3 - .select(svgElem) - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom) - .append("g") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - - let data = channels.map((channel) => { - return { - channel: channel, - value: ((results[channel] && results[channel].p) || 0) * 100, - }; - }); - - x.domain(channels); - y.domain([ - 0, - d3.max(data, function (d) { - return d.value; - }), - ]); - - svg - .append("g") - .attr("class", "x axis") - .attr("transform", "translate(27," + height + ")") - .call(xAxis) - .selectAll("text") - .style("text-anchor", "end") - .attr("dx", "-.8em") - .attr("dy", "-.55em") - .attr("transform", "rotate(-90)"); - - svg - .append("g") - .attr("class", "y axis") - .call(yAxis) - .append("text") - .attr("transform", "rotate(-90)") - .attr("y", 3) - .attr("dy", ".71em") - .style("text-anchor", "end") - .text("Percentage of users (%)"); - - svg - .selectAll("bar") - .data(data) - .enter() - .append("rect") - .style("fill", (d) => color(d.channel)) - .attr("x", function (d) { - return 27 + x(d.channel); - }) - .attr("width", x.rangeBand()) - .attr("y", function (d) { - return y(d.value); - }) - .attr("height", function (d) { - return height - y(d.value); - }); - }); -} - -function populateValueSelect() { - let property = getOption("property"); - if (!property) { - return; - } - - correlations.getChannelsValues("Firefox", property).then((values) => { - if ($("#value")[0].selectize) { - $("#value")[0].selectize.destroy(); - } - - let $select = $("#value").selectize({ - valueField: "name", - labelField: "name", - searchField: "name", - options: values.map((value) => { - return { name: value }; - }), - onChange: (value) => { - setOption("value", value); - setURL(); - populateTable(); - }, - }); - - $select[0].selectize.setValue(getOption("value")); - }); -} - -onLoad - .then(() => correlations.getChannelsProperties("Firefox")) - .then((props) => { - let queryVars = new URL(location.href).search.substring(1).split("&"); - - Object.keys(options).forEach(function (optionName) { - for (let queryVar of queryVars) { - if (queryVar.startsWith(optionName + "=")) { - let option = queryVar.substring((optionName + "=").length).trim(); - setOption(optionName, decodeURIComponent(option)); - } - } - }); - - let $select = $("#property").selectize({ - valueField: "name", - labelField: "name", - searchField: "name", - options: props.map((prop) => { - return { name: prop }; - }), - onChange: (prop) => { - if (prop != getOption("property")) { - setOption("value", ""); - } - setOption("property", prop); - setURL(); - populateValueSelect(); - }, - }); - - $select[0].selectize.setValue(getOption("property")); - }) - .catch(function (err) { - console.error(err); - }); diff --git a/common_landings.html b/common_landings.html deleted file mode 100644 index 01563c5f..00000000 --- a/common_landings.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - Find common landings between channels - - - - -

Pushlog/regression range generator

-

-

Nightly

- - -
- -

-

Beta

- - -
- -



- -

-
- - diff --git a/common_landings.js b/common_landings.js deleted file mode 100644 index 258cedd6..00000000 --- a/common_landings.js +++ /dev/null @@ -1,216 +0,0 @@ -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function dropdownDateToDaysDiff(val) { - if (val === "one day") { - return 1; - } else if (val === "two days") { - return 2; - } else if (val === "three days") { - return 3; - } else if (val === "a week") { - return 7; - } - - throw new Exception("Unknown value " + val); -} - -function dropdownBuildToVal(val) { - if (val === "one build") { - return 1; - } else if (val === "two builds") { - return 2; - } else if (val === "three builds") { - return 3; - } - - throw new Exception("Unknown value " + val); -} - -function betaBuildToTag(val) { - return "FIREFOX_" + val.replace(".", "_") + "_RELEASE"; -} - -function subtractFromBetaBuild(version, val) { - let major = version.substring(0, version.indexOf("b")); - let betaBuild = version.substring(version.indexOf("b") + 1); - return major + "b" + (Number(betaBuild) - val); -} - -function checkIsBuildID(val) { - let isBuildID = true; - - try { - let res = parseBuildID(val); - if ( - isNaN(res.year) || - isNaN(res.month) || - isNaN(res.day) || - isNaN(res.hour) || - isNaN(res.minute) || - isNaN(res.second) || - res.year < 2000 || - res.month < 0 || - res.month > 12 || - res.day < 0 || - res.day > 31 || - res.hour < 0 || - res.hour > 24 - ) { - isBuildID = false; - } - } catch (ex) { - isBuildID = false; - } - - return isBuildID; -} - -function getPushlogLink(channel) { - let base; - if (channel === "nightly") { - base = "https://hg.mozilla.org/mozilla-central"; - } - - let firstAffected = document.getElementById(channel + "_first_affected") - .value; - if (firstAffected) { - let isBuildID = checkIsBuildID(firstAffected); - - let startDateElem = document.getElementById(channel + "_days"); - let startDate = dropdownDateToDaysDiff( - startDateElem.options[startDateElem.selectedIndex].value - ); - let pushlogLinkElem = document.getElementById(channel + "_pushloglink"); - - return new Promise(function (resolve, reject) { - if (!isBuildID) { - resolve(firstAffected); - } else { - fromBuildIDtoChangeset(firstAffected, channel).then((changesetURL) => - resolve(getRevFromChangeset(changesetURL, channel)) - ); - } - }).then((changeset) => - getChangesetDate(changeset, channel).then((date) => { - date.setDate(date.getDate() - startDate); - let year = date.getFullYear(); - let month = toTwoDigits(date.getMonth() + 1); - let day = toTwoDigits(date.getDate()); - let pushlogLink = - base + - "/pushloghtml?startdate=" + - year + - "-" + - month + - "-" + - day + - "&tochange=" + - changeset; - pushlogLinkElem.textContent = pushlogLinkElem.href = pushlogLink; - return pushlogLink; - }) - ); - } - - return null; -} - -function getCommonLandings() { - let pushlog_link_promises = []; - - // Nightly - let nightlyPushlogLink = getPushlogLink("nightly"); - if (nightlyPushlogLink) { - pushlog_link_promises.push(nightlyPushlogLink); - } - - // Beta - let betaFirstAffected = document.getElementById("beta_first_affected").value; - if (betaFirstAffected) { - let betaStartBuildElem = document.getElementById("beta_builds"); - let betaStartBuild = subtractFromBetaBuild( - betaFirstAffected, - dropdownBuildToVal( - betaStartBuildElem.options[betaStartBuildElem.selectedIndex].value - ) - ); - let betaPushlogLink = - "https://hg.mozilla.org/releases/mozilla-beta/pushloghtml?fromchange=" + - betaBuildToTag(betaStartBuild) + - "&tochange=" + - betaBuildToTag(betaFirstAffected); - - let betaPushlogLinkElem = document.getElementById("beta_pushloglink"); - betaPushlogLinkElem.textContent = betaPushlogLinkElem.href = betaPushlogLink; - pushlog_link_promises.push(Promise.resolve(betaPushlogLink)); - } - - return Promise.all( - pushlog_link_promises.map((link_promise) => - link_promise.then((link) => - fetch(link) - .then((response) => response.text()) - .then((html) => { - let bugs = []; - - let result; - let re = /Bug ([0-9]+)/gi; - while ((result = re.exec(html)) !== null) { - bugs.push(result[1]); - } - - return bugs; - }) - ) - ) - ) - .then((arrays) => { - if (arrays.length === 0) { - return []; - } - - return arrays[0].filter((elem) => { - let is_everywhere = true; - - for (let array of arrays.slice(1)) { - is_everywhere &= array.includes(elem); - } - - return is_everywhere; - }); - }) - .then((bugs) => new Set(bugs)); -} - -onLoad.then(function () { - document.getElementById("getCommonLandings").onclick = function () { - // Clean old results. - let results = document.getElementById("results"); - - while (results.firstChild) { - results.removeChild(results.firstChild); - } - - results.textContent = ""; - - getCommonLandings().then((bugs) => { - if (bugs.size === 0) { - results.textContent = "None"; - return; - } - - let a = document.createElement("a"); - a.textContent = "List of common landings on Bugzilla"; - a.href = "https://bugzilla.mozilla.org/buglist.cgi?bug_id="; - a.id = "buglist"; - results.appendChild(a); - - for (let bug of bugs) { - let a = document.getElementById("buglist"); - a.href += bug + ","; - } - }); - }; -}); diff --git a/compare-betas.html b/compare-betas.html deleted file mode 100644 index 51033aed..00000000 --- a/compare-betas.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Compare Betas - - - - - - - Signatures: - - -
- - - diff --git a/compare-betas.js b/compare-betas.js deleted file mode 100644 index 0702bebc..00000000 --- a/compare-betas.js +++ /dev/null @@ -1,384 +0,0 @@ -let options = { - beta1: { - value: null, - type: "option", - }, - beta2: { - value: null, - type: "option", - }, - product: { - value: null, - type: "option", - }, -}; - -function getOption(name) { - return options[name].value; -} - -function getOptionType(name) { - return options[name].type; -} - -function setOption(name, value) { - return (options[name].value = value); -} - -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function dateToStr(date) { - let month = "" + (date.getMonth() + 1); - let day = "" + date.getDate(); - let year = date.getFullYear(); - - if (month.length < 2) { - month = "0" + month; - } - - if (day.length < 2) { - day = "0" + day; - } - - return year + "-" + month + "-" + day; -} - -function addDays(date, days) { - let result = new Date(date); - result.setDate(result.getDate() + days); - return result; -} - -function getBaseVersion(version) { - return version.substring(0, version.indexOf(".0b")); -} - -function getReleaseDate(version, build_id, release_history) { - if (build_id) { - // XXX: Assume release date is the build ID. Remove this - // hack when https://bugzilla.mozilla.org/show_bug.cgi?id=1192197 is fixed. - return new Date( - build_id.substring(0, 4) + - "-" + - build_id.substring(4, 6) + - "-" + - build_id.substring(6, 8) - ); - } - - if (!(version in release_history)) { - return new Date(); - } - - return new Date(release_history[version]); -} - -function getComparison() { - if (!getOption("beta1") || !getOption("beta2")) { - return; - } - - let version1 = getOption("beta1"); - let version2 = getOption("beta2"); - let build_id1 = ""; - let build_id2 = ""; - if (version1.includes(" - ")) { - let vals = version1.split(" - "); - version1 = vals[0]; - build_id1 = vals[1]; - } - if (version2.includes(" - ")) { - let vals = version2.split(" - "); - version2 = vals[0]; - build_id2 = vals[1]; - } - - fetch( - "https://product-details.mozilla.org/1.0/firefox_history_development_releases.json" - ) - .then((response) => response.json()) - .then((release_history) => { - let date1 = dateToStr( - getReleaseDate(version1, build_id1, release_history) - ); - let date2 = dateToStr( - getReleaseDate(version2, build_id2, release_history) - ); - - let url = new URL(location.href); - url.search = - "?product=" + - getOption("product") + - "&beta1=" + - getOption("beta1") + - "&beta2=" + - getOption("beta2"); - history.replaceState({}, document.title, url.href); - - let signatureNumberElem = document.getElementById("signatureNumber"); - let signatureNumber = Number(signatureNumberElem.value); - if (!signatureNumber || isNaN(signatureNumber)) { - signatureNumber = 20; - } - - document.getElementById("frame").src = - "scomp.html?limit=" + - signatureNumber + - "&common=product%3D" + - getOption("product") + - "&p1=version%3D" + - version1 + - (build_id1 ? "%26build_id=" + build_id1 : "") + - "%26date%3D%3E" + - date1 + - "&p2=version%3D" + - version2 + - (build_id2 ? "%26build_id=" + build_id2 : "") + - "%26date%3D%3E" + - date2; - - let total1, total2; - Promise.all([ - fetch( - "https://crash-stats.mozilla.org/api/SuperSearch/?product=" + - getOption("product") + - "&version=" + - version1 + - (build_id1 ? "&build_id=" + build_id1 : "") + - "&_results_number=0&_facets_size=0" + - "&date=>%3D" + - date1 - ) - .then((response) => response.json()) - .then((results) => (total1 = results["total"] || 0)), - fetch( - "https://crash-stats.mozilla.org/api/SuperSearch/?product=" + - getOption("product") + - "&version=" + - version2 + - (build_id2 ? "&build_id=" + build_id2 : "") + - "&_results_number=0&_facets_size=0" + - "&date=>%3D" + - date2 - ) - .then((response) => response.json()) - .then((results) => (total2 = results["total"] || 0)), - ]).then(() => { - let warning = ""; - if (total1 < total2 * 0.2) { - warning = - "WARNING: Number of crash reports for " + - getOption("beta1") + - " (" + - total1 + - ") are way lower than for " + - getOption("beta2") + - " (" + - total2 + - "); the comparison might be skewed."; - } else if (total2 < total1 * 0.2) { - warning = - "WARNING: Number of crash reports for " + - getOption("beta2") + - " (" + - total2 + - ") are way lower than for " + - getOption("beta1") + - " (" + - total1 + - "); the comparison might be skewed."; - } - document.getElementById("warning").textContent = warning; - }); - }); -} - -function compareBuildIDs(build_id1, build_id2) { - let year1 = Number(build_id1.substring(0, 4)); - let year2 = Number(build_id2.substring(0, 4)); - if (year1 > year2) { - return 1; - } else if (year1 < year2) { - return -1; - } - - let month1 = Number(build_id1.substring(4, 6)); - let month2 = Number(build_id2.substring(4, 6)); - if (month1 > month2) { - return 1; - } else if (month1 < month2) { - return -1; - } - - let day1 = Number(build_id1.substring(6, 8)); - let day2 = Number(build_id2.substring(6, 8)); - if (day1 > day2) { - return 1; - } else if (day1 < day2) { - return -1; - } - - return 0; -} - -function compareVersions(versionA, versionB) { - let majorA = Number(versionA.substring(0, versionA.indexOf("."))); - let majorB = Number(versionB.substring(0, versionB.indexOf("."))); - - if (majorA > majorB) { - return 1; - } else if (majorA < majorB) { - return -1; - } - - let minorA; - let minorB; - if (!versionA.includes(" - ")) { - minorA = Number(versionA.substring(versionA.indexOf("b") + 1)); - } else { - minorA = Number( - versionA.substring(versionA.indexOf("b") + 1, versionA.indexOf(" ")) - ); - } - if (!versionB.includes(" - ")) { - minorB = Number(versionB.substring(versionB.indexOf("b") + 1)); - } else { - minorB = Number( - versionB.substring(versionB.indexOf("b") + 1, versionB.indexOf(" ")) - ); - } - - if (minorA > minorB) { - return 1; - } else if (minorA < minorB) { - return -1; - } - - let buildIDA = versionA.substring(versionA.indexOf(" - ") + 3); - let buildIDB = versionB.substring(versionB.indexOf(" - ") + 3); - - return compareBuildIDs(buildIDA, buildIDB); -} - -onLoad - .then(() => - fetch( - "https://product-details.mozilla.org/1.0/firefox_history_development_releases.json" - ) - ) - .then((response) => response.json()) - .then((data) => { - let versions = Object.keys(data); - - let rc = versions.find((version) => version.endsWith("b99")); - if (rc) { - return fetch( - "https://crash-stats.mozilla.org/api/SuperSearch/?version=" + - rc + - "&product=Firefox&_facets=build_id&_results_number=0" - ) - .then((response) => response.json()) - .then((data) => { - return data["facets"]["build_id"] - .map((elem) => rc + " - " + elem["term"]) - .concat(versions.filter((version) => !version.endsWith("b99"))); - }); - } else { - return versions; - } - }) - .then((versions) => { - return versions.sort(compareVersions); - }) - .then((versions) => { - // Only consider the latest 10 builds. - if (versions.length > 10) { - versions = versions.slice(versions.length - 10); - } - - return versions; - }) - .then((versions) => { - let betas1 = document.getElementById("beta1"); - let betas2 = document.getElementById("beta2"); - - for (let i = 0; i < versions.length; i++) { - let version = versions[i]; - - var opt = document.createElement("option"); - opt.value = opt.textContent = version; - - if (i != versions.length - 1) { - betas1.appendChild(opt); - } - - if (i != 0) { - betas2.appendChild(opt.cloneNode(true)); - } - } - - betas1.selectedIndex = betas1.options.length - 1; - betas2.selectedIndex = betas2.options.length - 1; - }) - .then(function () { - let queryVars = new URL(location.href).search.substring(1).split("&"); - - Object.keys(options).forEach(function (optionName) { - let optionType = getOptionType(optionName); - let elem = document.getElementById(optionName); - - for (let queryVar of queryVars) { - if (queryVar.startsWith(optionName + "=")) { - let option = queryVar.substring((optionName + "=").length).trim(); - setOption(optionName, option); - } - } - - if (optionType === "select") { - if (getOption(optionName)) { - elem.checked = getOption(optionName); - } - - setOption(optionName, elem.checked); - } else if (optionType === "option") { - if (getOption(optionName)) { - for (let i = 0; i < elem.options.length; i++) { - if ( - elem.options[i].value === - decodeURIComponent(getOption(optionName)) - ) { - elem.selectedIndex = i; - break; - } - } - } - - setOption(optionName, elem.options[elem.selectedIndex].value); - - elem.onchange = function () { - setOption(optionName, elem.options[elem.selectedIndex].value); - }; - } else if (optionType === "button") { - if (getOption(optionName)) { - elem.value = getOption(optionName); - } - - setOption(optionName, elem.value.trim()); - } else { - throw new Error("Unexpected option type."); - } - - document.getElementById("compareButton").onclick = function () { - getComparison(); - }; - }); - - if (queryVars.length >= 2) { - getComparison(); - } - }) - .catch(function (err) { - console.error(err); - }); diff --git a/correlations.html b/correlations.html deleted file mode 100644 index a332d38a..00000000 --- a/correlations.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Signature Correlations - - - - - - - - - - - -

- Correlation results are now directly on crash-stats. -

-

-    
-  
-
diff --git a/correlations.js b/correlations.js
deleted file mode 100644
index 0e778c72..00000000
--- a/correlations.js
+++ /dev/null
@@ -1,705 +0,0 @@
-var correlations = (() => {
-  let correlationData = {};
-
-  function sha1(str) {
-    return crypto.subtle
-      .digest("SHA-1", new TextEncoder("utf-8").encode(str))
-      .then((hash) => hex(hash));
-  }
-
-  function hex(buffer) {
-    let hexCodes = [];
-    let view = new DataView(buffer);
-
-    for (let i = 0; i < view.byteLength; i += 4) {
-      // Using getUint32 reduces the number of iterations needed (we process 4 bytes each time).
-      let value = view.getUint32(i);
-      // toString(16) will give the hex representation of the number without padding.
-      let stringValue = value.toString(16);
-      // We use concatenation and slice for padding.
-      let padding = "00000000";
-      let paddedValue = (padding + stringValue).slice(-padding.length);
-      hexCodes.push(paddedValue);
-    }
-
-    // Join all the hex strings into one
-    return hexCodes.join("");
-  }
-
-  function getDataURL(product) {
-    if (product === "Firefox") {
-      return "https://analysis-output.telemetry.mozilla.org/top-signatures-correlations/data/";
-    } else if (product === "FennecAndroid") {
-      return "https://analysis-output.telemetry.mozilla.org/top-fennec-signatures-correlations/data/";
-    } else {
-      throw new Error("Unknown product: " + product);
-    }
-  }
-
-  function loadChannelsData(product) {
-    if (correlationData[product]) {
-      return Promise.resolve();
-    }
-
-    return fetch(getDataURL(product) + "all.json.gz")
-      .then((response) => response.json())
-      .then((totals) => {
-        correlationData[product] = {
-          date: totals["date"],
-        };
-
-        let channels = ["release", "beta", "nightly"];
-        if (product === "Firefox") {
-          channels.push("esr");
-        }
-
-        for (let ch of channels) {
-          correlationData[product][ch] = {
-            total: totals[ch],
-            signatures: {},
-          };
-        }
-      });
-  }
-
-  function loadCorrelationData(signature, channel, product) {
-    return loadChannelsData(product)
-      .then(() => {
-        if (signature in correlationData[product][channel]["signatures"]) {
-          return;
-        }
-
-        return sha1(signature)
-          .then((sha1signature) =>
-            fetch(
-              getDataURL(product) + channel + "/" + sha1signature + ".json.gz"
-            )
-          )
-          .then((response) => response.json())
-          .then((data) => {
-            correlationData[product][channel]["signatures"][signature] = data;
-          });
-      })
-      .catch(() => {})
-      .then(() => correlationData);
-  }
-
-  function getAnalysisDate(product) {
-    return loadChannelsData(product)
-      .then(() => correlationData[product]["date"])
-      .catch(() => "");
-  }
-
-  function itemToLabel(item) {
-    return Object.getOwnPropertyNames(item)
-      .map((key) => key + " = " + item[key])
-      .join(" ∧ ");
-  }
-
-  function toPercentage(num) {
-    let result = (num * 100).toFixed(2);
-
-    if (result == "100.00") {
-      return "100.0";
-    }
-
-    if (result.substring(0, result.indexOf(".")).length == 1) {
-      return "0" + result;
-    }
-
-    return result;
-  }
-
-  function confidenceInterval(count1, total1, count2, total2) {
-    let prop1 = count1 / total1;
-    let prop2 = count2 / total2;
-    let diff = prop1 - prop2;
-
-    // Wald 95% confidence interval for the difference between the proportions.
-    let standard_error = Math.sqrt(
-      (prop1 * (1 - prop1)) / total1 + (prop2 * (1 - prop2)) / total2
-    );
-    let ci = [diff - 1.96 * standard_error, diff + 1.96 * standard_error];
-
-    // Yates continuity correction for the confidence interval.
-    let correction = 0.5 * (1.0 / total1 + 1.0 / total2);
-
-    return [ci[0] - correction, ci[1] + correction];
-  }
-
-  function sortCorrelationData(correlationData, total_reference, total_group) {
-    return correlationData.sort((a, b) => {
-      let rule_a_len = Object.keys(a.item).length;
-      let rule_b_len = Object.keys(b.item).length;
-
-      if (rule_a_len < rule_b_len) {
-        return -1;
-      }
-
-      if (rule_a_len > rule_b_len) {
-        return 1;
-      }
-
-      // Then, sort by percentage difference between signature and
-      // overall (using the lower endpoint of the confidence interval
-      // of the difference).
-      let ciA = null;
-      if (a.prior) {
-        // If one of the two elements has a prior that alters a rule's
-        // distribution significantly, sort by the percentage of the rule
-        // given the prior.
-        ciA = confidenceInterval(
-          a.prior.count_group,
-          a.prior.total_group,
-          a.prior.count_reference,
-          a.prior.total_reference
-        );
-      } else {
-        ciA = confidenceInterval(
-          a.count_group,
-          total_group,
-          a.count_reference,
-          total_reference
-        );
-      }
-
-      let ciB = null;
-      if (b.prior) {
-        ciB = confidenceInterval(
-          b.prior.count_group,
-          b.prior.total_group,
-          b.prior.count_reference,
-          b.prior.total_reference
-        );
-      } else {
-        ciB = confidenceInterval(
-          b.count_group,
-          total_group,
-          b.count_reference,
-          total_reference
-        );
-      }
-
-      return (
-        Math.min(Math.abs(ciB[0]), Math.abs(ciB[1])) -
-        Math.min(Math.abs(ciA[0]), Math.abs(ciA[1]))
-      );
-    });
-  }
-
-  function itemEqual(item1, item2) {
-    let keys1 = Object.keys(item1);
-    let keys2 = Object.keys(item2);
-
-    if (keys1.length !== keys2.length) {
-      return false;
-    }
-
-    for (let prop of keys1.concat(keys2)) {
-      let val1 = item1[prop];
-      let val2 = item2[prop];
-
-      if (typeof val1 === "string") {
-        val1 = val1.toLowerCase();
-      }
-
-      if (typeof val2 === "string") {
-        val2 = val2.toLowerCase();
-      }
-
-      if (item1[prop] !== item2[prop]) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  let channelsData = {};
-
-  function loadChannelsDifferencesData(product) {
-    return fetch(
-      "https://analysis-output.telemetry.mozilla.org/channels-differences/data/differences.json.gz"
-    )
-      .then((response) => response.json())
-      .then((data) => (channelsData = data));
-  }
-
-  function socorroToTelemetry(socorroKey, socorroValue) {
-    let valueMapping = {
-      cpu_arch: {
-        values: {
-          amd64: "x86-64",
-        },
-      },
-      os_arch: {
-        values: {
-          amd64: "x86-64",
-        },
-      },
-      platform: {
-        key: "os_name",
-        values: {
-          "Mac OS X": "Darwin",
-          "Windows NT": "Windows_NT",
-        },
-      },
-      platform_version: {
-        key: "os_version",
-      },
-      platform_pretty_version: {
-        key: "os_pretty_version",
-        values: {
-          "Windows 10": "10.0",
-          "Windows 8.1": "6.3",
-          "Windows 8": "6.2",
-          "Windows 7": "6.1",
-          "Windows Server 2003": "5.2",
-          "Windows XP": "5.1",
-          "Windows 2000": "5.0",
-          "Windows NT": "4.0",
-        },
-      },
-      e10s_enabled: {
-        key: "e10s_enabled",
-        values: {
-          1: true,
-        },
-      },
-      dom_ipc_enabled: {
-        key: "e10s_enabled",
-        values: {
-          1: true,
-        },
-      },
-      '"D2D1.1+" in app_notes': {
-        key: "d2d_enabled",
-      },
-      '"D2D1.1-" in app_notes': {
-        key: "d2d_enabled",
-        values: (v) => !v,
-      },
-      '"DWrite+" in app_notes': {
-        key: "d_write_enabled",
-      },
-      '"DWrite-" in app_notes': {
-        key: "d_write_enabled",
-        values: (v) => !v,
-      },
-      adapter_vendor_id: {
-        values: {
-          "NVIDIA Corporation": "0x10de",
-          "Intel Corporation": "0x8086",
-        },
-      },
-      "CPU Info": {
-        key: "cpu_info",
-      },
-    };
-
-    let key, value;
-    if (socorroKey in valueMapping) {
-      let mapping = valueMapping[socorroKey];
-      key = mapping["key"] || socorroKey;
-      if (mapping["values"]) {
-        if (typeof mapping["values"] === "function") {
-          value = mapping["values"](socorroValue);
-        } else {
-          value = mapping["values"][socorroValue];
-        }
-      }
-    }
-
-    if (typeof key === "undefined") {
-      key = socorroKey;
-    }
-
-    if (typeof value === "undefined") {
-      value = socorroValue;
-    }
-
-    return [key, value];
-  }
-
-  function getChannelPercentage(channel, socorroItem) {
-    // console.log('socorro')
-    // console.log(socorroItem)
-
-    let translatedItem = {};
-    for (let prop of Object.keys(socorroItem)) {
-      let [telemetryProp, telemetryValue] = socorroToTelemetry(
-        prop,
-        socorroItem[prop]
-      );
-      //console.log(telemetryProp + ' - ' + telemetryValue)
-      translatedItem[telemetryProp] = telemetryValue;
-    }
-
-    // console.log('translated')
-    // console.log(translatedItem)
-
-    let found = channelsData[channel].find((longitudinalElem) =>
-      itemEqual(longitudinalElem.item, translatedItem)
-    );
-    if (!found) {
-      return 0;
-    }
-
-    // console.log('telemetry ' + channel)
-    // console.log(found)
-
-    /*console.log('cpu_info');
-    console.log(channelsData[channel].filter(longitudinalElem => Object.keys(longitudinalElem.item).indexOf('cpu_info') != -1));*/
-
-    return found.p;
-  }
-
-  function rerank(textElem, signature, channel, channel_target, product) {
-    textElem.textContent = "";
-
-    return loadChannelsDifferencesData(product)
-      .then(() => loadCorrelationData(signature, channel, product))
-      .then((data) => {
-        if (!(product in data)) {
-          textElem.textContent =
-            "No correlation data was generated for the '" +
-            product +
-            "' product.";
-          return [];
-        }
-
-        if (
-          !(signature in data[product][channel]["signatures"]) ||
-          !data[product][channel]["signatures"][signature]["results"]
-        ) {
-          textElem.textContent =
-            'No correlation data was generated for the signature "' +
-            signature +
-            '" on the ' +
-            channel +
-            " channel, for the '" +
-            product +
-            "' product.";
-          return [];
-        }
-
-        let correlationData =
-          data[product][channel]["signatures"][signature]["results"];
-
-        let total_reference = data[product][channel].total;
-        let total_group = data[product][channel]["signatures"][signature].total;
-
-        return correlationData
-          .filter((socorroElem) => Object.keys(socorroElem.item).length == 1)
-          .filter(
-            (socorroElem) =>
-              getChannelPercentage(channel, socorroElem.item) != 0
-          )
-          .sort((a, b) => {
-            //return getChannelPercentage(channel_target, b.item) / getChannelPercentage(channel, b.item) - getChannelPercentage(channel_target, a.item) / getChannelPercentage(channel, a.item);
-            return b.count_group / total_group - a.count_group / total_group;
-          })
-          .map((elem) => {
-            return {
-              property: itemToLabel(elem.item),
-              in_signature: toPercentage(elem.count_group / total_group),
-              in_channel_target: getChannelPercentage(
-                channel_target,
-                elem.item
-              ),
-              in_channel: getChannelPercentage(channel, elem.item),
-            };
-          });
-      });
-  }
-
-  function getChannelsProperties(product) {
-    return loadChannelsDifferencesData(product)
-      .then(() =>
-        ["release", "beta", "nightly"].map((channel) =>
-          channelsData[channel].map(
-            (longitudinalElem) => Object.keys(longitudinalElem.item)[0]
-          )
-        )
-      )
-      .then((all_props_per_channel) =>
-        [].concat.apply([], all_props_per_channel)
-      )
-      .then((all_props) => new Set(all_props))
-      .then((props) => Array.from(props));
-  }
-
-  function getChannelsValues(product, property) {
-    return loadChannelsDifferencesData(product)
-      .then(() =>
-        ["release", "beta", "nightly"].map((channel) =>
-          channelsData[channel]
-            .filter(
-              (longitudinalElem) =>
-                Object.keys(longitudinalElem.item).indexOf(property) != -1
-            )
-            .map((longitudinalElem) => longitudinalElem.item[property])
-        )
-      )
-      .then((all_values_per_channel) =>
-        [].concat.apply([], all_values_per_channel)
-      )
-      .then((all_values) => new Set(all_values))
-      .then((values) => Array.from(values));
-  }
-
-  function getChannelsPercentage(product, channel, property, value) {
-    return loadChannelsDifferencesData(product).then(() =>
-      channelsData[channel].find(
-        (longitudinalElem) =>
-          Object.keys(longitudinalElem.item).indexOf(property) != -1 &&
-          longitudinalElem.item[property] == value
-      )
-    );
-  }
-
-  function text(textElem, signature, channel, product, show_ci = false) {
-    loadCorrelationData(signature, channel, product).then((data) => {
-      textElem.textContent = "";
-
-      if (!(product in data)) {
-        textElem.textContent =
-          "No correlation data was generated for the '" +
-          product +
-          "' product.";
-        return;
-      }
-
-      if (
-        !(signature in data[product][channel]["signatures"]) ||
-        !data[product][channel]["signatures"][signature]["results"]
-      ) {
-        textElem.textContent =
-          'No correlation data was generated for the signature "' +
-          signature +
-          '" on the ' +
-          channel +
-          " channel, for the '" +
-          product +
-          "' product.";
-        return;
-      }
-
-      let correlationData =
-        data[product][channel]["signatures"][signature]["results"];
-
-      let total_reference = data[product][channel].total;
-      let total_group = data[product][channel]["signatures"][signature].total;
-
-      textElem.textContent = sortCorrelationData(
-        correlationData,
-        total_reference,
-        total_group
-      ).reduce((prev, cur) => {
-        let support_group = toPercentage(cur.count_group / total_group);
-        let support_reference = toPercentage(
-          cur.count_reference / total_reference
-        );
-        let support_diff = toPercentage(
-          Math.abs(
-            cur.count_group / total_group -
-              cur.count_reference / total_reference
-          )
-        );
-
-        let ci = confidenceInterval(
-          cur.count_group,
-          total_group,
-          cur.count_reference,
-          total_reference
-        );
-
-        let support_diff_incertezza = toPercentage(
-          Math.abs(
-            Math.abs(ci[0]) -
-              Math.abs(
-                cur.count_group / total_group -
-                  cur.count_reference / total_reference
-              )
-          )
-        );
-
-        let res =
-          prev +
-          "(" +
-          support_group +
-          "% in signature vs " +
-          support_reference +
-          "% overall, difference " +
-          support_diff +
-          "±" +
-          support_diff_incertezza +
-          "%) " +
-          itemToLabel(cur.item);
-
-        if (cur.prior) {
-          let support_group_given_prior = toPercentage(
-            cur.prior.count_group / cur.prior.total_group
-          );
-          let support_reference_given_prior = toPercentage(
-            cur.prior.count_reference / cur.prior.total_reference
-          );
-          res +=
-            " [" +
-            support_group_given_prior +
-            "% vs " +
-            support_reference_given_prior +
-            "% if " +
-            itemToLabel(cur.prior.item) +
-            "]";
-        }
-
-        return res + "\n";
-      }, "");
-
-      textElem.textContent +=
-        "\n\nTop Words: " +
-        data[product][channel]["signatures"][signature]["top_words"].join(", ");
-    });
-  }
-
-  function graph(svgElem, signature, channel, product) {
-    loadCorrelationData(signature, channel, product).then((data) => {
-      d3.select(svgElem).selectAll("*").remove();
-
-      if (
-        !(product in data) ||
-        !(signature in data[product][channel]["signatures"]) ||
-        !data[product][channel]["signatures"][signature]["results"]
-      ) {
-        return;
-      }
-
-      let total_reference = data[product][channel].total;
-      let total_group = data[product][channel]["signatures"][signature].total;
-
-      let correlationData = data[product][channel]["signatures"][signature][
-        "results"
-      ].filter((elem) => Object.keys(elem.item).length <= 1);
-      correlationData = sortCorrelationData(
-        correlationData,
-        total_reference,
-        total_group
-      );
-      correlationData.reverse();
-
-      let margin = { top: 20, right: 300, bottom: 30, left: 300 };
-      let width = svgElem.getAttribute("width") - margin.left - margin.right;
-      let height = svgElem.getAttribute("height") - margin.top - margin.bottom;
-
-      let y0 = d3.scale.ordinal().rangeRoundBands([height, 0], 0.2, 0.5);
-
-      let y1 = d3.scale.ordinal();
-
-      let x = d3.scale.linear().range([0, width]);
-
-      let color = d3.scale.ordinal().range(["blue", "red"]);
-
-      let xAxis = d3.svg.axis().scale(x).tickSize(-height).orient("bottom");
-
-      let yAxis = d3.svg.axis().scale(y0).orient("left");
-
-      let svg = d3
-        .select(svgElem)
-        .attr("width", width + margin.left + margin.right)
-        .attr("height", height + margin.top + margin.bottom)
-        .append("g")
-        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
-
-      let options = [signature, "Overall"];
-
-      correlationData.forEach((d) => {
-        d.values = [
-          { name: "Overall", value: d.count_reference / total_reference },
-          { name: signature, value: d.count_group / total_group },
-        ];
-      });
-
-      y0.domain(correlationData.map((d) => itemToLabel(d.item)));
-      y1.domain(options).rangeRoundBands([0, y0.rangeBand()]);
-      x.domain([0, 100]);
-
-      svg
-        .append("g")
-        .attr("class", "x axis")
-        .attr("transform", "translate(0," + height + ")")
-        .call(xAxis);
-
-      svg.append("g").attr("class", "y axis").call(yAxis);
-
-      let bar = svg
-        .selectAll(".bar")
-        .data(correlationData)
-        .enter()
-        .append("g")
-        .attr("class", "rect")
-        .attr(
-          "transform",
-          (d) => "translate( 0," + y0(itemToLabel(d.item)) + ")"
-        );
-
-      let bar_enter = bar
-        .selectAll("rect")
-        .data((d) => d.values)
-        .enter();
-
-      bar_enter
-        .append("rect")
-        .attr("height", y1.rangeBand())
-        .attr("y", (d) => y1(d.name))
-        .attr("x", (d) => 0)
-        .attr("value", (d) => d.name)
-        .attr("width", (d) => x((d.value * 100).toFixed(2)))
-        .style("fill", (d) => color(d.name));
-
-      bar_enter
-        .append("text")
-        .attr("x", (d) => x((d.value * 100).toFixed(2)) + 5)
-        .attr("y", (d) => y1(d.name) + y1.rangeBand() / 2)
-        .attr("dy", ".35em")
-        .text((d) => (d.value * 100).toFixed(2));
-
-      let legend = svg
-        .selectAll(".legend")
-        .data(options.slice())
-        .enter()
-        .append("g")
-        .attr("class", "legend")
-        .attr(
-          "transform",
-          (d, i) => "translate(" + margin.right + "," + i * 20 + ")"
-        );
-
-      legend
-        .append("rect")
-        .attr("x", width - 18)
-        .attr("width", 18)
-        .attr("height", 18)
-        .style("fill", color);
-
-      legend
-        .append("text")
-        .attr("x", width - 24)
-        .attr("y", 9)
-        .attr("dy", ".35em")
-        .style("text-anchor", "end")
-        .text((d) => d);
-    });
-  }
-
-  return {
-    getAnalysisDate: getAnalysisDate,
-    text: text,
-    rerank: rerank,
-    getChannelsProperties: getChannelsProperties,
-    getChannelsValues: getChannelsValues,
-    getChannelsPercentage: getChannelsPercentage,
-    toPercentage: toPercentage,
-    graph: graph,
-  };
-})();
diff --git a/correlations_page.js b/correlations_page.js
deleted file mode 100644
index 0a0d11f9..00000000
--- a/correlations_page.js
+++ /dev/null
@@ -1,139 +0,0 @@
-let options = {
-  product: {
-    value: null,
-    type: "option",
-  },
-  channel: {
-    value: null,
-    type: "option",
-  },
-  signature: {
-    value: null,
-    type: "button",
-  },
-};
-
-function getOption(name) {
-  return options[name].value;
-}
-
-function getOptionType(name) {
-  return options[name].type;
-}
-
-function setOption(name, value) {
-  return (options[name].value = value);
-}
-
-let onLoad = new Promise(function (resolve, reject) {
-  window.onload = resolve;
-});
-
-function getCorrelations() {
-  if (!getOption("channel") || !getOption("signature")) {
-    return;
-  }
-
-  let url = new URL(location.href);
-  url.search =
-    "?product=" +
-    getOption("product") +
-    "&channel=" +
-    getOption("channel") +
-    "&signature=" +
-    getOption("signature");
-  history.replaceState({}, document.title, url.href);
-
-  let signature = decodeURIComponent(getOption("signature"));
-  let channel = getOption("channel");
-  let product = getOption("product");
-
-  let crashStatsLink = document.getElementById("crash_stats_link");
-  crashStatsLink.href =
-    "https://crash-stats.mozilla.org/signature/?signature=" +
-    getOption("signature") +
-    "&release_channel=" +
-    getOption("channel") +
-    "&product=" +
-    getOption("product") +
-    "#correlations";
-
-  let preElem = document.getElementById("correlations_text");
-  correlations.text(preElem, signature, channel, product);
-
-  let svgElem = document.getElementById("correlations_image");
-  correlations.graph(svgElem, signature, channel, product);
-}
-
-function updateAnalysisDate() {
-  correlations
-    .getAnalysisDate(getOption("product"))
-    .then((date) => (document.getElementById("date").textContent = date));
-}
-
-onLoad
-  .then(function () {
-    let queryVars = new URL(location.href).search.substring(1).split("&");
-
-    Object.keys(options).forEach(function (optionName) {
-      let optionType = getOptionType(optionName);
-      let elem = document.getElementById(optionName);
-
-      for (let queryVar of queryVars) {
-        if (queryVar.startsWith(optionName + "=")) {
-          let option = queryVar.substring((optionName + "=").length).trim();
-          setOption(optionName, option);
-        }
-      }
-
-      if (optionType === "select") {
-        if (getOption(optionName)) {
-          elem.checked = getOption(optionName);
-        }
-
-        setOption(optionName, elem.checked);
-
-        elem.onchange = function () {
-          setOption(optionName, elem.checked);
-          getCorrelations();
-        };
-      } else if (optionType === "option") {
-        if (getOption(optionName)) {
-          for (let i = 0; i < elem.options.length; i++) {
-            if (elem.options[i].value === getOption(optionName)) {
-              elem.selectedIndex = i;
-              break;
-            }
-          }
-        }
-
-        setOption(optionName, elem.options[elem.selectedIndex].value);
-
-        elem.onchange = function () {
-          setOption(optionName, elem.options[elem.selectedIndex].value);
-          updateAnalysisDate();
-          getCorrelations();
-        };
-      } else if (optionType === "button") {
-        if (getOption(optionName)) {
-          elem.value = getOption(optionName);
-        }
-
-        setOption(optionName, elem.value.trim());
-
-        document.getElementById(optionName + "Button").onclick = function () {
-          setOption(optionName, elem.value.trim());
-          getCorrelations();
-        };
-      } else {
-        throw new Error("Unexpected option type.");
-      }
-    });
-  })
-  .then(function () {
-    updateAnalysisDate();
-    getCorrelations();
-  })
-  .catch(function (err) {
-    console.error(err);
-  });
diff --git a/exclamation_mark.svg b/exclamation_mark.svg
deleted file mode 100644
index 3ddb1d92..00000000
--- a/exclamation_mark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/graphics_critical_errors.html b/graphics_critical_errors.html
deleted file mode 100644
index 48564fc0..00000000
--- a/graphics_critical_errors.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-  
-    
-    Graphics Critical Errors
-    
-  
-  
-    
-    
-      
-        
-        
-      
-    
ErrorFrequency
- - diff --git a/graphics_critical_errors.js b/graphics_critical_errors.js deleted file mode 100644 index 0f144c2e..00000000 --- a/graphics_critical_errors.js +++ /dev/null @@ -1,36 +0,0 @@ -let onLoad = new Promise(function (resolve, reject) { - window.onload = resolve; -}); - -function addRow(error) { - let table = document.getElementById("table"); - - let row = table.insertRow(table.rows.length); - - let name = row.insertCell(0); - name.appendChild(document.createTextNode(error[0])); - - let frequency = row.insertCell(1); - frequency.appendChild(document.createTextNode(error[1])); -} - -function buildTable() { - fetch("graphics_critical_errors.json") - .then((response) => response.json()) - .then((graphics_critical_errors) => { - Object.entries(graphics_critical_errors) - .sort((error1, error2) => error2[1] - error1[1]) - .forEach(addRow); - }) - .catch(function (err) { - console.error(err); - }); -} - -onLoad - .then(function () { - buildTable(); - }) - .catch(function (err) { - console.error(err); - }); diff --git a/graphics_critical_errors.json b/graphics_critical_errors.json deleted file mode 100644 index 589afc47..00000000 --- a/graphics_critical_errors.json +++ /dev/null @@ -1 +0,0 @@ -{"Failed to get cairo surface for mask surface!": 0, "Failed to copy glyphs to geometry sink. Code: ": 0, "wglDXUnlockObjects called without mGL being current.": 0, "Failed to play canvas event type: ": 367, "TOpAddFontInstance failed": 0, "ClearRect with invalid argument ": 0, "ShmSegmentsWriter failed to allocate chunk #": 87, "GFX: D3D11 timeout on the D3D11 sync lock.": 0, "Bad symbol name : ": 0, "TOpUpdateImage failed": 0, "Failed to create a D2D1 content device: ": 173, "Failed to read swap chain description: ": 0, "Unknown chroma subsampling:": 0, "VendorIDMismatch V ": 12, "Failed to load ": 1242, "DoesRecreatingCreateRenderTargetViewFailed": 0, "Could not create content video decoder: ": 0, "Bad BytesPerPixel(": 0, "Failed to get D3D11VideoDevice: ": 3245, "Compositor window was not created": 0, "Unexpected error: ": 0, "RenderTargetViewNeedsRecreating": 10, "BorrowDrawTarget failure, original backend ": 0, "GFX: D3D11 skip EndFrame with device-removed.": 5, "Failed to create VideoProcessorEnumerator: ": 8, "Exception occurred reading font data for ": 12, "Exception occurred reading DWrite font file data": 0, "RemoteTexture ready timeout": 160, "Attempt to update texture client from a surface ": 0, "Failed to allocate Texture2D: ": 1537, "Attempt to create DrawTarget for invalid surface. ": 28, "window is null": 1, "Fallback WR to SW-WR + D3D11": 9550, "Detect DeviceReset ": 3459, "TOpAddFontDescriptor failed": 0, ": ": 82238, "GetBuffer Failed": 136, "[D2D1.1] Failed to obtain a device for ": 23, "Exception occurred measuring glyph bounds for ": 24, "Failed to CreateSurface for DCTile: ": 0, "Failed to create software bitmap: ": 67, "Managed to allocate after flush.": 1892, "Attempting to post to an invalid Compositor Thread": 2, "Error in eglMakeCurrent: ": 682, "Failed to map surface.": 0, "Failed to get D3D11VideoContext: ": 0, "RenderDXGITextureHost egl extensions are not suppored": 0, "Failed to initialize DCSurfaceHandle: ": 0, "Shared surface does not exist for extId:": 0, "Unsupported color space": 0, "GL context version (": 0, "Failed to get D3D11Texture2D": 103, "Could not create gpu-vr bridge: ": 0, "Failed to make render context current, can't draw.": 9, "Something to report and not assert": 0, "Failed to create WebRenderBridgeChild.": 1079, "DoesCreatingDirectDrawFailed ": 0, "CanvasTranslator::AddBuffer bad state ": 3, "PrintWindow failed": 0, "DoesD3D11TextureSharingWork_MapFailed": 4, "RenderDXGITextureHost AcquireSync timeout, hr=": 168, "CompositorBridgeChild was not deinitialized": 0, "D3D11 layers just crashed; D3D11 will be disabled.": 3, "Could not determine font type for sanitizing font ": 0, "Failed to load libandroid.so": 0, "No GPUs detected via PCI\\n": 0, "wglDXLockObjects called without mGL being current.": 0, "DoesCreatingDirectDrawFailed": 0, "Failed to map VSConstantBuffer. Result: ": 0, "Exception occurred initializing variation face": 0, "GFX: D3D11 lock mutex abandoned": 202, "SnapshotInto: srcByteCount:": 0, "Exception occurred reading faces for ": 9, "DrawSurface with bad surface ": 11, "Failed to get Programs for CompositorOGL for SWGL": 0, "Exception occurred reading face names for ": 0, "Failed to create a D3D11 content device: ": 21, "Failed to do glGetActiveUniform: ": 0, "DoesRecreatingCreateCPUTextureFailed": 5, "Failed to init Gtk, missing display? DISPLAY=": 0, "Handling webrender error ": 27803, "Invalid child item within 3D transform of type: ": 0, "DrawTargetCairo::Snapshot with bad surface ": 424, "Bad `elemType`: ": 0, "CanvasTranslator::CreateDrawTarget lock failed": 0, "Failed to map bitmap (M).": 9, "Could not initialize rendering with GPU process": 0, "Failed to create DCompositionVisual: ": 0, "Unsupported RenderTexture for overlay: ": 0, "SSP:Add ": 0, "Crash during D3D11 device creation for VR": 0, "Exception occurred during DWrite font fallback": 0, "Unexpected srcTarget: ": 0, "DataSourceSurface is null": 0, "[D2D1.1] Attempt to use unsupported surface size ": 0, "vaapitest: ManageChildProcess failed\\n": 0, "Failed to resize swap chain buffers: ": 35, "Failed copying Skia raster snapshot": 215, "Ignoring call to ": 26, "Unexpected GL error: ": 0, "DoesD3D11TextureSharingWork_GetSharedTextureFailure": 0, "Device reset with WR context unexpected status: ": 0, "Failed to GetDataSurface in UpdateFromSurface (BT).": 0, "Failed to initialize CompositorOGL for SWGL: ": 0, ": Failed to create mResolvedDefaultFB.": 23, "ID3D11VideoProcessorInputView creation failed: ": 51, "WrBridge mismatch happened": 0, "Failed to get image for mask surface!": 0, "SnapshotInto: invalid stride, width:": 0, "DoesRecreatingMapFailed ": 0, "Disable native compositor for async screenshot": 4, "RenderThread cannot find renderer for window ": 0, "OnResumeComposition called with null Surface": 0, "vaapitest: ": 595, "Failed to get the description ": 0, "RenderDXGIYCbCrTextureHost uses obsoleted device": 1, "NOTE_IF_FALSE: ": 3, "Failed to map surface for premultiplying alpha.": 0, "Couldn't sanitize GL_RENDERER \\": 0, "Failed to get EGLDisplay of D3D11Device": 0, "Failed to create StagingTexture: ": 890, "Wayland protocol error: ": 434, "GpuProcessTextureId is not valid": 111, "[D2D1.1] 2Failed to create a DeviceContext, code: ": 6, "[D3D11] failed to get immediate context": 0, "Unknown cairo content type ": 0, "SingletonGL does not exist for SWGL": 0, "Failed to create video SwapChain: ": 253, "Failed to initialize DCSurface: ": 0, "DCompositionSurface::BeginDraw failed: ": 11471, "v4l2test: ManageChildProcess failed\\n": 0, "MapTile failed aValidRect: ": 2655, "Texture deallocated too late during shutdown": 0, "Failed to read event type: ": 46, "YCbCr Surface is null": 0, "Misprediction: ": 0, "Failed to load ANGLE symbols!": 0, "Invalid surface for OGL update": 0, "NextSurfaceAsDrawTarget lock surface failed.": 0, "Failed to initialize DCSurfaceVideo: ": 0, "Failed to create Renderer thread: ": 27, "[D3D11] failed to get compositor device.": 1365, "Failed to create EGLConfig!": 0, "(nsWindow) Detected device reset: ": 80, "Failed to do glGetActiveAttrib: ": 0, "Failed to parse ANGLE renderer: ": 1, "Exception occurred reading names for ": 10, "Out of sync D3D11 devices in HandleError, ": 1, "RecordedSourceSurfaceCreation read invalid size ": 0, "Failed to initialize DCExternalSurfaceWrapper: ": 0, "CanvasTranslator::SetDataSurfaceBuffer bad state ": 2, "TexUnpackSurface missing structuredSrcSize.": 0, "Exception occurred creating unscaledFont for ": 0, "Failed GL context creation for WebRender: ": 48, "Fallback WR to SW-WR": 10718, "DataSourceSurface failed to map for Image for extId:": 0, "Failed to create draw target in device context sized ": 43, "glxtest: ": 2629, "Updating unknown shared surface: ": 0, "GFX: CanvasTranslator detected a device reset at ": 54, "Failed to create DCompSurfaceHandle": 0, "(gfxWindowsPlatform) scheduled device update.": 104, "SSP:Get ": 0, "DoesD3D11TextureSharingWork_CreateTextureFailure": 1, "Killing GPU process due to IPC reply timeout": 4680, "Failed serializing fonts for blob image": 0, "MakeCurrent called on a thread other than the": 0, "DrawSurfaceWithShadow with bad surface ": 0, "CreateShaderResourceView failed for format": 0, "Failed to create ID3D11Texture2D: ": 0, "RenderDXGIYCbCrTextureHost device is not available": 0, "Unhandled kCVPixelFormatType_*: ": 0, "Error in eglSetDamageRegion: ": 77, "[D3D11] TextureSourceD3D11:GetShaderResourceView ": 42, "Failed to create EGLSurface. ": 182, "GetBuffer returned invalid call! ": 0, "RGBX pixel at (": 0, "Failed to close PathSink. Code: ": 0, "Failed to get serializer as surface!": 0, "Failed to OpenSharedResource1 for SyncObjectD3D11: ": 1, "(gfxWindowsPlatform) Detected device reset: ": 101, "Unknown image content format ": 0, "Cannot evaluate keyed mutex feature status": 0, "A content-only TDR is detected.": 24, "Failed to create drawTarget for blob image": 0, "Failed to create EGLConfig for WebRender!": 2, "webgl::Deserialize failed for ": 4, "[D3D11] ": 3538, "BlitSdToFramebuffer failed for type ": 13, "Could not query device DXGI adapter info": 0, "Failed to initialize shared font list, ": 184, "Fallback SW-WR + D3D11 to SW-WR": 8464, "Invalid size in UpdateRenderTarget ": 0, "Failed to create Pbuffer of back buffer error: ": 1, "Readding known shared surface: ": 0, "Fallback to RGB SwapChain": 0, "Unknown cairo format ": 0, "BufferProvider::SetForwarder failed": 54, "Replay failure: ": 44, "Null DMABUFSurface for GLBlitHelper::BlitImage": 0, "Failed to map ID3D11Texture2D: ": 0, "DoesD3D11TextureSharingWork_TryCreateTextureFailure": 4, "EnsureVideoProcessor Failed": 28, "GLContext just crashed.": 0, "vaapitest: Failed to get VAAPI codecs\\n": 0, "Failed in CreateRenderTargetFromSource ": 0, "MozFramebuffer::CreateImpl(size:": 811, "Present1 failed: ": 462, "GetBuffer returned invalid call: ": 0, "ScheduleSharedSurfaceRelease destroyed non-empty": 0, "Could not create content compositor bridge: ": 0, "ManageChildProcess(": 66, "Attempt to dealloc a ShmemSections after shutdown.": 37, "Failed to get ID3D11VideoContext1": 0, "timeout": 4987, "RenderDXGIYCbCrTextureHost init stream failed": 2, "RenderDXGITextureHost device is not available": 18, "TexUnpackSurface failed to get TextureHost": 3, "Failed to get immediate context.": 0, "RenderDXGITextureHost uses obsoleted device": 3, "Failed to initialize DCTile: ": 0, "Error in eglDestroySurface: ": 698, "SnapshotInto: invalid srcByteCount, width:": 0, "Failed in CreateRenderTarget ": 0, "[GLBlitHelper::BlitSdToFramebuffer] ": 0, "GFX: D3D11 lock mutex timeout - device removed": 3, "Fallback WR to SW-WR + OpenGL": 0, "About to release with valid callback": 0, "TileSize is not positive aId: ": 0, "FireTestProcess failed: ": 0, "Buffer size is invalid": 0, "Parent winow does not match": 0, "Failed to create EGLContext!: ": 101, "DXInterop2Device::Open: DXOpenDevice failed.": 0, "TOpAddImage failed": 0, "Not enough Memory allocate a memory pool of size ": 0, "DoesD3D11TextureSharingWork_AcquireSyncTimeout": 0, "Failed accessing pixels for Skia raster image": 0, "DoesD3D11TextureSharingWork_GetResourceFailure": 0, "D3D11 swap chain preset failed ": 23, "Exception occurred initializing WARP D3D11 device!": 0, "Failed to load AHardwareBuffer": 0, "Device used not marked as multithread-safe.": 0, "CreateDIBSection failed": 0, "Invalid draw target type specified: ": 0, "(nsWindow) Finished device reset.": 81, "D3D11 layers disabled due to a prior crash.": 20, "Invalid reference count release": 1, "Failed to create DrawTarget (D3D11)": 0, "[D2D1.1] Failed to obtain a DXGI surface.": 0, "GFX: AL_D3D11 abandoned sync": 130, "Failed to get IDXGISwapChain3": 0, "Failed to re-create SwapChain": 0, "WebRenderTextureHost is not used": 0, "Couldn't get application directory.\\n": 0, "Failed to CreateVisual for DCTile: ": 0, "TOpAddBlobImage failed": 1, "SSP:Ads ": 0, "CreateCompatibleSurface failed: ": 0, "Exception occurred measuring glyph width for ": 3, "Failed to create VideoSwapChain": 158, "glxtest: ManageChildProcess failed\\n": 0, "ID3D11VideoProcessorOutputView creation failed: ": 0, "Failed to map YCbCr Surface": 0, "Failed serializing fonts for blob vector image": 0, "SSP:Acq ": 0, "Readback took too long: ": 0, "mBindFailureGuard failure: Generating error ": 3, "HandlePartialUpdate lock surface failed.": 0, "PlanarYCbCrData::From SurfaceDescriptorBuffer ": 0, "Couldn't find application file.\\n": 0, "GFX: D3D11 timeout with device-removed:": 0, "GFX: CanvasTranslator failed to get device": 9, "DMABuf surface import failed!": 30, "Unknown image format ": 0, "TexUnpackSurface failed to get ExternalImage": 0, "Platform does not support out-of-process compositing": 0, "Failed to map Surface": 0, "Failed to get EGLDeviceEXT of D3D11Device": 0, "Failed to map bitmap (EM).": 0, "RGBX corner pixel at (": 0, "Failed in UpdateRenderTarget ": 0, "CreateDataSourceSurfaceWithStride(surfFormat=": 0, "TexUnpackSurface failed to get VideoBridgeParent": 1, "GLContext remains enabled despite a previous crash.": 0, "Failed to connect WebRenderBridgeChild. isParent=": 3716, "ToSurfaceDescriptor failed in ": 1, "Deleting referenced object? ": 2, "RenderExternalTextureHost sync failed": 0, "Failed GL context creation for hardware WebRender: ": 14, "Unsupported RenderTexture for DCSurfaceHandle: ": 0, "Compositors might be mixed (": 0, " (iosurf format: ": 0, "Crash during D3D11 device creation for Canvas": 5, "Unhandled enum for FragOutputBaseType: ": 0, "Invalid PathBuilder type specified: ": 0, "Could not create content compositor manager: ": 0, "Exception occurred getting text intercepts": 2, "Failed to start v4l2test process\\n": 0, "Exception occurred while creating font entry for ": 8, "TextureHost creation failure type=": 30, "RecordedDrawGlyphs failed to allocate glyphs of size ": 0, "PCI candidate ": 12, "invalid offset ": 104, "PixelUnpackStateGl was not current. Was ": 19, "Failed to create drawTarget for blob mask image": 0, "Failed to realize a bitmap, device ": 0, "DoesRecreatingKeyedMutexFailed": 0, "Too big ANativeWindow size(": 0, "Unexpected pixel format: ": 0, "Failed to create CompositorBridgeChild": 0, "Failed to create EGLSurface!: ": 43, "Failed to SetContent for DCTile: ": 0, "TexUnpackImage missing structuredSrcSize.": 0, "Unhandled texTarget: ": 0, "TexUnpackSurface failed to create wrapping ": 0, "More than 1 GPU vendor detected via PCI, cannot ": 12, "Error code from OpenSharedResource1: ": 4, "Invalid target in gfxContext::CreateOrNull ": 0, "CompositorBridgeChild receives IPC close with ": 37929, "CreateCompatibleDC failed": 0, "Failed to create luminance effect. Code: ": 0, "Failed serializing fonts for blob mask image": 0, "Failed to create a valid ShmemTextureHost": 183, "More than 1 GPU from same vendor detected via ": 43, "Bad buffer host descriptor ": 0, "CanvasTranslator::PushRemoteTexture dst lock failed": 1, "Failed to create a surface for external image: ": 0, "ReadPixels: Bad ": 0, "Crash during D3D11 device creation": 22, "Failed to look up MacIOSurface": 1, "IPC Channel is already torn down unexpectedly\\n": 0, "Failed to obtain buffer": 0, "Null MacIOSurface for GLBlitHelper::BlitImage": 0, "CompositorBridgeParent destroyed without shutdown": 0, "DoesD3D11TextureSharingWork_SourceMutexTimeout": 4, "Exception occurred creating font face for ": 28, "Failed to create effect for FilterType: ": 0, "mSRV not destroyed on final release! RefCnt: ": 0, "GFX: D3D11 skip BeginFrame with device-removed.": 379, "Surface is null": 0, "[D3D11] 2 CreateTexture2D failure Size: ": 1435, "Unknown texture type ": 0, "Could not list /dev\\n": 0, "CanvasTranslator::CreateReferenceTexture lock failed": 0, "mRTView not destroyed on final release! RefCnt: ": 0, "Failed[3] to create EGL library display: ": 4, "ClientWebGLContext::GetFrontBufferSnapshot: ": 0, "Unhandled external image format: ": 1, "Failed as lost WebRenderBridgeChild.": 3454, "mBindFailureGuard failure: Early exit from ": 24, "Multithread safety interface not supported. ": 0, "DoesD3D11TextureSharingWork_ColorMismatch": 27, "Failed to obtain native window from Surface": 0, "TOpUpdateBlobImage failed": 0, "Compositor thread not started (": 3, "Fallback SW-WR + OpenGL to SW-WR": 0, "Failed to map tile: ": 532, "Unexpected error ": 115, "Failed to create Pbuffer surface error: ": 43, "Flushing glGetError still ": 0, "Failed to get KeyedMutex (3): ": 0, "Failed to create EGLSync from acquire fence fd": 0, "Failed to create global device context": 0, "D3D11 swap resize buffers failed ": 7, "Attempt to allocate a ShmemSection after shutdown.": 1, "Unhandled subdesc type: ": 0, "WebGLParent::RecvGetFrontBufferSnapshot: ": 0, "DoesRecreatingCreateTexture2DFail": 768, "Non-NV12 format for SurfaceDescriptorD3D10: ": 1, "Could not get a DXGI adapter": 37, "Could not borrow DrawTarget (D3D11) ": 8, "Failed to cast ": 0, "[D2D1.1] Failure creating solid color brush (I2).": 0, "VendorIDMismatch P ": 0, "Unexpected plane count: ": 0, "Failed[3] to load EGL library: ": 0, "Could not initialize mScreenReferenceDrawTarget": 0, "AndroidHardwareBuffer id mismatch happened": 0, "Couldn't sanitize ANGLE renderer \\": 0, "Unusual PlanarYCbCrData: ": 0, "Failed VerifyBufferSize in UpdateRenderTarget ": 8, "Failed SWGL context creation for WebRender": 0, "Unexpected error from driver: ": 2, "Unexpected BufferProvider over-production.": 184, "Failed to get KeyedMutex (2): ": 0, "Failed to map PSConstantBuffer. Result: ": 0, "Failed to create VideoProcessor: ": 62, "VideoProcessorBlt failed: ": 105, "GFX: D3D11 lock mutex timeout - no device returned": 0, "Failed to create EGLConfig for WebRender ANGLE!": 0, "[D2D1.1] 3CreateBitmap failure ": 28, "Unexpected GLSL version: ": 0, "Failed to load EGL library 6!": 0, " at ": 56, "Unexpected glGetGraphicsResetStatus: ": 0, "Failed sanitizing font ": 37, "Exception occurred initializing bold face": 0, "RenderDXGITextureHost init stream failed": 75, "TOpAddCompositorAnimations bad id": 0, "Unsupported surface format from source ": 0, "TextureHost does not exist for extId:": 0, "Failed to create EGLSync from fd": 0, "Failed to initialize CompositorD3D11 for SWGL: ": 2114, "Exception occurred reading cmaps for ": 0, "Shader compilation failure, cfg:": 0, "Failed to create DrawTarget, Type: ": 1451, "No read pointer from reader for sanitizing font ": 0, "Device reset with D3D11Device unexpected reason: ": 4, "FireGLXTestProcess failed to create pipe\\n": 0, "vaapitest: Failed to get VAAPI support\\n": 0, "Something to report and assert": 0, "Failed to initialize WARP D3D11 device! ": 4, "[D3D11] failed to get compositor device attachments": 163} \ No newline at end of file diff --git a/images/addon_related_signatures.png b/images/addon_related_signatures.png deleted file mode 100644 index b5dfcd36ff5b6d7bdf61128e58238ddaa1e9633e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65227 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 TMIHI?guylAs}+~;{PO<+0c-mg diff --git a/images/beta-stability-pushlog.png b/images/beta-stability-pushlog.png deleted file mode 100644 index e7ff9407e812f5c544012c5c4c273d5223b9fccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57154 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