Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fe2bf80 authored by Kevin Rocard's avatar Kevin Rocard Committed by android-build-merger
Browse files

Audio VTS: Workaround async HIDL destructor by sleeping am: d87a288e

am: 921724c2

Change-Id: I9ab85b9f46cc7daf0a9414594654d0dded10307c
parents d590b235 921724c2
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@
#include <fcntl.h>
#include <unistd.h>

#include <hwbinder/IPCThreadState.h>

#include <VtsHalHidlTargetTestBase.h>

#include <android-base/logging.h>
@@ -55,13 +57,14 @@ using std::vector;
using std::list;

using ::android::sp;
using ::android::hardware::Return;
using ::android::hardware::hidl_bitfield;
using ::android::hardware::hidl_enum_range;
using ::android::hardware::hidl_handle;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::IPCThreadState;
using ::android::hardware::MQDescriptorSync;
using ::android::hardware::Return;
using ::android::hardware::audio::V4_0::AudioDrain;
using ::android::hardware::audio::V4_0::DeviceAddress;
using ::android::hardware::audio::V4_0::IDevice;
@@ -164,6 +167,7 @@ TEST_F(AudioHidlTest, OpenDeviceInvalidParameter) {

TEST_F(AudioHidlTest, OpenPrimaryDeviceUsingGetDevice) {
    doc::test("Calling openDevice(\"primary\") should return the primary device.");
    {
        Result result;
        sp<IDevice> baseDevice;
        ASSERT_OK(devicesFactory->openDevice("primary", returnIn(result, baseDevice)));
@@ -173,6 +177,15 @@ TEST_F(AudioHidlTest, OpenPrimaryDeviceUsingGetDevice) {
        Return<sp<IPrimaryDevice>> primaryDevice = IPrimaryDevice::castFrom(baseDevice);
        ASSERT_TRUE(primaryDevice.isOk());
        ASSERT_TRUE(sp<IPrimaryDevice>(primaryDevice) != nullptr);
    }  // Destroy local IDevice proxy
    // FIXME: there is no way to know when the remote IDevice is being destroyed
    //        Binder does not support testing if an object is alive, thus
    //        wait for 100ms to let the binder destruction propagates and
    //        the remote device has the time to be destroyed.
    //        flushCommand makes sure all local command are sent, thus should reduce
    //        the latency between local and remote destruction.
    IPCThreadState::self()->flushCommands();
    usleep(100);
}

//////////////////////////////////////////////////////////////////////////////