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 */ 16b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin#include "Log.h" 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "IncidentService.h" 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IInterface.h> 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IPCThreadState.h> 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/IServiceManager.h> 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/ProcessState.h> 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <binder/Status.h> 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/Looper.h> 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/StrongPointer.h> 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <sys/stat.h> 29b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin#include <sys/types.h> 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android; 326cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jinusing namespace android::os::incidentd; 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 35b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jinint main(int /*argc*/, char** /*argv*/) { 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Set up the looper 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<Looper> looper(Looper::prepare(0 /* opts */)); 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Set up the binder 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ProcessState> ps(ProcessState::self()); 41b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin ps->setThreadPoolMaxThreadCount(1); // everything is oneway, let it queue and save ram 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ps->startThreadPool(); 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ps->giveThreadPoolName(); 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato IPCThreadState::self()->disableBackgroundScheduling(true); 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Create the service 476cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jin sp<IncidentService> service = new IncidentService(looper); 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (defaultServiceManager()->addService(String16("incident"), service) != 0) { 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ALOGE("Failed to add service"); 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return -1; 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Loop forever -- the reports run on this thread in a handler, and the 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // binder calls remain responsive in their pool of one thread. 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato while (true) { 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato looper->pollAll(-1 /* timeoutMillis */); 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ALOGW("incidentd escaped from its loop."); 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return 1; 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 62