55 lines
2.1 KiB
Java
55 lines
2.1 KiB
Java
// Copyright 2018 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package org.chromium.net;
|
|
|
|
import android.net.TrafficStats;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* Class to wrap TrafficStats.setThreadStatsUid(int uid) and TrafficStats.clearThreadStatsUid()
|
|
* which are hidden and so must be accessed via reflection.
|
|
*/
|
|
public class ThreadStatsUid {
|
|
// Reference to TrafficStats.setThreadStatsUid(int uid).
|
|
private static final Method sSetThreadStatsUid;
|
|
// Reference to TrafficStats.clearThreadStatsUid().
|
|
private static final Method sClearThreadStatsUid;
|
|
|
|
// Get reference to TrafficStats.setThreadStatsUid(int uid) and
|
|
// TrafficStats.clearThreadStatsUid() via reflection.
|
|
static {
|
|
try {
|
|
sSetThreadStatsUid = TrafficStats.class.getMethod("setThreadStatsUid", Integer.TYPE);
|
|
sClearThreadStatsUid = TrafficStats.class.getMethod("clearThreadStatsUid");
|
|
} catch (NoSuchMethodException | SecurityException e) {
|
|
throw new RuntimeException("Unable to get TrafficStats methods", e);
|
|
}
|
|
}
|
|
|
|
/** Calls TrafficStats.setThreadStatsUid(uid) */
|
|
public static void set(int uid) {
|
|
try {
|
|
sSetThreadStatsUid.invoke(null, uid); // Pass null for "this" as it's a static method.
|
|
} catch (IllegalAccessException e) {
|
|
throw new RuntimeException("TrafficStats.setThreadStatsUid failed", e);
|
|
} catch (InvocationTargetException e) {
|
|
throw new RuntimeException("TrafficStats.setThreadStatsUid failed", e);
|
|
}
|
|
}
|
|
|
|
/** Calls TrafficStats.clearThreadStatsUid() */
|
|
public static void clear() {
|
|
try {
|
|
sClearThreadStatsUid.invoke(null); // Pass null for "this" as it's a static method.
|
|
} catch (IllegalAccessException e) {
|
|
throw new RuntimeException("TrafficStats.clearThreadStatsUid failed", e);
|
|
} catch (InvocationTargetException e) {
|
|
throw new RuntimeException("TrafficStats.clearThreadStatsUid failed", e);
|
|
}
|
|
}
|
|
}
|