Loading services/vr/hardware_composer/impl/vr_composer_client.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -161,6 +161,10 @@ void VrComposerClient::onHotplug(Display display, client_->onHotplug(display, connected); client_->onHotplug(display, connected); } } void VrComposerClient::onRefresh(Display display) { client_->onRefresh(display); } Return<void> VrComposerClient::registerCallback( Return<void> VrComposerClient::registerCallback( const sp<IComposerCallback>& callback) { const sp<IComposerCallback>& callback) { return client_->registerCallback(callback); return client_->registerCallback(callback); Loading services/vr/hardware_composer/impl/vr_composer_client.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ class VrComposerClient : public IVrComposerClient { virtual ~VrComposerClient(); virtual ~VrComposerClient(); void onHotplug(Display display, IComposerCallback::Connection connected); void onHotplug(Display display, IComposerCallback::Connection connected); void onRefresh(Display display); // IComposerClient // IComposerClient Return<void> registerCallback(const sp<IComposerCallback>& callback) override; Return<void> registerCallback(const sp<IComposerCallback>& callback) override; Loading services/vr/hardware_composer/impl/vr_hwc.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -855,6 +855,14 @@ Return<void> VrHwc::createClient(createClient_cb hidl_cb) { return Void(); return Void(); } } void VrHwc::ForceDisplaysRefresh() { std::lock_guard<std::mutex> guard(mutex_); if (client_ != nullptr) { for (const auto& pair : displays_) client_.promote()->onRefresh(pair.first); } } void VrHwc::RegisterObserver(Observer* observer) { void VrHwc::RegisterObserver(Observer* observer) { std::lock_guard<std::mutex> guard(mutex_); std::lock_guard<std::mutex> guard(mutex_); if (observer_) if (observer_) Loading services/vr/hardware_composer/impl/vr_hwc.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,7 @@ class ComposerView { virtual ~ComposerView() {} virtual ~ComposerView() {} virtual void ForceDisplaysRefresh() = 0; virtual void RegisterObserver(Observer* observer) = 0; virtual void RegisterObserver(Observer* observer) = 0; virtual void UnregisterObserver(Observer* observer) = 0; virtual void UnregisterObserver(Observer* observer) = 0; }; }; Loading Loading @@ -288,6 +289,7 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; // ComposerView: // ComposerView: void ForceDisplaysRefresh() override; void RegisterObserver(Observer* observer) override; void RegisterObserver(Observer* observer) override; void UnregisterObserver(Observer* observer) override; void UnregisterObserver(Observer* observer) override; Loading @@ -295,7 +297,6 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { HwcDisplay* FindDisplay(Display display); HwcDisplay* FindDisplay(Display display); wp<VrComposerClient> client_; wp<VrComposerClient> client_; sp<IComposerCallback> callbacks_; // Guard access to internal state from binder threads. // Guard access to internal state from binder threads. std::mutex mutex_; std::mutex mutex_; Loading services/vr/hardware_composer/tests/vr_composer_test.cpp +22 −1 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,24 @@ namespace { const char kVrDisplayName[] = "VrDisplay_Test"; const char kVrDisplayName[] = "VrDisplay_Test"; class TestComposerView : public ComposerView { public: TestComposerView() {} ~TestComposerView() override = default; size_t display_refresh_count() const { return display_refresh_count_; } void ForceDisplaysRefresh() override { display_refresh_count_++; } void RegisterObserver(Observer* observer) override {} void UnregisterObserver(Observer* observer) override {} TestComposerView(const TestComposerView&) = delete; void operator=(const TestComposerView&) = delete; private: size_t display_refresh_count_ = 0; }; class TestComposerCallback : public BnVrComposerCallback { class TestComposerCallback : public BnVrComposerCallback { public: public: TestComposerCallback() {} TestComposerCallback() {} Loading Loading @@ -57,7 +75,7 @@ sp<GraphicBuffer> CreateBuffer() { class VrComposerTest : public testing::Test { class VrComposerTest : public testing::Test { public: public: VrComposerTest() : composer_(new VrComposer()) {} VrComposerTest() : composer_(new VrComposer(&composer_view_)) {} ~VrComposerTest() override = default; ~VrComposerTest() override = default; sp<IVrComposer> GetComposerProxy() const { sp<IVrComposer> GetComposerProxy() const { Loading @@ -72,6 +90,7 @@ class VrComposerTest : public testing::Test { } } protected: protected: TestComposerView composer_view_; sp<VrComposer> composer_; sp<VrComposer> composer_; VrComposerTest(const VrComposerTest&) = delete; VrComposerTest(const VrComposerTest&) = delete; Loading @@ -89,7 +108,9 @@ TEST_F(VrComposerTest, TestWithoutObserver) { TEST_F(VrComposerTest, TestWithObserver) { TEST_F(VrComposerTest, TestWithObserver) { sp<IVrComposer> composer = GetComposerProxy(); sp<IVrComposer> composer = GetComposerProxy(); sp<TestComposerCallback> callback = new TestComposerCallback(); sp<TestComposerCallback> callback = new TestComposerCallback(); ASSERT_EQ(0, composer_view_.display_refresh_count()); ASSERT_TRUE(composer->registerObserver(callback).isOk()); ASSERT_TRUE(composer->registerObserver(callback).isOk()); ASSERT_EQ(1, composer_view_.display_refresh_count()); ComposerView::Frame frame; ComposerView::Frame frame; base::unique_fd fence = composer_->OnNewFrame(frame); base::unique_fd fence = composer_->OnNewFrame(frame); Loading Loading
services/vr/hardware_composer/impl/vr_composer_client.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -161,6 +161,10 @@ void VrComposerClient::onHotplug(Display display, client_->onHotplug(display, connected); client_->onHotplug(display, connected); } } void VrComposerClient::onRefresh(Display display) { client_->onRefresh(display); } Return<void> VrComposerClient::registerCallback( Return<void> VrComposerClient::registerCallback( const sp<IComposerCallback>& callback) { const sp<IComposerCallback>& callback) { return client_->registerCallback(callback); return client_->registerCallback(callback); Loading
services/vr/hardware_composer/impl/vr_composer_client.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ class VrComposerClient : public IVrComposerClient { virtual ~VrComposerClient(); virtual ~VrComposerClient(); void onHotplug(Display display, IComposerCallback::Connection connected); void onHotplug(Display display, IComposerCallback::Connection connected); void onRefresh(Display display); // IComposerClient // IComposerClient Return<void> registerCallback(const sp<IComposerCallback>& callback) override; Return<void> registerCallback(const sp<IComposerCallback>& callback) override; Loading
services/vr/hardware_composer/impl/vr_hwc.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -855,6 +855,14 @@ Return<void> VrHwc::createClient(createClient_cb hidl_cb) { return Void(); return Void(); } } void VrHwc::ForceDisplaysRefresh() { std::lock_guard<std::mutex> guard(mutex_); if (client_ != nullptr) { for (const auto& pair : displays_) client_.promote()->onRefresh(pair.first); } } void VrHwc::RegisterObserver(Observer* observer) { void VrHwc::RegisterObserver(Observer* observer) { std::lock_guard<std::mutex> guard(mutex_); std::lock_guard<std::mutex> guard(mutex_); if (observer_) if (observer_) Loading
services/vr/hardware_composer/impl/vr_hwc.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,7 @@ class ComposerView { virtual ~ComposerView() {} virtual ~ComposerView() {} virtual void ForceDisplaysRefresh() = 0; virtual void RegisterObserver(Observer* observer) = 0; virtual void RegisterObserver(Observer* observer) = 0; virtual void UnregisterObserver(Observer* observer) = 0; virtual void UnregisterObserver(Observer* observer) = 0; }; }; Loading Loading @@ -288,6 +289,7 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; // ComposerView: // ComposerView: void ForceDisplaysRefresh() override; void RegisterObserver(Observer* observer) override; void RegisterObserver(Observer* observer) override; void UnregisterObserver(Observer* observer) override; void UnregisterObserver(Observer* observer) override; Loading @@ -295,7 +297,6 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView { HwcDisplay* FindDisplay(Display display); HwcDisplay* FindDisplay(Display display); wp<VrComposerClient> client_; wp<VrComposerClient> client_; sp<IComposerCallback> callbacks_; // Guard access to internal state from binder threads. // Guard access to internal state from binder threads. std::mutex mutex_; std::mutex mutex_; Loading
services/vr/hardware_composer/tests/vr_composer_test.cpp +22 −1 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,24 @@ namespace { const char kVrDisplayName[] = "VrDisplay_Test"; const char kVrDisplayName[] = "VrDisplay_Test"; class TestComposerView : public ComposerView { public: TestComposerView() {} ~TestComposerView() override = default; size_t display_refresh_count() const { return display_refresh_count_; } void ForceDisplaysRefresh() override { display_refresh_count_++; } void RegisterObserver(Observer* observer) override {} void UnregisterObserver(Observer* observer) override {} TestComposerView(const TestComposerView&) = delete; void operator=(const TestComposerView&) = delete; private: size_t display_refresh_count_ = 0; }; class TestComposerCallback : public BnVrComposerCallback { class TestComposerCallback : public BnVrComposerCallback { public: public: TestComposerCallback() {} TestComposerCallback() {} Loading Loading @@ -57,7 +75,7 @@ sp<GraphicBuffer> CreateBuffer() { class VrComposerTest : public testing::Test { class VrComposerTest : public testing::Test { public: public: VrComposerTest() : composer_(new VrComposer()) {} VrComposerTest() : composer_(new VrComposer(&composer_view_)) {} ~VrComposerTest() override = default; ~VrComposerTest() override = default; sp<IVrComposer> GetComposerProxy() const { sp<IVrComposer> GetComposerProxy() const { Loading @@ -72,6 +90,7 @@ class VrComposerTest : public testing::Test { } } protected: protected: TestComposerView composer_view_; sp<VrComposer> composer_; sp<VrComposer> composer_; VrComposerTest(const VrComposerTest&) = delete; VrComposerTest(const VrComposerTest&) = delete; Loading @@ -89,7 +108,9 @@ TEST_F(VrComposerTest, TestWithoutObserver) { TEST_F(VrComposerTest, TestWithObserver) { TEST_F(VrComposerTest, TestWithObserver) { sp<IVrComposer> composer = GetComposerProxy(); sp<IVrComposer> composer = GetComposerProxy(); sp<TestComposerCallback> callback = new TestComposerCallback(); sp<TestComposerCallback> callback = new TestComposerCallback(); ASSERT_EQ(0, composer_view_.display_refresh_count()); ASSERT_TRUE(composer->registerObserver(callback).isOk()); ASSERT_TRUE(composer->registerObserver(callback).isOk()); ASSERT_EQ(1, composer_view_.display_refresh_count()); ComposerView::Frame frame; ComposerView::Frame frame; base::unique_fd fence = composer_->OnNewFrame(frame); base::unique_fd fence = composer_->OnNewFrame(frame); Loading