<lambda>null1package leakcanary.internal 2 3 import android.content.Context 4 import androidx.work.ForegroundInfo 5 import androidx.work.WorkerParameters 6 import androidx.work.impl.utils.futures.SettableFuture 7 import androidx.work.multiprocess.RemoteListenableWorker 8 import com.google.common.util.concurrent.ListenableFuture 9 import leakcanary.BackgroundThreadHeapAnalyzer.heapAnalyzerThreadHandler 10 import leakcanary.EventListener.Event.HeapDump 11 import leakcanary.internal.HeapAnalyzerWorker.Companion.asEvent 12 import leakcanary.internal.HeapAnalyzerWorker.Companion.heapAnalysisForegroundInfoAsync 13 import shark.SharkLog 14 15 internal class RemoteHeapAnalyzerWorker(appContext: Context, workerParams: WorkerParameters) : 16 RemoteListenableWorker(appContext, workerParams) { 17 18 override fun startRemoteWork(): ListenableFuture<Result> { 19 val heapDump = inputData.asEvent<HeapDump>() 20 val result = SettableFuture.create<Result>() 21 heapAnalyzerThreadHandler.post { 22 val doneEvent = AndroidDebugHeapAnalyzer.runAnalysisBlocking(heapDump, isCanceled = { 23 result.isCancelled 24 }) { progressEvent -> 25 if (!result.isCancelled) { 26 InternalLeakCanary.sendEvent(progressEvent) 27 } 28 } 29 if (result.isCancelled) { 30 SharkLog.d { "Remote heap analysis for ${heapDump.file} was canceled" } 31 } else { 32 InternalLeakCanary.sendEvent(doneEvent) 33 result.set(Result.success()) 34 } 35 } 36 return result 37 } 38 39 override fun getForegroundInfoAsync(): ListenableFuture<ForegroundInfo> { 40 return applicationContext.heapAnalysisForegroundInfoAsync() 41 } 42 } 43