#ifndef ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ #define ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_ #include <pdx/service.h> #include <pdx/status.h> #include <private/dvr/display_protocol.h> #include "display_service.h" namespace android { namespace dvr { class DisplayManagerService; // The display manager is a client of the display manager service. This class // represents the connected client that the display manager service sends // notifications to. class DisplayManager : public pdx::Channel { public: DisplayManager(DisplayManagerService* service, int channel_id) : service_(service), channel_id_(channel_id) {} int channel_id() const { return channel_id_; } // Sets or clears the channel event mask to indicate pending events that the // display manager on the other end of the channel should read and handle. // When |pending| is true the POLLIN bit is set in the event mask; when // |pending| is false the POLLIN bit is cleared in the event mask. void SetNotificationsPending(bool pending); private: DisplayManager(const DisplayManager&) = delete; void operator=(const DisplayManager&) = delete; DisplayManagerService* service_; int channel_id_; }; // The display manager service marshalls state and events from the display // service to the display manager. class DisplayManagerService : public pdx::ServiceBase<DisplayManagerService> { public: std::shared_ptr<pdx::Channel> OnChannelOpen(pdx::Message& message) override; void OnChannelClose(pdx::Message& message, const std::shared_ptr<pdx::Channel>& channel) override; pdx::Status<void> HandleMessage(pdx::Message& message) override; private: friend BASE; explicit DisplayManagerService( const std::shared_ptr<DisplayService>& display_service); pdx::Status<std::vector<display::SurfaceState>> OnGetSurfaceState( pdx::Message& message); pdx::Status<pdx::LocalChannelHandle> OnGetSurfaceQueue(pdx::Message& message, int surface_id, int queue_id); // Called by the display service to indicate changes to display surfaces that // the display manager should evaluate. void OnDisplaySurfaceChange(); DisplayManagerService(const DisplayManagerService&) = delete; void operator=(const DisplayManagerService&) = delete; std::shared_ptr<DisplayService> display_service_; std::shared_ptr<DisplayManager> display_manager_; }; } // namespace dvr } // namespace android #endif // ANDROID_DVR_SERVICES_VRFLINGER_DISPLAY_MANAGER_SERVICE_H_