package com.frogermcs.androiddevmetrics.internal;
import com.frogermcs.androiddevmetrics.aspect.ActivityLifecycleAnalyzer;
import com.frogermcs.androiddevmetrics.internal.metrics.ActivityLifecycleMetrics;
import com.frogermcs.androiddevmetrics.internal.metrics.model.FpsDropMetric;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Miroslaw Stanek on 22.02.2016.
*/
public class ActivityMetricDescription {
public String activityName;
public String activitySimpleName;
public int instancesCount;
public int frameDropsCount;
public float fpsDropsSum;
public long activityLayoutTimeMillis;
public long activityCreateMillis;
public long activityStartMillis;
public long activityResumeMillis;
public boolean isLauncherActivity;
public boolean hasOnCreateImplemented;
public boolean hasOnStartImplemented;
public boolean hasOnResumeImplemented;
public static ActivityMetricDescription initFrom(ActivityLifecycleMetrics.ActivityLifecycleMetric activityMetrics) {
ActivityMetricDescription activityMetricDescription = new ActivityMetricDescription();
activityMetricDescription.activityName = activityMetrics.activityClass.getName();
activityMetricDescription.activitySimpleName = activityMetrics.activityClass.getSimpleName();
activityMetricDescription.instancesCount = 1;
activityMetricDescription.frameDropsCount = 0;
activityMetricDescription.fpsDropsSum = 0;
activityMetricDescription.isLauncherActivity = activityMetrics.isFirstActivity;
activityMetricDescription.activityLayoutTimeMillis = activityMetrics.visibleTimeMillis();
activityMetricDescription.activityCreateMillis = activityMetrics.createTimeMillis();
activityMetricDescription.activityStartMillis = activityMetrics.startTimeMillis();
activityMetricDescription.activityResumeMillis = activityMetrics.resumeTimeMillis();
activityMetricDescription.hasOnCreateImplemented = activityMetrics.hasOnCreateImplemented;
activityMetricDescription.hasOnStartImplemented = activityMetrics.hasOnStartImplemented;
activityMetricDescription.hasOnResumeImplemented = activityMetrics.hasOnResumeImplemented;
return activityMetricDescription;
}
public void updateWith(ActivityLifecycleMetrics.ActivityLifecycleMetric activityMetrics) {
activityLayoutTimeMillis = ((activityLayoutTimeMillis * instancesCount) + activityMetrics.visibleTimeMillis()) / (instancesCount + 1);
activityCreateMillis = ((activityCreateMillis * instancesCount) + activityMetrics.createTimeMillis()) / (instancesCount + 1);
activityStartMillis = ((activityStartMillis * instancesCount) + activityMetrics.startTimeMillis()) / (instancesCount + 1);
activityResumeMillis = ((activityResumeMillis * instancesCount) + activityMetrics.resumeTimeMillis()) / (instancesCount + 1);
instancesCount++;
}
public void updateWith(FpsDropMetric fpsDropMetric) {
frameDropsCount += fpsDropMetric.dropsCount;
fpsDropsSum += fpsDropMetric.averageFps * fpsDropMetric.dropsCount;
}
public long getOverallTimeMillis() {
return activityLayoutTimeMillis + activityCreateMillis + activityStartMillis + activityResumeMillis;
}
public float getAverageFps() {
return fpsDropsSum / frameDropsCount;
}
public String[] getImplementedMethods() {
List<String> implementedMethods = new ArrayList<>();
if (hasOnCreateImplemented) implementedMethods.add(ActivityLifecycleAnalyzer.METHOD_ON_CREATE);
if (hasOnStartImplemented) implementedMethods.add(ActivityLifecycleAnalyzer.METHOD_ON_START);
if (hasOnResumeImplemented) implementedMethods.add(ActivityLifecycleAnalyzer.METHOD_ON_RESUME);
String[] implementedMethodsArray = new String[implementedMethods.size()];
implementedMethods.toArray(implementedMethodsArray);
return implementedMethodsArray;
}
}