blob: 9002f0773aaff25c607d7dd7bc3654896d2d5f2e [file] [log] [blame]
Joe Onorato5dcbc6c2017-08-29 15:13:58 -07001/*
yro0feae942017-11-15 14:38:48 -08002 * Copyright (C) 2017 The Android Open Source Project
Joe Onorato5dcbc6c2017-08-29 15:13:58 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Yao Chen49954cd2018-04-18 13:48:02 -070017#define DEBUG false // STOPSHIP if true
Joe Onorato9fc9edf2017-10-15 20:08:52 -070018#include "Log.h"
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070019
Yao Chenef99c4f2017-09-22 16:26:54 -070020#include "StatsService.h"
Yao Chen49954cd2018-04-18 13:48:02 -070021#include "socket/StatsSocketListener.h"
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070022
23#include <binder/IInterface.h>
24#include <binder/IPCThreadState.h>
25#include <binder/IServiceManager.h>
26#include <binder/ProcessState.h>
27#include <binder/Status.h>
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070028#include <utils/Looper.h>
29#include <utils/StrongPointer.h>
30
George Burgess IVef8262c2018-04-23 09:32:41 -070031#include <memory>
32
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070033#include <stdio.h>
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070034#include <sys/stat.h>
Yao Chenef99c4f2017-09-22 16:26:54 -070035#include <sys/types.h>
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070036#include <unistd.h>
37
38using namespace android;
Bookatz906a35c2017-09-20 15:26:44 -070039using namespace android::os::statsd;
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070040
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070041/**
42 * Thread function data.
43 */
44struct log_reader_thread_data {
45 sp<StatsService> service;
46};
47
Yao Chenef99c4f2017-09-22 16:26:54 -070048int main(int /*argc*/, char** /*argv*/) {
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070049 // Set up the looper
50 sp<Looper> looper(Looper::prepare(0 /* opts */));
51
52 // Set up the binder
53 sp<ProcessState> ps(ProcessState::self());
Yao Chend10f7b12017-12-18 12:53:50 -080054 ps->setThreadPoolMaxThreadCount(9);
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070055 ps->startThreadPool();
56 ps->giveThreadPoolName();
57 IPCThreadState::self()->disableBackgroundScheduling(true);
58
59 // Create the service
60 sp<StatsService> service = new StatsService(looper);
61 if (defaultServiceManager()->addService(String16("stats"), service) != 0) {
62 ALOGE("Failed to add service");
63 return -1;
64 }
Bookatzb487b552017-09-18 11:26:01 -070065 service->sayHiToStatsCompanion();
66
Yao Chen49954cd2018-04-18 13:48:02 -070067 service->Startup();
68
69 sp<StatsSocketListener> socketListener = new StatsSocketListener(service);
70
Yao Chen49954cd2018-04-18 13:48:02 -070071 ALOGI("using statsd socket");
72 // Backlog and /proc/sys/net/unix/max_dgram_qlen set to large value
73 if (socketListener->startListener(600)) {
74 exit(1);
75 }
Joe Onorato5dcbc6c2017-08-29 15:13:58 -070076
77 // Loop forever -- the reports run on this thread in a handler, and the
78 // binder calls remain responsive in their pool of one thread.
79 while (true) {
80 looper->pollAll(-1 /* timeoutMillis */);
81 }
82 ALOGW("statsd escaped from its loop.");
83
84 return 1;
85}