2
0
mirror of https://github.com/fork-maintainers/iceraven-browser synced 2024-11-15 18:12:54 +00:00

Revert "Bug 1875294 - Record breadbcrumbs before crashing with UnsatsisfiedLinkError"

This reverts commit 6fb061ce5efc1a3fb11dace06b826382e0b56736.

These didn't work out in practice.  The file lists were always empty, I
think it might be a difference in permissions for release builds vs the
debug builds that I was testing with.

The package installer name was useful, but I realized there's Sentry tag for that which is even more useful.
This commit is contained in:
Ben Dean-Kawamura 2024-02-01 16:57:01 -05:00 committed by mergify[bot]
parent 9ef4aef273
commit 1343061679

View File

@ -112,11 +112,8 @@ import org.mozilla.fenix.session.VisibilityLifecycleCallback
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHOLD
import org.mozilla.fenix.wallpapers.Wallpaper
import java.io.File
import java.io.FileInputStream
import java.util.UUID
import java.util.concurrent.TimeUnit
import java.util.zip.ZipInputStream
import kotlin.math.roundToLong
private const val RAM_THRESHOLD_MEGABYTES = 1024
@ -525,76 +522,13 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
* thread, early in the app startup sequence.
*/
private fun beginSetupMegazord() {
try {
// Note: Megazord.init() must be called as soon as possible ...
Megazord.init()
// Note: Megazord.init() must be called as soon as possible ...
Megazord.init()
initializeRustErrors(components.analytics.crashReporter)
// ... but RustHttpConfig.setClient() and RustLog.enable() can be called later.
initializeRustErrors(components.analytics.crashReporter)
// ... but RustHttpConfig.setClient() and RustLog.enable() can be called later.
RustLog.enable()
} catch (e: UnsatisfiedLinkError) {
@Suppress("TooGenericExceptionCaught")
try {
reportUnsatisfiedLinkErrorBreadcrumbs()
} catch (e: Throwable) {
// This shouldn't happen, but if it does it's better to ignore the exception from
// the breadcrumb code and rethrow the initial exception.
}
throw e
}
}
private fun reportUnsatisfiedLinkErrorBreadcrumbs() {
val breadcrumbStrings = mutableListOf<String>()
val apkPath = applicationContext.getApplicationInfo().sourceDir
breadcrumbStrings.add("APK: $apkPath")
val apkDir = File(apkPath).getParentFile()
val installSourcePackage = if (SDK_INT >= Build.VERSION_CODES.R) {
packageManager.getInstallSourceInfo(packageName).installingPackageName
} else {
@Suppress("DEPRECATION")
packageManager.getInstallerPackageName(packageName)
}
breadcrumbStrings.add("Installer package name: $installSourcePackage")
val installDirFileSet = if (apkDir != null) {
apkDir.walk()
.filter { it != apkDir && !it.isDirectory() }
.map { it.relativeTo(apkDir).toString() }
.filter { it.startsWith("lib/") }
.toHashSet()
} else {
HashSet()
}
val apkFileSet = ZipInputStream(FileInputStream(apkPath)).use {
generateSequence { it.nextEntry }
.map { it.name }
.filter { it.startsWith("lib/") }
.toHashSet()
}
fun formatFileSet(filenames: Set<String>) = if (filenames.size > 0) {
filenames.joinToString(", ")
} else {
"<none>"
}
val installDirOnly = formatFileSet(installDirFileSet - apkFileSet)
val apkFileOnly = formatFileSet(apkFileSet - installDirFileSet)
val both = formatFileSet(installDirFileSet union apkFileSet)
breadcrumbStrings.add("Files only inside lib/ dir: $installDirOnly")
breadcrumbStrings.add("Files only inside APK lib/ dir: $apkFileOnly")
breadcrumbStrings.add("Files inside both lib/ dirs: $both")
for (breadcrumbString in breadcrumbStrings) {
components.analytics.crashReporter.recordCrashBreadcrumb(
Breadcrumb(
category = "Startup",
message = breadcrumbString,
level = Breadcrumb.Level.INFO,
),
)
}
RustLog.enable()
}
@OptIn(DelicateCoroutinesApi::class) // GlobalScope usage