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