Merge changes I3f912418,Idd2465d5 into rvc-dev am: b010fc5534 am: 50c05bdbf7
Change-Id: I0be54e258a541d2e0b1c650939ba957a595f8499
This commit is contained in:
@@ -30,6 +30,11 @@ interface IStatsd {
|
|||||||
*/
|
*/
|
||||||
oneway void systemRunning();
|
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.
|
* Tell the stats daemon that the StatsCompanionService is up and running.
|
||||||
* Two-way binder call so that caller knows message received.
|
* Two-way binder call so that caller knows message received.
|
||||||
@@ -182,10 +187,15 @@ interface IStatsd {
|
|||||||
*/
|
*/
|
||||||
void sendAppBreadcrumbAtom(int label, int state);
|
void sendAppBreadcrumbAtom(int label, int state);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a puller callback function that, when invoked, pulls the data
|
* Tell the stats daemon that all the pullers registered during boot have been sent.
|
||||||
* for the specified atom tag.
|
*/
|
||||||
*/
|
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,
|
oneway void registerPullAtomCallback(int uid, int atomTag, long coolDownMillis,
|
||||||
long timeoutMillis,in int[] additiveFields,
|
long timeoutMillis,in int[] additiveFields,
|
||||||
IPullAtomCallback pullerCallback);
|
IPullAtomCallback pullerCallback);
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ public class StatsCompanion {
|
|||||||
if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
|
if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
|
||||||
mStatsCompanionService.systemReady();
|
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 HashMap<Long, String> mDeletedFiles = new HashMap<>();
|
||||||
private final CompanionHandler mHandler;
|
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) {
|
public StatsCompanionService(Context context) {
|
||||||
super();
|
super();
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -688,6 +700,19 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
|||||||
List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver));
|
List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver));
|
||||||
|
|
||||||
final long token = Binder.clearCallingIdentity();
|
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 {
|
try {
|
||||||
// Pull the latest state of UID->app name, version mapping when
|
// Pull the latest state of UID->app name, version mapping when
|
||||||
// statsd starts.
|
// statsd starts.
|
||||||
@@ -749,6 +774,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
|||||||
mContext.unregisterReceiver(receiver);
|
mContext.unregisterReceiver(receiver);
|
||||||
}
|
}
|
||||||
statsdNotReadyLocked();
|
statsdNotReadyLocked();
|
||||||
|
mSentBootComplete = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -758,6 +784,28 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
|||||||
mStatsManagerService.statsdNotReady();
|
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
|
@Override
|
||||||
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
|
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
|
||||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
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(),
|
statsd.registerPullAtomCallback(key.getUid(), key.getAtom(), value.getCoolDownMillis(),
|
||||||
value.getTimeoutMillis(), value.getAdditiveFields(), value.getCallback());
|
value.getTimeoutMillis(), value.getAdditiveFields(), value.getCallback());
|
||||||
}
|
}
|
||||||
|
statsd.allPullersFromBootRegistered();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre-condition: the Binder calling identity has already been cleared
|
// Pre-condition: the Binder calling identity has already been cleared
|
||||||
|
|||||||
@@ -1054,6 +1054,14 @@ Status StatsService::statsCompanionReady() {
|
|||||||
return Status::ok();
|
return Status::ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status StatsService::bootCompleted() {
|
||||||
|
ENFORCE_UID(AID_SYSTEM);
|
||||||
|
|
||||||
|
VLOG("StatsService::bootCompleted was called");
|
||||||
|
|
||||||
|
return Status::ok();
|
||||||
|
}
|
||||||
|
|
||||||
void StatsService::Startup() {
|
void StatsService::Startup() {
|
||||||
mConfigManager->Startup();
|
mConfigManager->Startup();
|
||||||
mProcessor->LoadActiveConfigsFromDisk();
|
mProcessor->LoadActiveConfigsFromDisk();
|
||||||
@@ -1205,6 +1213,14 @@ Status StatsService::sendAppBreadcrumbAtom(int32_t label, int32_t state) {
|
|||||||
return Status::ok();
|
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,
|
Status StatsService::registerPullAtomCallback(int32_t uid, int32_t atomTag, int64_t coolDownMillis,
|
||||||
int64_t timeoutMillis,
|
int64_t timeoutMillis,
|
||||||
const std::vector<int32_t>& additiveFields,
|
const std::vector<int32_t>& additiveFields,
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public:
|
|||||||
|
|
||||||
virtual Status systemRunning();
|
virtual Status systemRunning();
|
||||||
virtual Status statsCompanionReady();
|
virtual Status statsCompanionReady();
|
||||||
|
virtual Status bootCompleted();
|
||||||
virtual Status informAnomalyAlarmFired();
|
virtual Status informAnomalyAlarmFired();
|
||||||
virtual Status informPollAlarmFired();
|
virtual Status informPollAlarmFired();
|
||||||
virtual Status informAlarmForSubscriberTriggeringFired();
|
virtual Status informAlarmForSubscriberTriggeringFired();
|
||||||
@@ -164,6 +165,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual Status sendAppBreadcrumbAtom(int32_t label, int32_t state) override;
|
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.
|
* Binder call to register a callback function for a pulled atom.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user