| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // 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); |
| } |
| } |
| } |