| // Copyright 2014 The Android Open Source Project |
| // |
| // This software is licensed under the terms of the GNU General Public |
| // License version 2, as published by the Free Software Foundation, and |
| // may be copied, distributed, and modified under those terms. |
| // |
| // This program is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| #include "android/base/async/Looper.h" |
| |
| #include "android/base/async/DefaultLooper.h" |
| |
| namespace android { |
| namespace base { |
| |
| // static |
| const char* Looper::clockTypeToString(Looper::ClockType clock) { |
| static const char kRealtimeStr[] = "kRealTime"; |
| static const char kVirtualStr[] = "kVirtual"; |
| static const char kHostStr[] = "kHost"; |
| static const char kInvalidStr[] = "Invalid"; |
| switch (clock) { |
| case Looper::ClockType::kRealtime: |
| return kRealtimeStr; |
| case Looper::ClockType::kVirtual: |
| return kVirtualStr; |
| case Looper::ClockType::kHost: |
| return kHostStr; |
| default: |
| return kInvalidStr; |
| } |
| } |
| |
| // static |
| Looper* Looper::create() { |
| return new DefaultLooper(); |
| } |
| |
| Looper::~Looper() = default; |
| |
| void Looper::run() { |
| runWithDeadlineMs(kDurationInfinite); |
| } |
| |
| int Looper::runWithTimeoutMs(Looper::Duration timeoutMs) { |
| if (timeoutMs != kDurationInfinite) { |
| timeoutMs += nowMs(); |
| } |
| return runWithDeadlineMs(timeoutMs); |
| } |
| |
| Looper::Looper() = default; |
| |
| Looper::Timer::~Timer() = default; |
| |
| Looper* Looper::Timer::parentLooper() const { |
| return mLooper; |
| } |
| |
| Looper::Timer::Timer(Looper* looper, |
| Looper::Timer::Callback callback, |
| void* opaque, |
| Looper::ClockType clock) |
| : mLooper(looper), |
| mCallback(callback), |
| mOpaque(opaque), |
| mClockType(clock) {} |
| |
| Looper::FdWatch::~FdWatch() = default; |
| |
| int Looper::FdWatch::fd() const { |
| return mFd; |
| } |
| |
| Looper::FdWatch::FdWatch(Looper* looper, |
| int fd, |
| Looper::FdWatch::Callback callback, |
| void* opaque) |
| : mLooper(looper), mFd(fd), mCallback(callback), mOpaque(opaque) {} |
| |
| } // namespace base |
| } // namespace android |