aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Chabot <brettchabot@google.com>2014-08-22 22:08:08 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-22 22:08:09 +0000
commitaf372f5adb59ca6a5b0380e5ee90c5e2d63d72c5 (patch)
tree291b6995a6ea94fe0cfb79754a2e724a38dc0da9
parent94d1a562fafce4db1b2ae4c2a574fc7cd578ed15 (diff)
parent64a618e817812f19da24b6d2fbae5531ed68bbd0 (diff)
downloadtradefederation-af372f5adb59ca6a5b0380e5ee90c5e2d63d72c5.tar.gz
Merge "Switch deviceutilmonitor to use a configurable moving average window."
-rw-r--r--src/com/android/tradefed/device/DeviceUtilStatsMonitor.java37
-rw-r--r--tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorLoadTest.java7
-rw-r--r--tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorTest.java1
3 files changed, 32 insertions, 13 deletions
diff --git a/src/com/android/tradefed/device/DeviceUtilStatsMonitor.java b/src/com/android/tradefed/device/DeviceUtilStatsMonitor.java
index 476f38b14..1dbf1de95 100644
--- a/src/com/android/tradefed/device/DeviceUtilStatsMonitor.java
+++ b/src/com/android/tradefed/device/DeviceUtilStatsMonitor.java
@@ -35,9 +35,7 @@ import java.util.TimerTask;
*/
public class DeviceUtilStatsMonitor implements IDeviceMonitor {
- static final int DEFAULT_MAX_SAMPLES = 24 * 60;
-
- private static final int mInitialDelayMs = 100;
+ private static final int mInitialDelayMs = 5000;
/**
* Enum for configuring treatment of stub devices when calculating average host utilization
@@ -62,6 +60,14 @@ public class DeviceUtilStatsMonitor implements IDeviceMonitor {
"controls if emulator data should be used when calculating avg host utilization")
private StubDeviceUtil mCollectEmulator = StubDeviceUtil.INCLUDE_IF_USED;
+ @Option(name = "sample-window-hours", description =
+ "the moving average window size to use, in hours")
+ private int mSampleWindowHours = 8;
+
+ @Option(name = "sample-interval-secs", description =
+ "the time period between samples, in seconds")
+ private int mSamplingIntervalSec = 60;
+
private boolean mNullDeviceAllocated = false;
private boolean mEmulatorAllocated = false;
@@ -168,11 +174,7 @@ public class DeviceUtilStatsMonitor implements IDeviceMonitor {
}
}
- private int mSamplePeriodMs = 60 * 1000;
-
- // by default, use 24 hour window - calculated by number of measurement interval (1 min) in
- // this window
- private int mMaxSamples = DEFAULT_MAX_SAMPLES;
+ private int mMaxSamples;
/** a map of device serial to device records */
private Map<String, DeviceUtilRecord> mDeviceUtilMap = new Hashtable<>();
@@ -180,7 +182,7 @@ public class DeviceUtilStatsMonitor implements IDeviceMonitor {
private DeviceLister mDeviceLister;
private Timer mTimer;
- SamplingTask mSamplingTask = new SamplingTask();
+ private SamplingTask mSamplingTask = new SamplingTask();
/**
* Get the device utilization up to the last 24 hours
@@ -215,8 +217,9 @@ public class DeviceUtilStatsMonitor implements IDeviceMonitor {
@Override
public void run() {
+ calculateMaxSamples();
mTimer = new Timer();
- mTimer.scheduleAtFixedRate(mSamplingTask, mInitialDelayMs, mSamplePeriodMs);
+ mTimer.scheduleAtFixedRate(mSamplingTask, mInitialDelayMs, mSamplingIntervalSec * 1000);
}
@Override
@@ -289,7 +292,21 @@ public class DeviceUtilStatsMonitor implements IDeviceMonitor {
return mSamplingTask;
}
+ // @VisibleForTesting
+ void calculateMaxSamples() {
+ // find max samples to collect by converting sample window to seconds then divide by
+ // sampling interval
+ mMaxSamples = mSampleWindowHours * 60 * 60 / mSamplingIntervalSec;
+ assert(mMaxSamples > 0);
+ }
+
+ // @VisibleForTesting
void setMaxSamples(int maxSamples) {
mMaxSamples = maxSamples;
}
+
+ // @VisibleForTesting
+ int getMaxSamples() {
+ return mMaxSamples;
+ }
}
diff --git a/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorLoadTest.java b/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorLoadTest.java
index 0538c9193..6d20a2c56 100644
--- a/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorLoadTest.java
+++ b/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorLoadTest.java
@@ -52,6 +52,7 @@ public class DeviceUtilStatsMonitorLoadTest extends TestCase {
return mMockDeviceManager.listAllDevices();
}
});
+ mDeviceUtilMonitor.calculateMaxSamples();
}
/**
@@ -70,12 +71,12 @@ public class DeviceUtilStatsMonitorLoadTest extends TestCase {
EasyMock.expect(mMockDeviceManager.listAllDevices()).andStubReturn(deviceList);
EasyMock.replay(mMockDeviceManager);
- for (int i = 0; i < DeviceUtilStatsMonitor.DEFAULT_MAX_SAMPLES; i++) {
+ for (int i = 0; i < mDeviceUtilMonitor.getMaxSamples(); i++) {
mDeviceUtilMonitor.getSamplingTask().run();
}
- // This takes ~ 5.7 MB in heap if DeviceUtilStatsMonitor uses a LinkedList<Byte> to
+ // This takes ~ 1.9 MB in heap if DeviceUtilStatsMonitor uses a LinkedList<Byte> to
// store samples
- // takes ~ 270K if CircularByteArray is used
+ // takes ~ 65K if CircularByteArray is used
Thread.sleep(5 * 60 * 1000);
}
diff --git a/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorTest.java b/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorTest.java
index bfd953cb6..0ce265211 100644
--- a/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorTest.java
+++ b/tests/src/com/android/tradefed/device/DeviceUtilStatsMonitorTest.java
@@ -49,6 +49,7 @@ public class DeviceUtilStatsMonitorTest extends TestCase {
return mMockDeviceManager.listAllDevices();
}
});
+ mDeviceUtilMonitor.calculateMaxSamples();
}
public void testEmpty() {