From a685872bb213ca503583606d1cea5a5c88887fb1 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 23 Nov 2023 15:20:02 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.0][=E6=8A=80=E6=9C=AF=E4=BC=98=E5=8C=96]?= =?UTF-8?q?=20=E5=8F=AA=E8=AE=B0=E5=BD=95=E7=BA=BF=E7=A8=8BCPU=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=97=B6=E9=95=BFTOP50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../perf/MoGoCpuUsageProviderImpl.kt | 32 +++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/config.gradle b/config.gradle index 1b6257f0ef..5fbbb59fca 100644 --- a/config.gradle +++ b/config.gradle @@ -228,7 +228,7 @@ ext { passport_secret : "com.zhidaoauto:sdk-java:1.0.5-SNAPSHOT", // 主线程卡顿监测 - block_detector : "com.mogo.eagle.core.block:runtime:10.60.0", + block_detector : "com.mogo.eagle.core.block:runtime:10.80.0", //======================== google auto-service =============== google_auto_service : "com.google.auto.service:auto-service:1.0-rc7", diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/perf/MoGoCpuUsageProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/perf/MoGoCpuUsageProviderImpl.kt index 7fbe285425..5a8dedf7f8 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/perf/MoGoCpuUsageProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/perf/MoGoCpuUsageProviderImpl.kt @@ -15,7 +15,7 @@ internal class MoGoCpuUsageProviderImpl: IMoGoCpuUsageProvider { private var mainThreadCpuUsage: Long = 0L - private val maxSize = 500 + private val maxSize = 50 // 取top50的线程占用 private val map = LinkedHashMap(0, 0.75f, true) @@ -23,16 +23,16 @@ internal class MoGoCpuUsageProviderImpl: IMoGoCpuUsageProvider { private val builder = ThreadLocal() - private val otherThreadLastTime = ThreadLocal() + private val otherThreadLaunchedTime = ThreadLocal() private val mainLooper = Looper.getMainLooper() override fun onProcessLaunched() { - processLaunchTime = SystemClock.elapsedRealtime() + processLaunchTime = SystemClock.elapsedRealtimeNanos() } override fun onMainThreadLaunched() { - mainThreadStartTime = Debug.threadCpuTimeNanos() / 1000_000 + mainThreadStartTime = Debug.threadCpuTimeNanos() } override fun updateMainThreadTime() { @@ -40,20 +40,23 @@ internal class MoGoCpuUsageProviderImpl: IMoGoCpuUsageProvider { return } if (mainThreadStartTime > 0) { - mainThreadCpuUsage = (Debug.threadCpuTimeNanos() / 1000_000 - mainThreadStartTime) + val dur = Debug.threadCpuTimeNanos() - mainThreadStartTime + if (dur > 0) { + mainThreadCpuUsage = dur + } } } override fun updateOtherThreadTime() { - var last = otherThreadLastTime.get() - val now = Debug.threadCpuTimeNanos() / 1000_000 + val last = otherThreadLaunchedTime.get() + val now = Debug.threadCpuTimeNanos() try { if (last == null) { - last = now - otherThreadLastTime.set(last) + otherThreadLaunchedTime.set(now) + return } val duration = now - last - if (duration < 1) { + if (duration <= 10000) { return } var builder = builder.get() @@ -66,14 +69,15 @@ internal class MoGoCpuUsageProviderImpl: IMoGoCpuUsageProvider { } builder.append(Thread.currentThread().name) lock.withLock { - while (map.size > maxSize) { + while (map.size >= maxSize) { val toEvict = map.entries.iterator().next() map.remove(toEvict.key) } - map[builder.toString()] = map.getOrPut(builder.toString()) { 0 } + duration + val key = builder.toString() + map[key] = map.getOrPut(key) { 0L } + duration } } finally { - otherThreadLastTime.set(now) + otherThreadLaunchedTime.set(now) } } @@ -83,7 +87,7 @@ internal class MoGoCpuUsageProviderImpl: IMoGoCpuUsageProvider { val iterator = map.entries.iterator() val rst = LinkedHashMap() rst["MainThreadUsage"] = mainThreadCpuUsage - rst["ProcessUsage"] = SystemClock.elapsedRealtime() - processLaunchTime + rst["ProcessUsage"] = SystemClock.elapsedRealtimeNanos() - processLaunchTime while (iterator.hasNext()) { val next = iterator.next() rst[next.key] = next.value