| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package android.net; |
| |
| import com.google.caliper.BeforeExperiment; |
| import com.google.caliper.Param; |
| |
| public class NetworkStatsBenchmark { |
| private static final String UNDERLYING_IFACE = "wlan0"; |
| private static final String TUN_IFACE = "tun0"; |
| private static final int TUN_UID = 999999999; |
| |
| @Param({"100", "1000"}) |
| private int mSize; |
| private NetworkStats mNetworkStats; |
| |
| @BeforeExperiment |
| protected void setUp() throws Exception { |
| mNetworkStats = new NetworkStats(0, mSize + 2); |
| int uid = 0; |
| NetworkStats.Entry recycle = new NetworkStats.Entry(); |
| for (int i = 0; i < mSize; i++) { |
| recycle.iface = (i < mSize / 2) ? TUN_IFACE : UNDERLYING_IFACE; |
| recycle.uid = uid; |
| recycle.set = i % 2; |
| recycle.tag = NetworkStats.TAG_NONE; |
| recycle.rxBytes = 60000; |
| recycle.rxPackets = 60; |
| recycle.txBytes = 150000; |
| recycle.txPackets = 1500; |
| recycle.operations = 0; |
| mNetworkStats.addValues(recycle); |
| if (recycle.set == 1) { |
| uid++; |
| } |
| } |
| recycle.iface = UNDERLYING_IFACE; |
| recycle.uid = TUN_UID; |
| recycle.set = NetworkStats.SET_FOREGROUND; |
| recycle.tag = NetworkStats.TAG_NONE; |
| recycle.rxBytes = 90000 * mSize; |
| recycle.rxPackets = 40 * mSize; |
| recycle.txBytes = 180000 * mSize; |
| recycle.txPackets = 1200 * mSize; |
| recycle.operations = 0; |
| mNetworkStats.addValues(recycle); |
| } |
| |
| public void timeMigrateTun(int reps) { |
| for (int i = 0; i < reps; i++) { |
| NetworkStats stats = mNetworkStats.clone(); |
| stats.migrateTun(TUN_UID, TUN_IFACE, UNDERLYING_IFACE); |
| } |
| } |
| |
| /** |
| * Since timeMigrateTun() includes a clone() call on the NetworkStats object, |
| * we need to measure the cost of the clone() call itself in order to get more |
| * accurate measurement on the migrateTun() method. |
| */ |
| public void timeClone(int reps) { |
| for (int i = 0; i < reps; i++) { |
| NetworkStats stats = mNetworkStats.clone(); |
| } |
| } |
| } |