Merge "Persist data to disk when system shuts down" into pi-dev

am: 29226627d0

Change-Id: I18a5f507f0e50d1212ee40573a3a6a687e5d0052
This commit is contained in:
Jia-yi Chen
2018-11-06 16:52:37 -08:00
committed by android-build-merger
5 changed files with 45 additions and 7 deletions

View File

@@ -40,7 +40,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 {

View File

@@ -881,6 +881,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, bool reconnectionStarts) {
mProcessor->OnLogEvent(event, reconnectionStarts);
}

View File

@@ -73,6 +73,11 @@ public:
*/
void Startup();
/**
* Called when terminiation signal received.
*/
void Terminate();
/**
* Called by LogReader when there's a log event to process.
*/

View File

@@ -96,6 +96,27 @@ static status_t start_log_reader_thread(const sp<StatsService>& service) {
return NO_ERROR;
}
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 */));
@@ -108,21 +129,24 @@ int main(int /*argc*/, char** /*argv*/) {
IPCThreadState::self()->disableBackgroundScheduling(true);
// 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");
return -1;
}
service->sayHiToStatsCompanion();
service->Startup();
registerSigHandler();
sp<StatsSocketListener> socketListener = new StatsSocketListener(service);
gStatsService->sayHiToStatsCompanion();
gStatsService->Startup();
sp<StatsSocketListener> socketListener = new StatsSocketListener(gStatsService);
if (kUseLogd) {
ALOGI("using logd");
// Start the log reader thread
status_t err = start_log_reader_thread(service);
status_t err = start_log_reader_thread(gStatsService);
if (err != NO_ERROR) {
return 1;
}

View File

@@ -265,6 +265,7 @@ message ConfigMetricsReport {
ADB_DUMP = 5;
CONFIG_RESET = 6;
STATSCOMPANION_DIED = 7;
TERMINATION_SIGNAL_RECEIVED = 8;
}
optional DumpReportReason dump_report_reason = 8;