1 #ifndef ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H 2 #define ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H 3 4 #include <android/dvr/BnVrComposer.h> 5 #include <impl/vr_hwc.h> 6 7 namespace android { 8 namespace dvr { 9 10 class VrComposerCallback; 11 12 // Implementation of the IVrComposer service used to notify VR Window Manager 13 // when SurfaceFlinger presents 2D UI changes. 14 // 15 // VR HWC updates the presented frame via the ComposerView::Observer interface. 16 // On notification |callback_| is called to update VR Window Manager. 17 // NOTE: If VR Window Manager isn't connected, the notification is a no-op. 18 class VrComposer 19 : public BnVrComposer, 20 public ComposerView::Observer, 21 public IBinder::DeathRecipient { 22 public: 23 VrComposer(); 24 ~VrComposer() override; 25 26 // BnVrComposer: 27 binder::Status registerObserver( 28 const sp<IVrComposerCallback>& callback) override; 29 30 // ComposerView::Observer: 31 base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; 32 33 private: 34 // IBinder::DeathRecipient: 35 void binderDied(const wp<IBinder>& who) override; 36 37 std::mutex mutex_; 38 39 sp<IVrComposerCallback> callback_; 40 41 VrComposer(const VrComposer&) = delete; 42 void operator=(const VrComposer&) = delete; 43 }; 44 45 } // namespace dvr 46 } // namespace android 47 48 #endif // ANDROID_DVR_HARDWARE_COMPOSER_VR_COMPOSER_H 49