OSDN Git Service

Check for bpf support at NetworkStatsService start
authorChenbo Feng <fengc@google.com>
Sat, 19 May 2018 00:10:07 +0000 (17:10 -0700)
committerChenbo Feng <fengc@google.com>
Sat, 19 May 2018 00:10:07 +0000 (17:10 -0700)
The current implementation check for bpf map existance whenever a
NetworkStats request comes in. The check is not efficient and may
require additional permission for threads. So a member variable is added
to NetworkStatsService to store the bpf configuration status and is
initialized when NetworkStatsService start.

Test: -m CtsNetTestCases -t android.net.cts.TrafficStatsTest
      -m CtsUsageStatsTestCases -t android.app.usage.cts.NetworkUsageStatsTest
Bug: 79994577

Change-Id: I872ae18fb3e9631a4e6c4d773fefbba32e60a03b

services/core/java/com/android/server/net/NetworkStatsService.java

index 9ef6c66..492c6d6 100644 (file)
@@ -184,6 +184,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
 
     private final PowerManager.WakeLock mWakeLock;
 
+    private final boolean mUseBpfTrafficStats;
+
     private IConnectivityManager mConnManager;
 
     @VisibleForTesting
@@ -347,6 +349,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
         mStatsObservers = checkNotNull(statsObservers, "missing NetworkStatsObservers");
         mSystemDir = checkNotNull(systemDir, "missing systemDir");
         mBaseDir = checkNotNull(baseDir, "missing baseDir");
+        mUseBpfTrafficStats = new File("/sys/fs/bpf/traffic_uid_stats_map").exists();
 
         LocalServices.addService(NetworkStatsManagerInternal.class,
                 new NetworkStatsManagerInternalImpl());
@@ -947,7 +950,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
     }
 
     private boolean checkBpfStatsEnable() {
-        return new File("/sys/fs/bpf/traffic_uid_stats_map").exists();
+        return mUseBpfTrafficStats;
     }
 
     /**