| #ifndef ANDROID_DVR_VR_FLINGER_H_ |
| #define ANDROID_DVR_VR_FLINGER_H_ |
| |
| #include <thread> |
| #include <memory> |
| |
| #define HWC2_INCLUDE_STRINGIFICATION |
| #define HWC2_USE_CPP11 |
| #include <hardware/hwcomposer2.h> |
| #undef HWC2_INCLUDE_STRINGIFICATION |
| #undef HWC2_USE_CPP11 |
| |
| #include <pdx/service_dispatcher.h> |
| #include <vr/vr_manager/vr_manager.h> |
| |
| namespace android { |
| |
| namespace Hwc2 { |
| class Composer; |
| } // namespace Hwc2 |
| |
| namespace dvr { |
| |
| class DisplayService; |
| |
| class VrFlinger { |
| public: |
| using RequestDisplayCallback = std::function<void(bool)>; |
| static std::unique_ptr<VrFlinger> Create( |
| Hwc2::Composer* hidl, |
| hwc2_display_t primary_display_id, |
| RequestDisplayCallback request_display_callback); |
| ~VrFlinger(); |
| |
| // These functions are all called on surface flinger's main thread. |
| void OnBootFinished(); |
| void GrantDisplayOwnership(); |
| void SeizeDisplayOwnership(); |
| |
| // dump all vr flinger state. |
| std::string Dump(); |
| |
| private: |
| VrFlinger(); |
| bool Init(Hwc2::Composer* hidl, |
| hwc2_display_t primary_display_id, |
| RequestDisplayCallback request_display_callback); |
| |
| // Needs to be a separate class for binder's ref counting |
| class PersistentVrStateCallback : public BnPersistentVrStateCallbacks { |
| public: |
| PersistentVrStateCallback(RequestDisplayCallback request_display_callback) |
| : request_display_callback_(request_display_callback) {} |
| void onPersistentVrStateChanged(bool enabled) override; |
| private: |
| RequestDisplayCallback request_display_callback_; |
| }; |
| |
| std::thread dispatcher_thread_; |
| std::unique_ptr<android::pdx::ServiceDispatcher> dispatcher_; |
| std::shared_ptr<android::dvr::DisplayService> display_service_; |
| sp<PersistentVrStateCallback> persistent_vr_state_callback_; |
| RequestDisplayCallback request_display_callback_; |
| }; |
| |
| } // namespace dvr |
| } // namespace android |
| |
| #endif // ANDROID_DVR_VR_FLINGER_H_ |