Merge changes I3f912418,Idd2465d5 into rvc-dev
* changes: Send boot completed to statsd Send puller registration signal to statsd
This commit is contained in:
committed by
Android (Google) Code Review
commit
b010fc5534
@@ -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);
|
||||
|
||||
@@ -87,6 +87,9 @@ public class StatsCompanion {
|
||||
if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
|
||||
mStatsCompanionService.systemReady();
|
||||
}
|
||||
if (phase == PHASE_BOOT_COMPLETED) {
|
||||
mStatsCompanionService.bootCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user