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