1 #ifndef ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ 2 #define ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ 3 4 #include <pdx/service.h> 5 #include <pdx/status.h> 6 #include <private/dvr/display_protocol.h> 7 8 #include "display_service.h" 9 10 namespace android { 11 namespace dvr { 12 13 class DisplayManagerService; 14 15 // The display manager is a client of the display manager service. This class 16 // represents the connected client that the display manager service sends 17 // notifications to. 18 class DisplayManager : public pdx::Channel { 19 public: DisplayManager(DisplayManagerService * service,int channel_id)20 DisplayManager(DisplayManagerService* service, int channel_id) 21 : service_(service), channel_id_(channel_id) {} 22 channel_id()23 int channel_id() const { return channel_id_; } 24 25 // Sets or clears the channel event mask to indicate pending events that the 26 // display manager on the other end of the channel should read and handle. 27 // When |pending| is true the POLLIN bit is set in the event mask; when 28 // |pending| is false the POLLIN bit is cleared in the event mask. 29 void SetNotificationsPending(bool pending); 30 31 private: 32 DisplayManager(const DisplayManager&) = delete; 33 void operator=(const DisplayManager&) = delete; 34 35 DisplayManagerService* service_; 36 int channel_id_; 37 }; 38 39 // The display manager service marshalls state and events from the display 40 // service to the display manager. 41 class DisplayManagerService : public pdx::ServiceBase<DisplayManagerService> { 42 public: 43 std::shared_ptr<pdx::Channel> OnChannelOpen(pdx::Message& message) override; 44 void OnChannelClose(pdx::Message& message, 45 const std::shared_ptr<pdx::Channel>& channel) override; 46 pdx::Status<void> HandleMessage(pdx::Message& message) override; 47 48 private: 49 friend BASE; 50 51 explicit DisplayManagerService( 52 const std::shared_ptr<DisplayService>& display_service); 53 54 pdx::Status<std::vector<display::SurfaceState>> OnGetSurfaceState( 55 pdx::Message& message); 56 pdx::Status<pdx::LocalChannelHandle> OnGetSurfaceQueue(pdx::Message& message, 57 int surface_id, 58 int queue_id); 59 60 // Called by the display service to indicate changes to display surfaces that 61 // the display manager should evaluate. 62 void OnDisplaySurfaceChange(); 63 64 DisplayManagerService(const DisplayManagerService&) = delete; 65 void operator=(const DisplayManagerService&) = delete; 66 67 std::shared_ptr<DisplayService> display_service_; 68 std::shared_ptr<DisplayManager> display_manager_; 69 }; 70 71 } // namespace dvr 72 } // namespace android 73 74 #endif // ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ 75