blob: 33cbc84d7d9394aa33d825bd914becce64311874 [file] [log] [blame]
#ifndef ANDROID_DVR_VR_FLINGER_H_
#define ANDROID_DVR_VR_FLINGER_H_
#include <thread>
#include <memory>
#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, 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,
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_