Merge changes I3f912418,Idd2465d5 into rvc-dev

* changes:
  Send boot completed to statsd
  Send puller registration signal to statsd
This commit is contained in:
Jeffrey Huang
2020-04-10 18:38:00 +00:00
committed by Android (Google) Code Review
6 changed files with 88 additions and 4 deletions

View File

@@ -30,6 +30,11 @@ interface IStatsd {
*/
oneway void systemRunning();
/**
* Tell the stats daemon that the android system has finished booting.
*/
oneway void bootCompleted();
/**
* Tell the stats daemon that the StatsCompanionService is up and running.
* Two-way binder call so that caller knows message received.
@@ -182,10 +187,15 @@ interface IStatsd {
*/
void sendAppBreadcrumbAtom(int label, int state);
/**
* Registers a puller callback function that, when invoked, pulls the data
* for the specified atom tag.
*/
/**
* Tell the stats daemon that all the pullers registered during boot have been sent.
*/
oneway void allPullersFromBootRegistered();
/**
* Registers a puller callback function that, when invoked, pulls the data
* for the specified atom tag.
*/
oneway void registerPullAtomCallback(int uid, int atomTag, long coolDownMillis,
long timeoutMillis,in int[] additiveFields,
IPullAtomCallback pullerCallback);

View File

@@ -87,6 +87,9 @@ public class StatsCompanion {
if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
mStatsCompanionService.systemReady();
}
if (phase == PHASE_BOOT_COMPLETED) {
mStatsCompanionService.bootCompleted();
}
}
}

View File

@@ -112,6 +112,18 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
private final HashMap<Long, String> mDeletedFiles = new HashMap<>();
private final CompanionHandler mHandler;
// Flag that is set when PHASE_BOOT_COMPLETED is triggered in the StatsCompanion lifecycle. This
// and the flag mSentBootComplete below is used for synchronization to ensure that the boot
// complete signal is only ever sent once to statsd. Two signals are needed because
// #sayHiToStatsd can be called from both statsd and #onBootPhase
// PHASE_THIRD_PARTY_APPS_CAN_START.
@GuardedBy("sStatsdLock")
private boolean mBootCompleted = false;
// Flag that is set when IStatsd#bootCompleted is called. This flag ensures that boot complete
// signal is only ever sent once.
@GuardedBy("sStatsdLock")
private boolean mSentBootComplete = false;
public StatsCompanionService(Context context) {
super();
mContext = context;
@@ -688,6 +700,19 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver));
final long token = Binder.clearCallingIdentity();
// Used so we can call statsd.bootComplete() outside of the lock.
boolean shouldSendBootComplete = false;
synchronized (sStatsdLock) {
if (mBootCompleted && !mSentBootComplete) {
mSentBootComplete = true;
shouldSendBootComplete = true;
}
}
if (shouldSendBootComplete) {
statsd.bootCompleted();
}
try {
// Pull the latest state of UID->app name, version mapping when
// statsd starts.
@@ -749,6 +774,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
mContext.unregisterReceiver(receiver);
}
statsdNotReadyLocked();
mSentBootComplete = false;
}
}
}
@@ -758,6 +784,28 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
mStatsManagerService.statsdNotReady();
}
void bootCompleted() {
IStatsd statsd = getStatsdNonblocking();
synchronized (sStatsdLock) {
mBootCompleted = true;
if (mSentBootComplete) {
// do not send a boot complete a second time.
return;
}
if (statsd == null) {
// Statsd is not yet ready.
// Delay the boot completed ping to {@link #sayHiToStatsd()}
return;
}
mSentBootComplete = true;
}
try {
statsd.bootCompleted();
} catch (RemoteException e) {
Log.e(TAG, "Failed to notify statsd that boot completed");
}
}
@Override
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)

View File

@@ -600,6 +600,7 @@ public class StatsManagerService extends IStatsManagerService.Stub {
statsd.registerPullAtomCallback(key.getUid(), key.getAtom(), value.getCoolDownMillis(),
value.getTimeoutMillis(), value.getAdditiveFields(), value.getCallback());
}
statsd.allPullersFromBootRegistered();
}
// Pre-condition: the Binder calling identity has already been cleared

View File

@@ -1054,6 +1054,14 @@ Status StatsService::statsCompanionReady() {
return Status::ok();
}
Status StatsService::bootCompleted() {
ENFORCE_UID(AID_SYSTEM);
VLOG("StatsService::bootCompleted was called");
return Status::ok();
}
void StatsService::Startup() {
mConfigManager->Startup();
mProcessor->LoadActiveConfigsFromDisk();
@@ -1215,6 +1223,14 @@ Status StatsService::sendAppBreadcrumbAtom(int32_t label, int32_t state) {
return Status::ok();
}
Status StatsService::allPullersFromBootRegistered() {
ENFORCE_UID(AID_SYSTEM);
VLOG("StatsService::allPullersFromBootRegistered was called");
return Status::ok();
}
Status StatsService::registerPullAtomCallback(int32_t uid, int32_t atomTag, int64_t coolDownMillis,
int64_t timeoutMillis,
const std::vector<int32_t>& additiveFields,

View File

@@ -64,6 +64,7 @@ public:
virtual Status systemRunning();
virtual Status statsCompanionReady();
virtual Status bootCompleted();
virtual Status informAnomalyAlarmFired();
virtual Status informPollAlarmFired();
virtual Status informAlarmForSubscriberTriggeringFired();
@@ -164,6 +165,11 @@ public:
*/
virtual Status sendAppBreadcrumbAtom(int32_t label, int32_t state) override;
/**
* Binder call to notify statsd that all pullers from boot have been registered.
*/
virtual Status allPullersFromBootRegistered();
/**
* Binder call to register a callback function for a pulled atom.
*/