50 lines
2.6 KiB
Java
50 lines
2.6 KiB
Java
package com.squareup.leakcanary.internal;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import androidx.core.content.ContextCompat;
|
|
import com.squareup.leakcanary.AbstractAnalysisResultService;
|
|
import com.squareup.leakcanary.AnalyzerProgressListener;
|
|
import com.squareup.leakcanary.CanaryLog;
|
|
import com.squareup.leakcanary.HeapAnalyzer;
|
|
import com.squareup.leakcanary.HeapDump;
|
|
import com.squareup.leakcanary.R;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class HeapAnalyzerService extends ForegroundService implements AnalyzerProgressListener {
|
|
private static final String HEAPDUMP_EXTRA = "heapdump_extra";
|
|
private static final String LISTENER_CLASS_EXTRA = "listener_class_extra";
|
|
|
|
public HeapAnalyzerService() {
|
|
super(HeapAnalyzerService.class.getSimpleName(), R.string.leak_canary_notification_analysing);
|
|
}
|
|
|
|
public static void runAnalysis(Context context, HeapDump heapDump, Class<? extends AbstractAnalysisResultService> cls) {
|
|
LeakCanaryInternals.setEnabledBlocking(context, HeapAnalyzerService.class, true);
|
|
LeakCanaryInternals.setEnabledBlocking(context, cls, true);
|
|
Intent intent = new Intent(context, (Class<?>) HeapAnalyzerService.class);
|
|
intent.putExtra(LISTENER_CLASS_EXTRA, cls.getName());
|
|
intent.putExtra(HEAPDUMP_EXTRA, heapDump);
|
|
ContextCompat.a(context, intent);
|
|
}
|
|
|
|
@Override // com.squareup.leakcanary.internal.ForegroundService
|
|
protected void onHandleIntentInForeground(Intent intent) {
|
|
if (intent == null) {
|
|
CanaryLog.d("HeapAnalyzerService received a null intent, ignoring.", new Object[0]);
|
|
return;
|
|
}
|
|
String stringExtra = intent.getStringExtra(LISTENER_CLASS_EXTRA);
|
|
HeapDump heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA);
|
|
AbstractAnalysisResultService.sendResultToListener(this, stringExtra, heapDump, new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses).checkForLeak(heapDump.heapDumpFile, heapDump.referenceKey, heapDump.computeRetainedHeapSize));
|
|
}
|
|
|
|
@Override // com.squareup.leakcanary.AnalyzerProgressListener
|
|
public void onProgressUpdate(AnalyzerProgressListener.Step step) {
|
|
int ordinal = (int) ((step.ordinal() * 100.0f) / AnalyzerProgressListener.Step.values().length);
|
|
CanaryLog.d("Analysis in progress, working on: %s", step.name());
|
|
String lowerCase = step.name().replace("_", " ").toLowerCase();
|
|
showForegroundNotification(100, ordinal, false, lowerCase.substring(0, 1).toUpperCase() + lowerCase.substring(1));
|
|
}
|
|
}
|