
com.segment.analytics.Stats Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of analytics Show documentation
Show all versions of analytics Show documentation
The hassle-free way to add analytics to your Android app.
package com.segment.analytics;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Pair;
import com.segment.analytics.internal.Utils;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
class Stats {
private static final String STATS_THREAD_NAME = Utils.THREAD_PREFIX + "Stats";
final HandlerThread statsThread;
final StatsHandler handler;
long flushCount;
long flushEventCount;
long integrationOperationCount;
long integrationOperationDuration;
Map integrationOperationDurationByIntegration = new HashMap<>();
Stats() {
statsThread = new HandlerThread(STATS_THREAD_NAME, THREAD_PRIORITY_BACKGROUND);
statsThread.start();
handler = new StatsHandler(statsThread.getLooper(), this);
}
void shutdown() {
statsThread.quit();
}
void dispatchFlush(int eventCount) {
handler.sendMessage(handler //
.obtainMessage(StatsHandler.TRACK_FLUSH, eventCount, 0));
}
void performFlush(int eventCount) {
flushCount++;
flushEventCount += eventCount;
}
void dispatchIntegrationOperation(String key, long duration) {
handler.sendMessage(handler //
.obtainMessage(StatsHandler.TRACK_INTEGRATION_OPERATION, new Pair<>(key, duration)));
}
void performIntegrationOperation(Pair durationForIntegration) {
integrationOperationCount++;
integrationOperationDuration += durationForIntegration.second;
Long duration = integrationOperationDurationByIntegration.get(durationForIntegration.first);
if (duration == null) {
integrationOperationDurationByIntegration.put(durationForIntegration.first,
durationForIntegration.second);
} else {
integrationOperationDurationByIntegration.put(durationForIntegration.first,
duration + durationForIntegration.second);
}
}
StatsSnapshot createSnapshot() {
return new StatsSnapshot(System.currentTimeMillis(), flushCount, flushEventCount,
integrationOperationCount, integrationOperationDuration,
Collections.unmodifiableMap(integrationOperationDurationByIntegration));
}
private static class StatsHandler extends Handler {
private static final int TRACK_FLUSH = 1;
private static final int TRACK_INTEGRATION_OPERATION = 2;
private final Stats stats;
StatsHandler(Looper looper, Stats stats) {
super(looper);
this.stats = stats;
}
@Override public void handleMessage(final Message msg) {
switch (msg.what) {
case TRACK_FLUSH:
stats.performFlush(msg.arg1);
break;
case TRACK_INTEGRATION_OPERATION:
//noinspection unchecked
stats.performIntegrationOperation((Pair) msg.obj);
break;
default:
throw new AssertionError("Unknown Stats handler message: " + msg);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy