From 37551347204c461e709929d798c5a85327f1a7bb Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Fri, 19 May 2023 20:08:53 -0700 Subject: [PATCH] audio: Fix the comment about threading of DriverInterface::init 'DriverInterface::init' is called on the same thread as other interface methods (the worker thread), except for 'setConnectedDevices'. Update the comment to reflect this, and rearrange the methods order in the interface. Bug: 283463913 Test: m Change-Id: I8937506d20ff8233b4b934c421173ce2bec9d43e --- audio/aidl/default/include/core-impl/Stream.h | 15 +++++++-------- audio/aidl/default/include/core-impl/StreamStub.h | 7 ++++--- audio/aidl/default/include/core-impl/StreamUsb.h | 7 ++++--- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/audio/aidl/default/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h index 65680df664..476f1ff30d 100644 --- a/audio/aidl/default/include/core-impl/Stream.h +++ b/audio/aidl/default/include/core-impl/Stream.h @@ -155,20 +155,19 @@ class StreamContext { struct DriverInterface { using CreateInstance = std::function; virtual ~DriverInterface() = default; - // This function is called once, on the main thread, before starting the worker thread. - virtual ::android::status_t init() = 0; - // This function is called from Binder pool thread. It must be done in a thread-safe manner - // if this method and other methods in this interface share data. - virtual ::android::status_t setConnectedDevices( - const std::vector<::aidl::android::media::audio::common::AudioDevice>& - connectedDevices) = 0; - // All the functions below are called on the worker thread. + // All the methods below are called on the worker thread. + virtual ::android::status_t init() = 0; // This function is only called once. virtual ::android::status_t drain(StreamDescriptor::DrainMode mode) = 0; virtual ::android::status_t flush() = 0; virtual ::android::status_t pause() = 0; virtual ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount, int32_t* latencyMs) = 0; virtual ::android::status_t standby() = 0; + // The method below is called from a thread of the Binder pool. Access to data shared with other + // methods of this interface must be done in a thread-safe manner. + virtual ::android::status_t setConnectedDevices( + const std::vector<::aidl::android::media::audio::common::AudioDevice>& + connectedDevices) = 0; }; class StreamWorkerCommonLogic : public ::android::hardware::audio::common::StreamLogic { diff --git a/audio/aidl/default/include/core-impl/StreamStub.h b/audio/aidl/default/include/core-impl/StreamStub.h index df0182cf9f..436e610ccf 100644 --- a/audio/aidl/default/include/core-impl/StreamStub.h +++ b/audio/aidl/default/include/core-impl/StreamStub.h @@ -24,15 +24,16 @@ class DriverStub : public DriverInterface { public: DriverStub(const StreamContext& context, bool isInput); ::android::status_t init() override; - ::android::status_t setConnectedDevices( - const std::vector<::aidl::android::media::audio::common::AudioDevice>& connectedDevices) - override; ::android::status_t drain(StreamDescriptor::DrainMode) override; ::android::status_t flush() override; ::android::status_t pause() override; ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount, int32_t* latencyMs) override; ::android::status_t standby() override; + // Note: called on a different thread. + ::android::status_t setConnectedDevices( + const std::vector<::aidl::android::media::audio::common::AudioDevice>& connectedDevices) + override; private: const size_t mFrameSizeBytes; diff --git a/audio/aidl/default/include/core-impl/StreamUsb.h b/audio/aidl/default/include/core-impl/StreamUsb.h index 36e64cbcdb..05d889a713 100644 --- a/audio/aidl/default/include/core-impl/StreamUsb.h +++ b/audio/aidl/default/include/core-impl/StreamUsb.h @@ -34,15 +34,16 @@ class DriverUsb : public DriverInterface { public: DriverUsb(const StreamContext& context, bool isInput); ::android::status_t init() override; - ::android::status_t setConnectedDevices( - const std::vector<::aidl::android::media::audio::common::AudioDevice>& connectedDevices) - override; ::android::status_t drain(StreamDescriptor::DrainMode) override; ::android::status_t flush() override; ::android::status_t pause() override; ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount, int32_t* latencyMs) override; ::android::status_t standby() override; + // Note: called on a different thread. + ::android::status_t setConnectedDevices( + const std::vector<::aidl::android::media::audio::common::AudioDevice>& connectedDevices) + override; private: ::android::status_t exitStandby();