| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 1 | #ifndef ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_ | 
 | 2 | #define ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_ | 
 | 3 |  | 
 | 4 | #include "buffer_hub.h" | 
 | 5 |  | 
 | 6 | #include <pdx/rpc/buffer_wrapper.h> | 
 | 7 | #include <private/dvr/bufferhub_rpc.h> | 
 | 8 |  | 
 | 9 | namespace android { | 
 | 10 | namespace dvr { | 
 | 11 |  | 
 | 12 | // Consumer channels are attached to a Producer channel | 
 | 13 | class ConsumerChannel : public BufferHubChannel { | 
 | 14 |  public: | 
| Corey Tabaka | 52ea25c | 2017-09-13 18:02:48 -0700 | [diff] [blame] | 15 |   using BorrowedHandle = pdx::BorrowedHandle; | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 16 |   using Channel = pdx::Channel; | 
 | 17 |   using Message = pdx::Message; | 
 | 18 |  | 
 | 19 |   ConsumerChannel(BufferHubService* service, int buffer_id, int channel_id, | 
| Corey Tabaka | 52ea25c | 2017-09-13 18:02:48 -0700 | [diff] [blame] | 20 |                   uint64_t consumer_state_bit, | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 21 |                   const std::shared_ptr<Channel> producer); | 
 | 22 |   ~ConsumerChannel() override; | 
 | 23 |  | 
 | 24 |   bool HandleMessage(Message& message) override; | 
 | 25 |   void HandleImpulse(Message& message) override; | 
 | 26 |  | 
| Corey Tabaka | 52ea25c | 2017-09-13 18:02:48 -0700 | [diff] [blame] | 27 |   uint64_t consumer_state_bit() const { return consumer_state_bit_; } | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 28 |   BufferInfo GetBufferInfo() const override; | 
 | 29 |  | 
 | 30 |   bool OnProducerPosted(); | 
 | 31 |   void OnProducerClosed(); | 
 | 32 |  | 
 | 33 |  private: | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 34 |   std::shared_ptr<ProducerChannel> GetProducer() const; | 
 | 35 |  | 
| Corey Tabaka | 52ea25c | 2017-09-13 18:02:48 -0700 | [diff] [blame] | 36 |   pdx::Status<BufferDescription<BorrowedHandle>> OnGetBuffer(Message& message); | 
 | 37 |  | 
 | 38 |   pdx::Status<LocalFence> OnConsumerAcquire(Message& message); | 
| Corey Tabaka | cd52dd9 | 2017-04-07 18:03:57 -0700 | [diff] [blame] | 39 |   pdx::Status<void> OnConsumerRelease(Message& message, | 
 | 40 |                                       LocalFence release_fence); | 
 | 41 |   pdx::Status<void> OnConsumerSetIgnore(Message& message, bool ignore); | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 42 |  | 
| Corey Tabaka | 52ea25c | 2017-09-13 18:02:48 -0700 | [diff] [blame] | 43 |   uint64_t consumer_state_bit_{0}; | 
| Corey Tabaka | d53870c | 2017-07-06 18:04:27 -0700 | [diff] [blame] | 44 |   bool acquired_{false}; | 
 | 45 |   bool released_{true}; | 
 | 46 |   bool ignored_{false};  // True if we are ignoring events. | 
| Alex Vakulenko | e4eec20 | 2017-01-27 14:41:04 -0800 | [diff] [blame] | 47 |   std::weak_ptr<Channel> producer_; | 
 | 48 |  | 
 | 49 |   ConsumerChannel(const ConsumerChannel&) = delete; | 
 | 50 |   void operator=(const ConsumerChannel&) = delete; | 
 | 51 | }; | 
 | 52 |  | 
 | 53 | }  // namespace dvr | 
 | 54 | }  // namespace android | 
 | 55 |  | 
 | 56 | #endif  // ANDROID_DVR_BUFFERHUBD_CONSUMER_CHANNEL_H_ |