Merge "Add Socket tagging for granular data accounting."

This commit is contained in:
Jeff Sharkey
2011-05-13 18:51:36 -07:00
committed by Android (Google) Code Review
2 changed files with 64 additions and 4 deletions

View File

@@ -10951,6 +10951,7 @@ package android.net {
public class TrafficStats {
ctor public TrafficStats();
method public static void clearThreadStatsTag();
method public static long getMobileRxBytes();
method public static long getMobileRxPackets();
method public static long getMobileTxBytes();
@@ -10971,6 +10972,9 @@ package android.net {
method public static long getUidUdpRxPackets(int);
method public static long getUidUdpTxBytes(int);
method public static long getUidUdpTxPackets(int);
method public static void setThreadStatsTag(java.lang.String);
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
field public static final int UNSUPPORTED = -1; // 0xffffffff
}

View File

@@ -16,11 +16,10 @@
package android.net;
import android.util.Log;
import dalvik.system.BlockGuard;
import java.io.File;
import java.io.RandomAccessFile;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
/**
* Class that provides network traffic statistics. These statistics include
@@ -36,6 +35,63 @@ public class TrafficStats {
*/
public final static int UNSUPPORTED = -1;
/**
* Set active tag to use when accounting {@link Socket} traffic originating
* from the current thread. Only one active tag per thread is supported.
* <p>
* Changes only take effect during subsequent calls to
* {@link #tagSocket(Socket)}.
*/
public static void setThreadStatsTag(String tag) {
BlockGuard.setThreadSocketStatsTag(tag);
}
public static void clearThreadStatsTag() {
BlockGuard.setThreadSocketStatsTag(null);
}
/**
* Set specific UID to use when accounting {@link Socket} traffic
* originating from the current thread. Designed for use when performing an
* operation on behalf of another application.
* <p>
* Changes only take effect during subsequent calls to
* {@link #tagSocket(Socket)}.
* <p>
* To take effect, caller must hold
* {@link android.Manifest.permission#UPDATE_DEVICE_STATS} permission.
*
* {@hide}
*/
public static void setThreadStatsUid(int uid) {
BlockGuard.setThreadSocketStatsUid(uid);
}
/** {@hide} */
public static void clearThreadStatsUid() {
BlockGuard.setThreadSocketStatsUid(-1);
}
/**
* Tag the given {@link Socket} with any statistics parameters active for
* the current thread. Subsequent calls always replace any existing
* parameters. When finished, call {@link #untagSocket(Socket)} to remove
* statistics parameters.
*
* @see #setThreadStatsTag(String)
* @see #setThreadStatsUid(int)
*/
public static void tagSocket(Socket socket) throws SocketException {
BlockGuard.tagSocketFd(socket.getFileDescriptor$());
}
/**
* Remove any statistics parameters from the given {@link Socket}.
*/
public static void untagSocket(Socket socket) throws SocketException {
BlockGuard.untagSocketFd(socket.getFileDescriptor$());
}
/**
* Get the total number of packets transmitted through the mobile interface.
*