looper.cpp revision 4fe6c3e51be77e35f40872cdbca6c80f8f8b7ecb
1ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*
2ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Copyright (C) 2010 The Android Open Source Project
3ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
4ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Licensed under the Apache License, Version 2.0 (the "License");
5ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * you may not use this file except in compliance with the License.
6ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * You may obtain a copy of the License at
7ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
8ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *      http://www.apache.org/licenses/LICENSE-2.0
9ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
10ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Unless required by applicable law or agreed to in writing, software
11ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * distributed under the License is distributed on an "AS IS" BASIS,
12ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * See the License for the specific language governing permissions and
14ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * limitations under the License.
15ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross */
16ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
17ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define LOG_TAG "ALooper"
18ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <utils/Log.h>
19ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
20ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <android/looper.h>
21ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <utils/Looper.h>
22ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
23ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossusing android::Looper;
24ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossusing android::sp;
25ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
26ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossALooper* ALooper_forThread() {
27ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return Looper::getForThread().get();
28ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
29ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
30ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossALooper* ALooper_prepare(int opts) {
31ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return Looper::prepare(opts).get();
32ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
336bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross
34ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_acquire(ALooper* looper) {
35ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    static_cast<Looper*>(looper)->incStrong((void*)ALooper_acquire);
366bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross}
37ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
38ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_release(ALooper* looper) {
39ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    static_cast<Looper*>(looper)->decStrong((void*)ALooper_acquire);
40ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
41ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
42ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
43ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    sp<Looper> looper = Looper::getForThread();
44ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    if (looper == NULL) {
45ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        LOGE("ALooper_pollOnce: No looper for this thread!");
46ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        return ALOOPER_POLL_ERROR;
47ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    }
48ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
49ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return looper->pollOnce(timeoutMillis, outFd, outEvents, outData);
506bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross}
51ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
52ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
53ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    sp<Looper> looper = Looper::getForThread();
54ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    if (looper == NULL) {
55ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        LOGE("ALooper_pollAll: No looper for this thread!");
56ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        return ALOOPER_POLL_ERROR;
57ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    }
58ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
59ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return looper->pollAll(timeoutMillis, outFd, outEvents, outData);
60ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
61ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
62ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_wake(ALooper* looper) {
63ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    static_cast<Looper*>(looper)->wake();
64ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
65ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
66ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_addFd(ALooper* looper, int fd, int ident, int events,
67ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        ALooper_callbackFunc callback, void* data) {
68ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return static_cast<Looper*>(looper)->addFd(fd, ident, events, callback, data);
69ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
70ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
71ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_removeFd(ALooper* looper, int fd) {
72ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return static_cast<Looper*>(looper)->removeFd(fd);
73ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
74ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross