From 1e23082c288103517afd6ef9b3dc497a52b04e48 Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 6 Mar 2024 17:17:28 +0800 Subject: [PATCH] =?UTF-8?q?[6.3.0][=E6=97=A5=E5=BF=97]=20=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=8C=87=E5=AE=9ATag;=E5=B9=B6=E5=AF=B9=E7=89=B9?= =?UTF-8?q?=E5=AE=9ATag=E5=81=9Acheck(=E5=A6=82:ANR=20LOG)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../block/MoGoBlockProviderImpl.kt | 54 ++++++++++--------- .../block/observer/AnrLogcatObserver.kt | 11 ++++ .../logcat/MoGoLogRecordProviderImpl.kt | 13 ++--- .../logcat/checker/AnrLogChecker.kt | 24 +++++++++ .../api/devatools/block/IMoGoBlockProvider.kt | 2 + 6 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt diff --git a/config.gradle b/config.gradle index 40adc07322..bce6b2b04e 100644 --- a/config.gradle +++ b/config.gradle @@ -225,7 +225,7 @@ ext { btrace : "com.bytedance.btrace:rhea-core:2.0.0", mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.11", - log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.30", + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.50", // 安全证书 passport_secret : "com.zhidaoauto:sdk-java:1.0.6-SNAPSHOT", diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt index 29cda0e9c1..c6cbba0c37 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt @@ -47,30 +47,7 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener { Log.d("BLOCK", "--- onBlockReport ---: ${info.frames.size}") val map = mutableMapOf>() map["frames"] = info.frames.map { "$it" } - BlockDetector.recorder().dump(object: OnDumpListener { - override fun OnDumped(data: Map>) { - map["history"] = data[0] ?: emptyList() - map["pending"] = data[1] ?: emptyList() - val cpu = CallerDevaToolsManager.usage()?.dump() - if (!cpu.isNullOrEmpty()) { - val mainThreadUsage = cpu.remove("MainThreadUsage") - val processUsage = cpu.remove("ProcessUsage") - if (mainThreadUsage != null && processUsage != null) { - map["cpu"] = ArrayList().also { - it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)") - for (e in cpu.entries.sortedByDescending { e -> e.value }) { - it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)") - } - } - } - } - try { - VLogUtils.w("BLOCK", GsonUtils.toJson(map)) - } catch (t: Throwable) { - t.printStackTrace() - } - } - }) + dump(map) } override fun monitor(window: Window) { @@ -102,4 +79,33 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener { override fun recorder(): IMessageRecorder { return BlockDetector.recorder() } + + override fun dump(extra: Map>?) { + val map = mutableMapOf>() + extra?.takeIf { it.isNotEmpty() }?.also { map.putAll(it) } + BlockDetector.recorder().dump(object: OnDumpListener { + override fun OnDumped(data: Map>) { + map["history"] = data[0] ?: emptyList() + map["pending"] = data[1] ?: emptyList() + val cpu = CallerDevaToolsManager.usage()?.dump() + if (!cpu.isNullOrEmpty()) { + val mainThreadUsage = cpu.remove("MainThreadUsage") + val processUsage = cpu.remove("ProcessUsage") + if (mainThreadUsage != null && processUsage != null) { + map["cpu"] = ArrayList().also { + it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)") + for (e in cpu.entries.sortedByDescending { e -> e.value }) { + it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)") + } + } + } + } + try { + VLogUtils.w("BLOCK", GsonUtils.toJson(map)) + } catch (t: Throwable) { + t.printStackTrace() + } + } + }) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt new file mode 100644 index 0000000000..f87f3e1838 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt @@ -0,0 +1,11 @@ +package com.zhjt.mogo_core_function_devatools.block.observer + +import com.mogo.core.log.record.config.checker.ILogcatChecker +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager + +class AnrLogcatObserver: ILogcatChecker.ILogcatCheckObserver { + + override fun onGet() { + CallerDevaToolsManager.block()?.dump() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 6dbe5d527d..b63c0a8d85 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -10,12 +10,12 @@ import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager import com.mogo.commons.AbsMogoApplication import com.mogo.core.log.record.* import com.mogo.core.log.record.config.* -import com.mogo.core.log.record.config.crash.* import com.mogo.core.log.record.config.state.IStateProvider import com.mogo.core.log.record.model.UploadError import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.function.api.devatools.logcat.* import com.zhidao.loglib.bean.RemoteLogPushContent +import com.zhjt.mogo_core_function_devatools.logcat.checker.AnrLogChecker import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig import com.zhjt.mogo_core_function_devatools.logcat.uploader.* import kotlinx.coroutines.* @@ -99,17 +99,12 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, itx["协议版本号"] = AppConfigInfo.protocolVersionNumber itx["${divider}-7"] = divider itx["角色"] = AppConfigInfo.role - } } }) - .crashConfig(CrashConfig.Builder() - .enabled(false) - .crashDir(File(context.getExternalFilesDir(null), "logcat/crash")) - .javaCrash(true) - .anr(true) - .nativeCrash(true) - .build()) + .ignoreTags(" OpenGLRenderer") + .systemTags(" ActivityManager") + .checker(AnrLogChecker()) .uploader(LogRecordUploader())) scope.launch { try { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt new file mode 100644 index 0000000000..50c3473caf --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt @@ -0,0 +1,24 @@ +package com.zhjt.mogo_core_function_devatools.logcat.checker + +import com.mogo.core.log.record.config.checker.ILogcatChecker +import com.zhjt.mogo_core_function_devatools.block.observer.AnrLogcatObserver +import okio.ByteString.Companion.encodeUtf8 +import okio.Source +import okio.buffer + +class AnrLogChecker: ILogcatChecker { + + companion object { + private const val TAG = "AnrLogChecker" + } + + private val anrByteString by lazy { "ANR in com.mogo.launcher.f".encodeUtf8() } + + override fun check(data: Source): Boolean { + return data.buffer().indexOf(anrByteString) >= 0 + } + + override fun observer(): ILogcatChecker.ILogcatCheckObserver { + return AnrLogcatObserver() + } +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/block/IMoGoBlockProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/block/IMoGoBlockProvider.kt index ebd2cfe599..2763a36cb5 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/block/IMoGoBlockProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/block/IMoGoBlockProvider.kt @@ -25,4 +25,6 @@ interface IMoGoBlockProvider { fun stop() fun recorder(): IMessageRecorder + + fun dump(extra: Map>? = null) } \ No newline at end of file