You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.6 KiB
75 lines
2.6 KiB
#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_
|