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: 20 DisplayManager(DisplayManagerService* service, int channel_id) 21 : service_(service), channel_id_(channel_id) {} 22 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 pdx::Status<BorrowedNativeBufferHandle> OnSetupNamedBuffer( 60 pdx::Message& message, const std::string& name, size_t size, 61 uint64_t usage); 62 63 // Called by the display service to indicate changes to display surfaces that 64 // the display manager should evaluate. 65 void OnDisplaySurfaceChange(); 66 67 DisplayManagerService(const DisplayManagerService&) = delete; 68 void operator=(const DisplayManagerService&) = delete; 69 70 std::shared_ptr<DisplayService> display_service_; 71 std::shared_ptr<DisplayManager> display_manager_; 72 }; 73 74 } // namespace dvr 75 } // namespace android 76 77 #endif // ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ 78