main.cpp revision 1754d744a7a34731ffc07af1bc3dbfcb06864ab0
11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/* 21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project 31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License. 61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at 71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software 111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and 141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License. 151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define LOG_TAG "incidentd" 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "IncidentService.h" 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IInterface.h> 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IPCThreadState.h> 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IServiceManager.h> 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/ProcessState.h> 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/Status.h> 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <cutils/log.h> 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/Looper.h> 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/StrongPointer.h> 291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <sys/types.h> 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <sys/stat.h> 321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android; 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoint 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratomain(int /*argc*/, char** /*argv*/) 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Set up the looper 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<Looper> looper(Looper::prepare(0 /* opts */)); 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Set up the binder 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ProcessState> ps(ProcessState::self()); 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ps->setThreadPoolMaxThreadCount(1); // everything is oneway, let it queue and save ram 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ps->startThreadPool(); 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ps->giveThreadPoolName(); 471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato IPCThreadState::self()->disableBackgroundScheduling(true); 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Create the service 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato android::sp<IncidentService> service = new IncidentService(looper); 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (defaultServiceManager()->addService(String16("incident"), service) != 0) { 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ALOGE("Failed to add service"); 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return -1; 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Loop forever -- the reports run on this thread in a handler, and the 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // binder calls remain responsive in their pool of one thread. 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato while (true) { 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato looper->pollAll(-1 /* timeoutMillis */); 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ALOGW("incidentd escaped from its loop."); 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return 1; 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 65