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

Commit f2657986 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

am: 96200969

Change-Id: If65ac1aded0bbe59e776167d0283876659057ab7
parents b97da6db 96200969
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;
+8 −0
Original line number Original line Diff line number Diff line
@@ -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_)
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;
};
};
@@ -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;


@@ -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_;
+22 −1
Original line number Original line Diff line number Diff line
@@ -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() {}
@@ -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 {
@@ -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;
@@ -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