LCOV - code coverage report
Current view: top level - source/extensions/io_socket/user_space - file_event_impl.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 10 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 7 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <cstdint>
       4             : 
       5             : #include "envoy/event/dispatcher.h"
       6             : #include "envoy/event/file_event.h"
       7             : 
       8             : #include "source/common/common/assert.h"
       9             : #include "source/extensions/io_socket/user_space/io_handle.h"
      10             : 
      11             : namespace Envoy {
      12             : 
      13             : namespace Extensions {
      14             : namespace IoSocket {
      15             : namespace UserSpace {
      16             : 
      17             : // A FileEvent implementation which is used to drive UserSpaceHandle.
      18             : // Declare the class final to safely call virtual function setEnabled in constructor.
      19             : class FileEventImpl final : public Event::FileEvent, Logger::Loggable<Logger::Id::io> {
      20             : public:
      21             :   FileEventImpl(Event::Dispatcher& dispatcher, Event::FileReadyCb cb, uint32_t events,
      22             :                 IoHandle& io_source);
      23             : 
      24             :   // Event::FileEvent
      25             :   void activate(uint32_t events) override;
      26             :   void setEnabled(uint32_t events) override;
      27             : 
      28             :   // This event always acts as edge triggered regardless the underlying OS is level or
      29             :   // edge triggered. The event owner on windows platform should not emulate edge events.
      30           0 :   void unregisterEventIfEmulatedEdge(uint32_t) override {}
      31           0 :   void registerEventIfEmulatedEdge(uint32_t) override {}
      32             : 
      33             :   // Notify events. Unlike activate() method, this method activates the given events only if the
      34             :   // events are enabled.
      35             :   void activateIfEnabled(uint32_t events);
      36             : 
      37             : private:
      38             :   // This class maintains the ephemeral events and enabled events.
      39             :   class EventListener {
      40             :   public:
      41             :     ~EventListener() = default;
      42             : 
      43             :     // Reset the enabled events. The caller must refresh the triggered events.
      44           0 :     void setEnabledEvents(uint32_t enabled_events) { enabled_events_ = enabled_events; }
      45             : 
      46             :     // Return the enabled events.
      47           0 :     uint32_t getEnabledEvents() { return enabled_events_; }
      48             : 
      49           0 :     void clearEphemeralEvents() {
      50           0 :       // Clear ephemeral events to align with FileEventImpl::setEnabled().
      51           0 :       ephemeral_events_ = 0;
      52           0 :     }
      53             : 
      54           0 :     void onEventActivated(uint32_t activated_events) { ephemeral_events_ |= activated_events; }
      55             : 
      56           0 :     uint32_t getAndClearEphemeralEvents() { return std::exchange(ephemeral_events_, 0); }
      57             : 
      58             :   private:
      59             :     // The events set by activate() and will be cleared after the io callback.
      60             :     uint32_t ephemeral_events_{};
      61             :     // The events set by setEnabled(). The new value replaces the old value.
      62             :     uint32_t enabled_events_{};
      63             :   };
      64             : 
      65             :   // Used to populate the event operations of enable and activate.
      66             :   EventListener event_listener_;
      67             : 
      68             :   // The handle to registered async callback from dispatcher.
      69             :   Event::SchedulableCallbackPtr schedulable_;
      70             : 
      71             :   // Supplies readable and writable status.
      72             :   IoHandle& io_source_;
      73             : };
      74             : } // namespace UserSpace
      75             : } // namespace IoSocket
      76             : } // namespace Extensions
      77             : } // namespace Envoy

Generated by: LCOV version 1.15