display_service.h revision 016e5e3ca751de7e86731349985d1eaf7c072515
1#ifndef ANDROID_DVR_SERVICES_DISPLAYD_DISPLAY_SERVICE_H_ 2#define ANDROID_DVR_SERVICES_DISPLAYD_DISPLAY_SERVICE_H_ 3 4#include <pdx/service.h> 5#include <private/dvr/buffer_hub_client.h> 6#include <private/dvr/display_rpc.h> 7#include <private/dvr/late_latch.h> 8 9#include <functional> 10#include <iterator> 11#include <memory> 12#include <string> 13#include <vector> 14 15#include "acquired_buffer.h" 16#include "display_surface.h" 17#include "epoll_event_dispatcher.h" 18#include "hardware_composer.h" 19 20namespace android { 21namespace dvr { 22 23// DisplayService implements the displayd display service over ServiceFS. 24class DisplayService : public pdx::ServiceBase<DisplayService> { 25 public: 26 bool IsInitialized() const override; 27 std::string DumpState(size_t max_length) override; 28 29 void OnChannelClose(pdx::Message& message, 30 const std::shared_ptr<pdx::Channel>& channel) override; 31 int HandleMessage(pdx::Message& message) override; 32 33 std::shared_ptr<DisplaySurface> GetDisplaySurface(int surface_id) const; 34 std::vector<std::shared_ptr<DisplaySurface>> GetDisplaySurfaces() const; 35 std::vector<std::shared_ptr<DisplaySurface>> GetVisibleDisplaySurfaces() 36 const; 37 38 // Updates the list of actively displayed surfaces. This must be called after 39 // any change to client/manager attributes that affect visibility or z order. 40 int UpdateActiveDisplaySurfaces(); 41 42 template <class A> 43 void ForEachDisplaySurface(A action) const { 44 ForEachChannel([action](const ChannelIterator::value_type& pair) mutable { 45 auto surface = std::static_pointer_cast<SurfaceChannel>(pair.second); 46 if (surface->type() == SurfaceTypeEnum::Normal) 47 action(std::static_pointer_cast<DisplaySurface>(surface)); 48 }); 49 } 50 51 using DisplayConfigurationUpdateNotifier = std::function<void(void)>; 52 void SetDisplayConfigurationUpdateNotifier( 53 DisplayConfigurationUpdateNotifier notifier); 54 55 using VSyncCallback = HardwareComposer::VSyncCallback; 56 void SetVSyncCallback(VSyncCallback callback) { 57 hardware_composer_.SetVSyncCallback(callback); 58 } 59 60 HWCDisplayMetrics GetDisplayMetrics() { 61 return hardware_composer_.display_metrics(); 62 } 63 64 void SetActive(bool activated) { 65 if (activated) { 66 hardware_composer_.Resume(); 67 } else { 68 hardware_composer_.Suspend(); 69 } 70 } 71 72 void OnHardwareComposerRefresh(); 73 74 private: 75 friend BASE; 76 friend DisplaySurface; 77 78 friend class VrDisplayStateService; 79 80 DisplayService(); 81 DisplayService(android::Hwc2::Composer* hidl); 82 83 SystemDisplayMetrics OnGetMetrics(pdx::Message& message); 84 int OnCreateSurface(pdx::Message& message, int width, int height, 85 int format, int usage, DisplaySurfaceFlags flags); 86 87 DisplayRPC::ByteBuffer OnGetEdsCapture(pdx::Message& message); 88 89 int OnEnterVrMode(pdx::Message& message); 90 int OnExitVrMode(pdx::Message& message); 91 void OnSetViewerParams(pdx::Message& message, const ViewerParams& view_params); 92 93 // Called by DisplaySurface to signal that a surface property has changed and 94 // the display manager should be notified. 95 void NotifyDisplayConfigurationUpdate(); 96 97 int HandleSurfaceMessage(pdx::Message& message); 98 99 DisplayService(const DisplayService&) = delete; 100 void operator=(const DisplayService&) = delete; 101 102 EpollEventDispatcher dispatcher_; 103 HardwareComposer hardware_composer_; 104 DisplayConfigurationUpdateNotifier update_notifier_; 105}; 106 107} // namespace dvr 108} // namespace android 109 110#endif // ANDROID_DVR_SERVICES_DISPLAYD_DISPLAY_SERVICE_H_ 111