Loading services/vr/hardware_composer/vr_hwc.rc +0 −1 Original line number Diff line number Diff line Loading @@ -3,4 +3,3 @@ service vr_hwc /system/bin/vr_hwc user system group system graphics onrestart restart surfaceflinger disabled services/vr/vr_window_manager/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ static_libs = [ "libperformance", "libpdx_default_transport", "libcutils", "libvr_hwc-binder", "libvr_manager", "libvirtualtouchpadclient", ] Loading services/vr/vr_window_manager/hwc_callback.cpp +19 −16 Original line number Diff line number Diff line Loading @@ -38,26 +38,29 @@ HwcCallback::HwcCallback(Client* client) : client_(client) { HwcCallback::~HwcCallback() { } base::unique_fd HwcCallback::OnNewFrame(const ComposerView::Frame& display_frame) { auto& frame = display_frame.layers; std::vector<HwcLayer> hwc_frame(frame.size()); for (size_t i = 0; i < frame.size(); ++i) { binder::Status HwcCallback::onNewFrame( const ParcelableComposerFrame& parcelable_frame, ParcelableUniqueFd* fence) { ComposerView::Frame frame = parcelable_frame.frame(); std::vector<HwcLayer> hwc_frame(frame.layers.size()); for (size_t i = 0; i < frame.layers.size(); ++i) { const ComposerView::ComposerLayer& layer = frame.layers[i]; hwc_frame[i] = HwcLayer{ .fence = frame[i].fence, .buffer = frame[i].buffer, .crop = frame[i].crop, .display_frame = frame[i].display_frame, .blending = static_cast<int32_t>(frame[i].blend_mode), .appid = frame[i].app_id, .type = static_cast<HwcLayer::LayerType>(frame[i].type), .alpha = frame[i].alpha, .fence = layer.fence, .buffer = layer.buffer, .crop = layer.crop, .display_frame = layer.display_frame, .blending = static_cast<int32_t>(layer.blend_mode), .appid = layer.app_id, .type = static_cast<HwcLayer::LayerType>(layer.type), .alpha = layer.alpha, }; } return client_->OnFrame(std::make_unique<Frame>( std::move(hwc_frame), display_frame.display_id, display_frame.removed, display_frame.display_width, display_frame.display_height)); fence->set_fence(client_->OnFrame(std::make_unique<Frame>( std::move(hwc_frame), frame.display_id, frame.removed, frame.display_width, frame.display_height))); return binder::Status::ok(); } HwcCallback::Frame::Frame(std::vector<HwcLayer>&& layers, uint32_t display_id, Loading services/vr/vr_window_manager/hwc_callback.h +8 −5 Original line number Diff line number Diff line #ifndef VR_WINDOW_MANAGER_HWC_CALLBACK_H_ #define VR_WINDOW_MANAGER_HWC_CALLBACK_H_ #include <android/dvr/BnVrComposerCallback.h> #include <android-base/unique_fd.h> #include <deque> #include <functional> #include <mutex> #include <vector> #include <android-base/unique_fd.h> #include <impl/vr_composer_view.h> #include <impl/vr_hwc.h> #include "impl/vr_composer_view.h" #include "impl/vr_hwc.h" namespace android { Loading @@ -20,7 +22,7 @@ namespace dvr { using Recti = ComposerView::ComposerLayer::Recti; using Rectf = ComposerView::ComposerLayer::Rectf; class HwcCallback : public VrComposerView::Callback { class HwcCallback : public BnVrComposerCallback { public: struct HwcLayer { enum LayerType : uint32_t { Loading Loading @@ -110,7 +112,8 @@ class HwcCallback : public VrComposerView::Callback { ~HwcCallback() override; private: base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; binder::Status onNewFrame(const ParcelableComposerFrame& frame, ParcelableUniqueFd* fence) override; Client *client_; Loading services/vr/vr_window_manager/surface_flinger_view.cpp +12 −12 Original line number Diff line number Diff line #include "surface_flinger_view.h" #include <android/dvr/IVrComposer.h> #include <binder/IServiceManager.h> #include <impl/vr_composer_view.h> #include <private/dvr/native_buffer.h> Loading @@ -14,22 +16,20 @@ SurfaceFlingerView::SurfaceFlingerView() {} SurfaceFlingerView::~SurfaceFlingerView() {} bool SurfaceFlingerView::Initialize(HwcCallback::Client *client) { const char vr_hwcomposer_name[] = "vr"; vr_hwcomposer_ = HIDL_FETCH_IComposer(vr_hwcomposer_name); if (!vr_hwcomposer_.get()) { ALOGE("Failed to get vr_hwcomposer"); return false; } sp<IServiceManager> sm(defaultServiceManager()); vr_composer_ = interface_cast<IVrComposer>( sm->getService(IVrComposer::SERVICE_NAME())); if (vr_hwcomposer_->isRemote()) { ALOGE("vr_hwcomposer service is remote"); String8 service_name(IVrComposer::SERVICE_NAME().string()); if (!vr_composer_.get()) { ALOGE("Faild to connect to %s", service_name.c_str()); return false; } const android::status_t vr_hwcomposer_status = vr_hwcomposer_->registerAsService(vr_hwcomposer_name); if (vr_hwcomposer_status != OK) { ALOGE("Failed to register vr_hwcomposer service"); composer_callback_ = new HwcCallback(client); binder::Status status = vr_composer_->registerObserver(composer_callback_); if (!status.isOk()) { ALOGE("Failed to register observer with %s", service_name.c_str()); return false; } Loading Loading
services/vr/hardware_composer/vr_hwc.rc +0 −1 Original line number Diff line number Diff line Loading @@ -3,4 +3,3 @@ service vr_hwc /system/bin/vr_hwc user system group system graphics onrestart restart surfaceflinger disabled
services/vr/vr_window_manager/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ static_libs = [ "libperformance", "libpdx_default_transport", "libcutils", "libvr_hwc-binder", "libvr_manager", "libvirtualtouchpadclient", ] Loading
services/vr/vr_window_manager/hwc_callback.cpp +19 −16 Original line number Diff line number Diff line Loading @@ -38,26 +38,29 @@ HwcCallback::HwcCallback(Client* client) : client_(client) { HwcCallback::~HwcCallback() { } base::unique_fd HwcCallback::OnNewFrame(const ComposerView::Frame& display_frame) { auto& frame = display_frame.layers; std::vector<HwcLayer> hwc_frame(frame.size()); for (size_t i = 0; i < frame.size(); ++i) { binder::Status HwcCallback::onNewFrame( const ParcelableComposerFrame& parcelable_frame, ParcelableUniqueFd* fence) { ComposerView::Frame frame = parcelable_frame.frame(); std::vector<HwcLayer> hwc_frame(frame.layers.size()); for (size_t i = 0; i < frame.layers.size(); ++i) { const ComposerView::ComposerLayer& layer = frame.layers[i]; hwc_frame[i] = HwcLayer{ .fence = frame[i].fence, .buffer = frame[i].buffer, .crop = frame[i].crop, .display_frame = frame[i].display_frame, .blending = static_cast<int32_t>(frame[i].blend_mode), .appid = frame[i].app_id, .type = static_cast<HwcLayer::LayerType>(frame[i].type), .alpha = frame[i].alpha, .fence = layer.fence, .buffer = layer.buffer, .crop = layer.crop, .display_frame = layer.display_frame, .blending = static_cast<int32_t>(layer.blend_mode), .appid = layer.app_id, .type = static_cast<HwcLayer::LayerType>(layer.type), .alpha = layer.alpha, }; } return client_->OnFrame(std::make_unique<Frame>( std::move(hwc_frame), display_frame.display_id, display_frame.removed, display_frame.display_width, display_frame.display_height)); fence->set_fence(client_->OnFrame(std::make_unique<Frame>( std::move(hwc_frame), frame.display_id, frame.removed, frame.display_width, frame.display_height))); return binder::Status::ok(); } HwcCallback::Frame::Frame(std::vector<HwcLayer>&& layers, uint32_t display_id, Loading
services/vr/vr_window_manager/hwc_callback.h +8 −5 Original line number Diff line number Diff line #ifndef VR_WINDOW_MANAGER_HWC_CALLBACK_H_ #define VR_WINDOW_MANAGER_HWC_CALLBACK_H_ #include <android/dvr/BnVrComposerCallback.h> #include <android-base/unique_fd.h> #include <deque> #include <functional> #include <mutex> #include <vector> #include <android-base/unique_fd.h> #include <impl/vr_composer_view.h> #include <impl/vr_hwc.h> #include "impl/vr_composer_view.h" #include "impl/vr_hwc.h" namespace android { Loading @@ -20,7 +22,7 @@ namespace dvr { using Recti = ComposerView::ComposerLayer::Recti; using Rectf = ComposerView::ComposerLayer::Rectf; class HwcCallback : public VrComposerView::Callback { class HwcCallback : public BnVrComposerCallback { public: struct HwcLayer { enum LayerType : uint32_t { Loading Loading @@ -110,7 +112,8 @@ class HwcCallback : public VrComposerView::Callback { ~HwcCallback() override; private: base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override; binder::Status onNewFrame(const ParcelableComposerFrame& frame, ParcelableUniqueFd* fence) override; Client *client_; Loading
services/vr/vr_window_manager/surface_flinger_view.cpp +12 −12 Original line number Diff line number Diff line #include "surface_flinger_view.h" #include <android/dvr/IVrComposer.h> #include <binder/IServiceManager.h> #include <impl/vr_composer_view.h> #include <private/dvr/native_buffer.h> Loading @@ -14,22 +16,20 @@ SurfaceFlingerView::SurfaceFlingerView() {} SurfaceFlingerView::~SurfaceFlingerView() {} bool SurfaceFlingerView::Initialize(HwcCallback::Client *client) { const char vr_hwcomposer_name[] = "vr"; vr_hwcomposer_ = HIDL_FETCH_IComposer(vr_hwcomposer_name); if (!vr_hwcomposer_.get()) { ALOGE("Failed to get vr_hwcomposer"); return false; } sp<IServiceManager> sm(defaultServiceManager()); vr_composer_ = interface_cast<IVrComposer>( sm->getService(IVrComposer::SERVICE_NAME())); if (vr_hwcomposer_->isRemote()) { ALOGE("vr_hwcomposer service is remote"); String8 service_name(IVrComposer::SERVICE_NAME().string()); if (!vr_composer_.get()) { ALOGE("Faild to connect to %s", service_name.c_str()); return false; } const android::status_t vr_hwcomposer_status = vr_hwcomposer_->registerAsService(vr_hwcomposer_name); if (vr_hwcomposer_status != OK) { ALOGE("Failed to register vr_hwcomposer service"); composer_callback_ = new HwcCallback(client); binder::Status status = vr_composer_->registerObserver(composer_callback_); if (!status.isOk()) { ALOGE("Failed to register observer with %s", service_name.c_str()); return false; } Loading