1#ifndef ANDROID_DVR_VR_FLINGER_H_ 2#define ANDROID_DVR_VR_FLINGER_H_ 3 4#include <thread> 5#include <memory> 6 7#define HWC2_INCLUDE_STRINGIFICATION 8#define HWC2_USE_CPP11 9#include <hardware/hwcomposer2.h> 10#undef HWC2_INCLUDE_STRINGIFICATION 11#undef HWC2_USE_CPP11 12 13#include <pdx/service_dispatcher.h> 14#include <vr/vr_manager/vr_manager.h> 15 16namespace android { 17 18namespace Hwc2 { 19class Composer; 20} // namespace Hwc2 21 22namespace dvr { 23 24class DisplayService; 25 26class VrFlinger { 27 public: 28 using RequestDisplayCallback = std::function<void(bool)>; 29 static std::unique_ptr<VrFlinger> Create( 30 Hwc2::Composer* hidl, 31 hwc2_display_t primary_display_id, 32 RequestDisplayCallback request_display_callback); 33 ~VrFlinger(); 34 35 // These functions are all called on surface flinger's main thread. 36 void OnBootFinished(); 37 void GrantDisplayOwnership(); 38 void SeizeDisplayOwnership(); 39 40 // dump all vr flinger state. 41 std::string Dump(); 42 43 private: 44 VrFlinger(); 45 bool Init(Hwc2::Composer* hidl, 46 hwc2_display_t primary_display_id, 47 RequestDisplayCallback request_display_callback); 48 49 // Needs to be a separate class for binder's ref counting 50 class PersistentVrStateCallback : public BnPersistentVrStateCallbacks { 51 public: 52 PersistentVrStateCallback(RequestDisplayCallback request_display_callback) 53 : request_display_callback_(request_display_callback) {} 54 void onPersistentVrStateChanged(bool enabled) override; 55 private: 56 RequestDisplayCallback request_display_callback_; 57 }; 58 59 std::thread dispatcher_thread_; 60 std::unique_ptr<android::pdx::ServiceDispatcher> dispatcher_; 61 std::shared_ptr<android::dvr::DisplayService> display_service_; 62 sp<PersistentVrStateCallback> persistent_vr_state_callback_; 63 RequestDisplayCallback request_display_callback_; 64}; 65 66} // namespace dvr 67} // namespace android 68 69#endif // ANDROID_DVR_VR_FLINGER_H_ 70