Merge "Persist data to disk when system shuts down"
This commit is contained in:
committed by
Android (Google) Code Review
commit
eaa672ad0e
@@ -39,7 +39,8 @@ enum DumpReportReason {
|
||||
GET_DATA_CALLED = 4,
|
||||
ADB_DUMP = 5,
|
||||
CONFIG_RESET = 6,
|
||||
STATSCOMPANION_DIED = 7
|
||||
STATSCOMPANION_DIED = 7,
|
||||
TERMINATION_SIGNAL_RECEIVED = 8
|
||||
};
|
||||
|
||||
class StatsLogProcessor : public ConfigListener {
|
||||
|
||||
@@ -867,6 +867,13 @@ void StatsService::Startup() {
|
||||
mConfigManager->Startup();
|
||||
}
|
||||
|
||||
void StatsService::Terminate() {
|
||||
ALOGI("StatsService::Terminating");
|
||||
if (mProcessor != nullptr) {
|
||||
mProcessor->WriteDataToDisk(TERMINATION_SIGNAL_RECEIVED);
|
||||
}
|
||||
}
|
||||
|
||||
void StatsService::OnLogEvent(LogEvent* event) {
|
||||
mProcessor->OnLogEvent(event);
|
||||
if (mShellSubscriber != nullptr) {
|
||||
|
||||
@@ -83,6 +83,11 @@ public:
|
||||
*/
|
||||
void Startup();
|
||||
|
||||
/**
|
||||
* Called when terminiation signal received.
|
||||
*/
|
||||
void Terminate();
|
||||
|
||||
/**
|
||||
* Called by LogReader when there's a log event to process.
|
||||
*/
|
||||
|
||||
@@ -46,6 +46,27 @@ struct log_reader_thread_data {
|
||||
sp<StatsService> service;
|
||||
};
|
||||
|
||||
|
||||
sp<StatsService> gStatsService = nullptr;
|
||||
|
||||
void sigHandler(int sig) {
|
||||
if (gStatsService != nullptr) {
|
||||
gStatsService->Terminate();
|
||||
}
|
||||
}
|
||||
|
||||
void registerSigHandler()
|
||||
{
|
||||
struct sigaction sa;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = 0;
|
||||
sa.sa_handler = sigHandler;
|
||||
sigaction(SIGHUP, &sa, nullptr);
|
||||
sigaction(SIGINT, &sa, nullptr);
|
||||
sigaction(SIGQUIT, &sa, nullptr);
|
||||
sigaction(SIGTERM, &sa, nullptr);
|
||||
}
|
||||
|
||||
int main(int /*argc*/, char** /*argv*/) {
|
||||
// Set up the looper
|
||||
sp<Looper> looper(Looper::prepare(0 /* opts */));
|
||||
@@ -60,23 +81,25 @@ int main(int /*argc*/, char** /*argv*/) {
|
||||
::android::hardware::configureRpcThreadpool(1 /*threads*/, false /*willJoin*/);
|
||||
|
||||
// Create the service
|
||||
sp<StatsService> service = new StatsService(looper);
|
||||
if (defaultServiceManager()->addService(String16("stats"), service) != 0) {
|
||||
gStatsService = new StatsService(looper);
|
||||
if (defaultServiceManager()->addService(String16("stats"), gStatsService) != 0) {
|
||||
ALOGE("Failed to add service as AIDL service");
|
||||
return -1;
|
||||
}
|
||||
|
||||
auto ret = service->registerAsService();
|
||||
auto ret = gStatsService->registerAsService();
|
||||
if (ret != ::android::OK) {
|
||||
ALOGE("Failed to add service as HIDL service");
|
||||
return 1; // or handle error
|
||||
}
|
||||
|
||||
service->sayHiToStatsCompanion();
|
||||
registerSigHandler();
|
||||
|
||||
service->Startup();
|
||||
gStatsService->sayHiToStatsCompanion();
|
||||
|
||||
sp<StatsSocketListener> socketListener = new StatsSocketListener(service);
|
||||
gStatsService->Startup();
|
||||
|
||||
sp<StatsSocketListener> socketListener = new StatsSocketListener(gStatsService);
|
||||
|
||||
ALOGI("using statsd socket");
|
||||
// Backlog and /proc/sys/net/unix/max_dgram_qlen set to large value
|
||||
|
||||
@@ -271,6 +271,7 @@ message ConfigMetricsReport {
|
||||
ADB_DUMP = 5;
|
||||
CONFIG_RESET = 6;
|
||||
STATSCOMPANION_DIED = 7;
|
||||
TERMINATION_SIGNAL_RECEIVED = 8;
|
||||
}
|
||||
optional DumpReportReason dump_report_reason = 8;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user