mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 21:37:44 +00:00
Test: hidl_test Test: mma Merged-In: I808423c040099354513db0ad108210fcec17c8a7 Change-Id: I808423c040099354513db0ad108210fcec17c8a7
87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
#include "FooCallback.h"
|
|
#include <android-base/logging.h>
|
|
#include <inttypes.h>
|
|
|
|
namespace android {
|
|
namespace hardware {
|
|
namespace tests {
|
|
namespace foo {
|
|
namespace V1_0 {
|
|
namespace implementation {
|
|
|
|
Return<void> FooCallback::heyItsYou(
|
|
const sp<IFooCallback> &_cb) {
|
|
nsecs_t start = systemTime();
|
|
ALOGI("SERVER(FooCallback) heyItsYou cb = %p", _cb.get());
|
|
mLock.lock();
|
|
invokeInfo[0].invoked = true;
|
|
invokeInfo[0].timeNs = systemTime() - start;
|
|
mCond.signal();
|
|
mLock.unlock();
|
|
return Void();
|
|
}
|
|
|
|
Return<bool> FooCallback::heyItsYouIsntIt(const sp<IFooCallback> &_cb) {
|
|
nsecs_t start = systemTime();
|
|
ALOGI("SERVER(FooCallback) heyItsYouIsntIt cb = %p sleeping for %" PRId64 " seconds", _cb.get(), DELAY_S);
|
|
sleep(DELAY_S);
|
|
ALOGI("SERVER(FooCallback) heyItsYouIsntIt cb = %p responding", _cb.get());
|
|
mLock.lock();
|
|
invokeInfo[1].invoked = true;
|
|
invokeInfo[1].timeNs = systemTime() - start;
|
|
mCond.signal();
|
|
mLock.unlock();
|
|
return true;
|
|
}
|
|
|
|
Return<void> FooCallback::heyItsTheMeaningOfLife(uint8_t tmol) {
|
|
nsecs_t start = systemTime();
|
|
ALOGI("SERVER(FooCallback) heyItsTheMeaningOfLife = %d sleeping for %" PRId64 " seconds", tmol, DELAY_S);
|
|
sleep(DELAY_S);
|
|
ALOGI("SERVER(FooCallback) heyItsTheMeaningOfLife = %d done sleeping", tmol);
|
|
mLock.lock();
|
|
invokeInfo[2].invoked = true;
|
|
invokeInfo[2].timeNs = systemTime() - start;
|
|
mCond.signal();
|
|
mLock.unlock();
|
|
return Void();
|
|
}
|
|
|
|
Return<void> FooCallback::reportResults(int64_t ns, reportResults_cb cb) {
|
|
ALOGI("SERVER(FooCallback) reportResults(%" PRId64 " seconds)", nanoseconds_to_seconds(ns));
|
|
nsecs_t leftToWaitNs = ns;
|
|
mLock.lock();
|
|
while (!(invokeInfo[0].invoked && invokeInfo[1].invoked && invokeInfo[2].invoked) &&
|
|
leftToWaitNs > 0) {
|
|
nsecs_t start = systemTime();
|
|
::android::status_t rc = mCond.waitRelative(mLock, leftToWaitNs);
|
|
if (rc != ::android::OK) {
|
|
ALOGI("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative(%" PRId64 ") returned error (%d)", ns, leftToWaitNs, rc);
|
|
break;
|
|
}
|
|
ALOGI("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative was signalled", ns);
|
|
leftToWaitNs -= systemTime() - start;
|
|
}
|
|
mLock.unlock();
|
|
cb(leftToWaitNs, invokeInfo);
|
|
return Void();
|
|
}
|
|
|
|
Return<void> FooCallback::youBlockedMeFor(const hidl_array<int64_t, 3> &ns) {
|
|
for (size_t i = 0; i < 3; i++) {
|
|
invokeInfo[i].callerBlockedNs = ns[i];
|
|
}
|
|
return Void();
|
|
}
|
|
|
|
IFooCallback* HIDL_FETCH_IFooCallback(const char* /* name */) {
|
|
return new FooCallback();
|
|
}
|
|
|
|
} // namespace implementation
|
|
} // namespace V1_0
|
|
} // namespace foo
|
|
} // namespace tests
|
|
} // namespace hardware
|
|
} // namespace android
|