Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96200969 authored by Daniel Nicoara's avatar Daniel Nicoara Committed by android-build-merger
Browse files

Merge "Signal display refresh when a VR_HWC client is registered" into oc-mr1-dev

am: 40cf2a43

Change-Id: I7f7d7ea383b96900bd43e208ef45a74ee3d4ea07
parents 57f89fd7 40cf2a43
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -161,6 +161,10 @@ void VrComposerClient::onHotplug(Display display,
  client_->onHotplug(display, connected);
}

void VrComposerClient::onRefresh(Display display) {
  client_->onRefresh(display);
}

Return<void> VrComposerClient::registerCallback(
    const sp<IComposerCallback>& callback) {
  return client_->registerCallback(callback);
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ class VrComposerClient : public IVrComposerClient {
  virtual ~VrComposerClient();

  void onHotplug(Display display, IComposerCallback::Connection connected);
  void onRefresh(Display display);

  // IComposerClient
  Return<void> registerCallback(const sp<IComposerCallback>& callback) override;
+8 −0
Original line number Diff line number Diff line
@@ -855,6 +855,14 @@ Return<void> VrHwc::createClient(createClient_cb hidl_cb) {
  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) {
  std::lock_guard<std::mutex> guard(mutex_);
  if (observer_)
+2 −1
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ class ComposerView {

  virtual ~ComposerView() {}

  virtual void ForceDisplaysRefresh() = 0;
  virtual void RegisterObserver(Observer* observer) = 0;
  virtual void UnregisterObserver(Observer* observer) = 0;
};
@@ -288,6 +289,7 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView {
  Return<void> createClient(createClient_cb hidl_cb) override;

  // ComposerView:
  void ForceDisplaysRefresh() override;
  void RegisterObserver(Observer* observer) override;
  void UnregisterObserver(Observer* observer) override;

@@ -295,7 +297,6 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView {
  HwcDisplay* FindDisplay(Display display);

  wp<VrComposerClient> client_;
  sp<IComposerCallback> callbacks_;

  // Guard access to internal state from binder threads.
  std::mutex mutex_;
+22 −1
Original line number Diff line number Diff line
@@ -10,6 +10,24 @@ namespace {

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 {
 public:
  TestComposerCallback() {}
@@ -57,7 +75,7 @@ sp<GraphicBuffer> CreateBuffer() {

class VrComposerTest : public testing::Test {
 public:
  VrComposerTest() : composer_(new VrComposer()) {}
  VrComposerTest() : composer_(new VrComposer(&composer_view_)) {}
  ~VrComposerTest() override = default;

  sp<IVrComposer> GetComposerProxy() const {
@@ -72,6 +90,7 @@ class VrComposerTest : public testing::Test {
  }

 protected:
  TestComposerView composer_view_;
  sp<VrComposer> composer_;

  VrComposerTest(const VrComposerTest&) = delete;
@@ -89,7 +108,9 @@ TEST_F(VrComposerTest, TestWithoutObserver) {
TEST_F(VrComposerTest, TestWithObserver) {
  sp<IVrComposer> composer = GetComposerProxy();
  sp<TestComposerCallback> callback = new TestComposerCallback();
  ASSERT_EQ(0, composer_view_.display_refresh_count());
  ASSERT_TRUE(composer->registerObserver(callback).isOk());
  ASSERT_EQ(1, composer_view_.display_refresh_count());

  ComposerView::Frame frame;
  base::unique_fd fence = composer_->OnNewFrame(frame);
Loading