Merge "Statsd update for native puller api feedback" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1e377304cb
@@ -196,7 +196,7 @@ interface IStatsd {
|
|||||||
*
|
*
|
||||||
* Enforces the REGISTER_STATS_PULL_ATOM permission.
|
* Enforces the REGISTER_STATS_PULL_ATOM permission.
|
||||||
*/
|
*/
|
||||||
oneway void registerNativePullAtomCallback(int atomTag, long coolDownNs, long timeoutNs,
|
oneway void registerNativePullAtomCallback(int atomTag, long coolDownMillis, long timeoutMillis,
|
||||||
in int[] additiveFields, IPullAtomCallback pullerCallback);
|
in int[] additiveFields, IPullAtomCallback pullerCallback);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,30 +44,27 @@ static AStatsManager_PullAtomCallbackReturn pullAtomCallback(int32_t atomTag, AS
|
|||||||
return sPullReturnVal;
|
return sPullReturnVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C" JNIEXPORT void JNICALL
|
||||||
JNIEXPORT void JNICALL
|
Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_setStatsPuller(
|
||||||
Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_registerStatsPuller(
|
JNIEnv* /*env*/, jobject /* this */, jint atomTag, jlong timeoutMillis,
|
||||||
JNIEnv* /*env*/, jobject /* this */, jint atomTag, jlong timeoutNs, jlong coolDownNs,
|
jlong coolDownMillis, jint pullRetVal, jlong latencyMillis, int atomsPerPull) {
|
||||||
jint pullRetVal, jlong latencyMillis, int atomsPerPull)
|
|
||||||
{
|
|
||||||
sAtomTag = atomTag;
|
sAtomTag = atomTag;
|
||||||
sPullReturnVal = pullRetVal;
|
sPullReturnVal = pullRetVal;
|
||||||
sLatencyMillis = latencyMillis;
|
sLatencyMillis = latencyMillis;
|
||||||
sAtomsPerPull = atomsPerPull;
|
sAtomsPerPull = atomsPerPull;
|
||||||
sNumPulls = 0;
|
sNumPulls = 0;
|
||||||
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
|
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
|
||||||
AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, coolDownNs);
|
AStatsManager_PullAtomMetadata_setCoolDownMillis(metadata, coolDownMillis);
|
||||||
AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, timeoutNs);
|
AStatsManager_PullAtomMetadata_setTimeoutMillis(metadata, timeoutMillis);
|
||||||
|
|
||||||
AStatsManager_registerPullAtomCallback(sAtomTag, &pullAtomCallback, metadata, nullptr);
|
AStatsManager_setPullAtomCallback(sAtomTag, metadata, &pullAtomCallback, nullptr);
|
||||||
AStatsManager_PullAtomMetadata_release(metadata);
|
AStatsManager_PullAtomMetadata_release(metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C" JNIEXPORT void JNICALL
|
||||||
JNIEXPORT void JNICALL
|
Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_clearStatsPuller(JNIEnv* /*env*/,
|
||||||
Java_com_android_internal_os_statsd_libstats_LibStatsPullTests_unregisterStatsPuller(
|
jobject /* this */,
|
||||||
JNIEnv* /*env*/, jobject /* this */, jint /*atomTag*/)
|
jint /*atomTag*/) {
|
||||||
{
|
AStatsManager_clearPullAtomCallback(sAtomTag);
|
||||||
AStatsManager_unregisterPullAtomCallback(sAtomTag);
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ public class LibStatsPullTests {
|
|||||||
private static int sPullReturnValue;
|
private static int sPullReturnValue;
|
||||||
private static long sConfigId;
|
private static long sConfigId;
|
||||||
private static long sPullLatencyMillis;
|
private static long sPullLatencyMillis;
|
||||||
private static long sPullTimeoutNs;
|
private static long sPullTimeoutMillis;
|
||||||
private static long sCoolDownNs;
|
private static long sCoolDownMillis;
|
||||||
private static int sAtomsPerPull;
|
private static int sAtomsPerPull;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@@ -75,8 +75,8 @@ public class LibStatsPullTests {
|
|||||||
assertThat(InstrumentationRegistry.getInstrumentation()).isNotNull();
|
assertThat(InstrumentationRegistry.getInstrumentation()).isNotNull();
|
||||||
sPullReturnValue = StatsManager.PULL_SUCCESS;
|
sPullReturnValue = StatsManager.PULL_SUCCESS;
|
||||||
sPullLatencyMillis = 0;
|
sPullLatencyMillis = 0;
|
||||||
sPullTimeoutNs = 10_000_000_000L;
|
sPullTimeoutMillis = 10_000L;
|
||||||
sCoolDownNs = 1_000_000_000L;
|
sCoolDownMillis = 1_000L;
|
||||||
sAtomsPerPull = 1;
|
sAtomsPerPull = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ public class LibStatsPullTests {
|
|||||||
*/
|
*/
|
||||||
@After
|
@After
|
||||||
public void tearDown() throws Exception {
|
public void tearDown() throws Exception {
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
StatsManager statsManager = (StatsManager) mContext.getSystemService(
|
StatsManager statsManager = (StatsManager) mContext.getSystemService(
|
||||||
Context.STATS_MANAGER);
|
Context.STATS_MANAGER);
|
||||||
statsManager.removeConfig(sConfigId);
|
statsManager.removeConfig(sConfigId);
|
||||||
@@ -102,14 +102,14 @@ public class LibStatsPullTests {
|
|||||||
createAndAddConfigToStatsd(statsManager);
|
createAndAddConfigToStatsd(statsManager);
|
||||||
|
|
||||||
// Add the puller.
|
// Add the puller.
|
||||||
registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
|
setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
|
||||||
sPullLatencyMillis, sAtomsPerPull);
|
sPullLatencyMillis, sAtomsPerPull);
|
||||||
Thread.sleep(SHORT_SLEEP_MILLIS);
|
Thread.sleep(SHORT_SLEEP_MILLIS);
|
||||||
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
||||||
// Let the current bucket finish.
|
// Let the current bucket finish.
|
||||||
Thread.sleep(LONG_SLEEP_MILLIS);
|
Thread.sleep(LONG_SLEEP_MILLIS);
|
||||||
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
assertThat(data.size()).isEqualTo(1);
|
assertThat(data.size()).isEqualTo(1);
|
||||||
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
|
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
|
||||||
try {
|
try {
|
||||||
@@ -135,14 +135,14 @@ public class LibStatsPullTests {
|
|||||||
createAndAddConfigToStatsd(statsManager);
|
createAndAddConfigToStatsd(statsManager);
|
||||||
sPullReturnValue = StatsManager.PULL_SKIP;
|
sPullReturnValue = StatsManager.PULL_SKIP;
|
||||||
// Add the puller.
|
// Add the puller.
|
||||||
registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
|
setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
|
||||||
sPullLatencyMillis, sAtomsPerPull);
|
sPullLatencyMillis, sAtomsPerPull);
|
||||||
Thread.sleep(SHORT_SLEEP_MILLIS);
|
Thread.sleep(SHORT_SLEEP_MILLIS);
|
||||||
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
||||||
// Let the current bucket finish.
|
// Let the current bucket finish.
|
||||||
Thread.sleep(LONG_SLEEP_MILLIS);
|
Thread.sleep(LONG_SLEEP_MILLIS);
|
||||||
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
assertThat(data.size()).isEqualTo(0);
|
assertThat(data.size()).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,17 +157,17 @@ public class LibStatsPullTests {
|
|||||||
// The puller will sleep for 1.5 sec.
|
// The puller will sleep for 1.5 sec.
|
||||||
sPullLatencyMillis = 1_500;
|
sPullLatencyMillis = 1_500;
|
||||||
// 1 second timeout
|
// 1 second timeout
|
||||||
sPullTimeoutNs = 1_000_000_000;
|
sPullTimeoutMillis = 1_000;
|
||||||
|
|
||||||
// Add the puller.
|
// Add the puller.
|
||||||
registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
|
setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
|
||||||
sPullLatencyMillis, sAtomsPerPull);
|
sPullLatencyMillis, sAtomsPerPull);
|
||||||
Thread.sleep(SHORT_SLEEP_MILLIS);
|
Thread.sleep(SHORT_SLEEP_MILLIS);
|
||||||
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
||||||
// Let the current bucket finish and the pull timeout.
|
// Let the current bucket finish and the pull timeout.
|
||||||
Thread.sleep(sPullLatencyMillis * 2);
|
Thread.sleep(sPullLatencyMillis * 2);
|
||||||
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
assertThat(data.size()).isEqualTo(0);
|
assertThat(data.size()).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,9 +181,9 @@ public class LibStatsPullTests {
|
|||||||
createAndAddConfigToStatsd(statsManager);
|
createAndAddConfigToStatsd(statsManager);
|
||||||
|
|
||||||
// Set the cooldown to 10 seconds
|
// Set the cooldown to 10 seconds
|
||||||
sCoolDownNs = 10_000_000_000L;
|
sCoolDownMillis = 10_000L;
|
||||||
// Add the puller.
|
// Add the puller.
|
||||||
registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
|
setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
|
||||||
sPullLatencyMillis, sAtomsPerPull);
|
sPullLatencyMillis, sAtomsPerPull);
|
||||||
|
|
||||||
Thread.sleep(SHORT_SLEEP_MILLIS);
|
Thread.sleep(SHORT_SLEEP_MILLIS);
|
||||||
@@ -192,7 +192,7 @@ public class LibStatsPullTests {
|
|||||||
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
StatsLog.logStart(APP_BREADCRUMB_LABEL);
|
||||||
Thread.sleep(LONG_SLEEP_MILLIS);
|
Thread.sleep(LONG_SLEEP_MILLIS);
|
||||||
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
assertThat(data.size()).isEqualTo(2);
|
assertThat(data.size()).isEqualTo(2);
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
|
TestAtoms.PullCallbackAtomWrapper atomWrapper = null;
|
||||||
@@ -221,7 +221,7 @@ public class LibStatsPullTests {
|
|||||||
createAndAddConfigToStatsd(statsManager);
|
createAndAddConfigToStatsd(statsManager);
|
||||||
sAtomsPerPull = 1000;
|
sAtomsPerPull = 1000;
|
||||||
// Add the puller.
|
// Add the puller.
|
||||||
registerStatsPuller(PULL_ATOM_TAG, sPullTimeoutNs, sCoolDownNs, sPullReturnValue,
|
setStatsPuller(PULL_ATOM_TAG, sPullTimeoutMillis, sCoolDownMillis, sPullReturnValue,
|
||||||
sPullLatencyMillis, sAtomsPerPull);
|
sPullLatencyMillis, sAtomsPerPull);
|
||||||
|
|
||||||
Thread.sleep(SHORT_SLEEP_MILLIS);
|
Thread.sleep(SHORT_SLEEP_MILLIS);
|
||||||
@@ -229,7 +229,7 @@ public class LibStatsPullTests {
|
|||||||
// Let the current bucket finish.
|
// Let the current bucket finish.
|
||||||
Thread.sleep(LONG_SLEEP_MILLIS);
|
Thread.sleep(LONG_SLEEP_MILLIS);
|
||||||
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
List<Atom> data = StatsConfigUtils.getGaugeMetricDataList(statsManager, sConfigId);
|
||||||
unregisterStatsPuller(PULL_ATOM_TAG);
|
clearStatsPuller(PULL_ATOM_TAG);
|
||||||
assertThat(data.size()).isEqualTo(sAtomsPerPull);
|
assertThat(data.size()).isEqualTo(sAtomsPerPull);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -276,9 +276,9 @@ public class LibStatsPullTests {
|
|||||||
assertThat(StatsConfigUtils.verifyValidConfigExists(statsManager, sConfigId)).isTrue();
|
assertThat(StatsConfigUtils.verifyValidConfigExists(statsManager, sConfigId)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
private native void registerStatsPuller(int atomTag, long timeoutNs, long coolDownNs,
|
private native void setStatsPuller(int atomTag, long timeoutMillis, long coolDownMillis,
|
||||||
int pullReturnVal, long latencyMillis, int atomPerPull);
|
int pullReturnVal, long latencyMillis, int atomPerPull);
|
||||||
|
|
||||||
private native void unregisterStatsPuller(int atomTag);
|
private native void clearStatsPuller(int atomTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1209,9 +1209,10 @@ Status StatsService::registerPullAtomCallback(int32_t uid, int32_t atomTag, int6
|
|||||||
return Status::ok();
|
return Status::ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
Status StatsService::registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
|
Status StatsService::registerNativePullAtomCallback(
|
||||||
int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
|
int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis,
|
||||||
const shared_ptr<IPullAtomCallback>& pullerCallback) {
|
const std::vector<int32_t>& additiveFields,
|
||||||
|
const shared_ptr<IPullAtomCallback>& pullerCallback) {
|
||||||
if (!checkPermission(kPermissionRegisterPullAtom)) {
|
if (!checkPermission(kPermissionRegisterPullAtom)) {
|
||||||
return exception(
|
return exception(
|
||||||
EX_SECURITY,
|
EX_SECURITY,
|
||||||
@@ -1220,7 +1221,8 @@ Status StatsService::registerNativePullAtomCallback(int32_t atomTag, int64_t coo
|
|||||||
}
|
}
|
||||||
VLOG("StatsService::registerNativePullAtomCallback called.");
|
VLOG("StatsService::registerNativePullAtomCallback called.");
|
||||||
int32_t uid = AIBinder_getCallingUid();
|
int32_t uid = AIBinder_getCallingUid();
|
||||||
mPullerManager->RegisterPullAtomCallback(uid, atomTag, coolDownNs, timeoutNs, additiveFields,
|
mPullerManager->RegisterPullAtomCallback(uid, atomTag, MillisToNano(coolDownMillis),
|
||||||
|
MillisToNano(timeoutMillis), additiveFields,
|
||||||
pullerCallback);
|
pullerCallback);
|
||||||
return Status::ok();
|
return Status::ok();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,8 +175,9 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Binder call to register a callback function for a pulled atom.
|
* Binder call to register a callback function for a pulled atom.
|
||||||
*/
|
*/
|
||||||
virtual Status registerNativePullAtomCallback(int32_t atomTag, int64_t coolDownNs,
|
virtual Status registerNativePullAtomCallback(
|
||||||
int64_t timeoutNs, const std::vector<int32_t>& additiveFields,
|
int32_t atomTag, int64_t coolDownMillis, int64_t timeoutMillis,
|
||||||
|
const std::vector<int32_t>& additiveFields,
|
||||||
const shared_ptr<IPullAtomCallback>& pullerCallback) override;
|
const shared_ptr<IPullAtomCallback>& pullerCallback) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -158,17 +158,17 @@ static AStatsManager_PullAtomCallbackReturn graphicsStatsPullCallback(int32_t at
|
|||||||
static void nativeInit(JNIEnv* env, jobject javaObject) {
|
static void nativeInit(JNIEnv* env, jobject javaObject) {
|
||||||
gGraphicsStatsServiceObject = env->NewGlobalRef(javaObject);
|
gGraphicsStatsServiceObject = env->NewGlobalRef(javaObject);
|
||||||
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
|
AStatsManager_PullAtomMetadata* metadata = AStatsManager_PullAtomMetadata_obtain();
|
||||||
AStatsManager_PullAtomMetadata_setCoolDownNs(metadata, 10 * 1000000); // 10 milliseconds
|
AStatsManager_PullAtomMetadata_setCoolDownMillis(metadata, 10); // 10 milliseconds
|
||||||
AStatsManager_PullAtomMetadata_setTimeoutNs(metadata, 2 * NS_PER_SEC); // 2 seconds
|
AStatsManager_PullAtomMetadata_setTimeoutMillis(metadata, 2 * MS_PER_SEC); // 2 seconds
|
||||||
|
|
||||||
AStatsManager_registerPullAtomCallback(android::util::GRAPHICS_STATS,
|
AStatsManager_setPullAtomCallback(android::util::GRAPHICS_STATS, metadata,
|
||||||
&graphicsStatsPullCallback, metadata, nullptr);
|
&graphicsStatsPullCallback, nullptr);
|
||||||
|
|
||||||
AStatsManager_PullAtomMetadata_release(metadata);
|
AStatsManager_PullAtomMetadata_release(metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nativeDestructor(JNIEnv* env, jobject javaObject) {
|
static void nativeDestructor(JNIEnv* env, jobject javaObject) {
|
||||||
AStatsManager_unregisterPullAtomCallback(android::util::GRAPHICS_STATS);
|
AStatsManager_clearPullAtomCallback(android::util::GRAPHICS_STATS);
|
||||||
env->DeleteGlobalRef(gGraphicsStatsServiceObject);
|
env->DeleteGlobalRef(gGraphicsStatsServiceObject);
|
||||||
gGraphicsStatsServiceObject = nullptr;
|
gGraphicsStatsServiceObject = nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,17 +46,15 @@ static AStatsManager_PullAtomCallbackReturn subsystemSleepStateCallback(int32_t
|
|||||||
static void nativeInit(JNIEnv* env, jobject javaObject) {
|
static void nativeInit(JNIEnv* env, jobject javaObject) {
|
||||||
// on device power measurement
|
// on device power measurement
|
||||||
gPowerStatsPuller = server::stats::PowerStatsPuller();
|
gPowerStatsPuller = server::stats::PowerStatsPuller();
|
||||||
AStatsManager_registerPullAtomCallback(android::util::ON_DEVICE_POWER_MEASUREMENT,
|
AStatsManager_setPullAtomCallback(android::util::ON_DEVICE_POWER_MEASUREMENT,
|
||||||
onDevicePowerMeasurementCallback,
|
/* metadata= */ nullptr, onDevicePowerMeasurementCallback,
|
||||||
/* metadata= */ nullptr,
|
/* cookie= */ nullptr);
|
||||||
/* cookie= */ nullptr);
|
|
||||||
|
|
||||||
// subsystem sleep state
|
// subsystem sleep state
|
||||||
gSubsystemSleepStatePuller = server::stats::SubsystemSleepStatePuller();
|
gSubsystemSleepStatePuller = server::stats::SubsystemSleepStatePuller();
|
||||||
AStatsManager_registerPullAtomCallback(android::util::SUBSYSTEM_SLEEP_STATE,
|
AStatsManager_setPullAtomCallback(android::util::SUBSYSTEM_SLEEP_STATE,
|
||||||
subsystemSleepStateCallback,
|
/* metadata= */ nullptr, subsystemSleepStateCallback,
|
||||||
/* metadata= */ nullptr,
|
/* cookie= */ nullptr);
|
||||||
/* cookie= */ nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const JNINativeMethod sMethods[] = {{"nativeInit", "()V", (void*)nativeInit}};
|
static const JNINativeMethod sMethods[] = {{"nativeInit", "()V", (void*)nativeInit}};
|
||||||
|
|||||||
Reference in New Issue
Block a user