Merge "Statsd update for native puller api feedback" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-21 03:15:06 +00:00
committed by Android (Google) Code Review
7 changed files with 52 additions and 54 deletions

View File

@@ -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);
/** /**

View File

@@ -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

View File

@@ -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);
} }

View File

@@ -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();
} }

View File

@@ -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;
/** /**

View File

@@ -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;
} }

View File

@@ -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}};