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

Commit 513476ab authored by Chia-I Wu's avatar Chia-I Wu
Browse files

fakehwc, libvr_hwc-hal: update for ComposerHal changes

removeClient and enableCallback are removed.  dumpDebugInfo,
registerCallback, and unregisterCallback are added.

Test: builds
Change-Id: If366fb24b555393abe5c7bf326027c30c3ceafa4
parent 29e146b2
Loading
Loading
Loading
Loading
+19 −22
Original line number Diff line number Diff line
@@ -145,8 +145,7 @@ private:
} // namespace

FakeComposerClient::FakeComposerClient()
      : mCallbacksOn(false),
        mClient(nullptr),
      : mEventCallback(nullptr),
        mCurrentConfig(NULL_DISPLAY_CONFIG),
        mVsyncEnabled(false),
        mLayers(),
@@ -160,30 +159,32 @@ bool FakeComposerClient::hasCapability(hwc2_capability_t /*capability*/) {
    return false;
}

void FakeComposerClient::removeClient() {
    ALOGV("removeClient");
    // TODO: Ahooga! Only thing current lifetime management choices in
    // APIs make possible. Sad.
    delete this;
std::string FakeComposerClient::dumpDebugInfo() {
    return {};
}

void FakeComposerClient::enableCallback(bool enable) {
    ALOGV("enableCallback");
    mCallbacksOn = enable;
    if (mCallbacksOn) {
        mClient->onHotplug(PRIMARY_DISPLAY, IComposerCallback::Connection::CONNECTED);
void FakeComposerClient::registerEventCallback(EventCallback* callback) {
    ALOGV("registerEventCallback");
    mEventCallback = callback;
    if (mEventCallback) {
        mEventCallback->onHotplug(PRIMARY_DISPLAY, IComposerCallback::Connection::CONNECTED);
    }
}

void FakeComposerClient::unregisterEventCallback() {
    ALOGV("unregisterEventCallback");
    mEventCallback = nullptr;
}

void FakeComposerClient::hotplugDisplay(Display display, IComposerCallback::Connection state) {
    if (mCallbacksOn) {
        mClient->onHotplug(display, state);
    if (mEventCallback) {
        mEventCallback->onHotplug(display, state);
    }
}

void FakeComposerClient::refreshDisplay(Display display) {
    if (mCallbacksOn) {
        mClient->onRefresh(display);
    if (mEventCallback) {
        mEventCallback->onRefresh(display);
    }
}

@@ -500,12 +501,8 @@ Error FakeComposerClient::setLayerZOrder(Display /*display*/, Layer layer, uint3

//////////////////////////////////////////////////////////////////

void FakeComposerClient::setClient(ComposerClient* client) {
    mClient = client;
}

void FakeComposerClient::requestVSync(uint64_t vsyncTime) {
    if (mCallbacksOn) {
    if (mEventCallback) {
        uint64_t timestamp = vsyncTime;
        ALOGV("Vsync");
        if (timestamp == 0) {
@@ -516,7 +513,7 @@ void FakeComposerClient::requestVSync(uint64_t vsyncTime) {
        if (mSurfaceComposer != nullptr) {
            mSurfaceComposer->injectVSync(timestamp);
        } else {
            mClient->onVsync(PRIMARY_DISPLAY, timestamp);
            mEventCallback->onVsync(PRIMARY_DISPLAY, timestamp);
        }
    }
}
+5 −4
Original line number Diff line number Diff line
@@ -61,8 +61,10 @@ public:

    bool hasCapability(hwc2_capability_t capability) override;

    void removeClient() override;
    void enableCallback(bool enable) override;
    std::string dumpDebugInfo() override;
    void registerEventCallback(EventCallback* callback) override;
    void unregisterEventCallback() override;

    uint32_t getMaxVirtualDisplayCount() override;
    Error createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat* format,
                               Display* outDisplay) override;
@@ -147,8 +149,7 @@ public:
private:
    LayerImpl& getLayerImpl(Layer handle);

    bool mCallbacksOn;
    ComposerClient* mClient;
    EventCallback* mEventCallback;
    Config mCurrentConfig;
    bool mVsyncEnabled;
    std::vector<std::unique_ptr<LayerImpl>> mLayers;
+0 −2
Original line number Diff line number Diff line
@@ -169,7 +169,6 @@ void DisplayTest::SetUp() {
    // change the situation.
    mMockComposer = new MockComposerClient;
    sp<ComposerClient> client = new ComposerClient(mMockComposer);
    mMockComposer->setClient(client.get());
    mFakeService = new FakeComposerService(client);
    (void)mFakeService->registerAsService("mock");

@@ -447,7 +446,6 @@ void TransactionTest::SetUpTestCase() {
    // the lifetime of the FakeComposerClient.
    sFakeComposer = new FakeComposerClient;
    sp<ComposerClient> client = new ComposerClient(sFakeComposer);
    sFakeComposer->setClient(client.get());
    sp<IComposer> fakeService = new FakeComposerService(client);
    (void)fakeService->registerAsService("mock");

+7 −10
Original line number Diff line number Diff line
@@ -234,13 +234,10 @@ VrHwc::~VrHwc() {}

bool VrHwc::hasCapability(hwc2_capability_t /* capability */) { return false; }

void VrHwc::removeClient() {
  std::lock_guard<std::mutex> guard(mutex_);
  client_ = nullptr;
}
void VrHwc::registerEventCallback(EventCallback* callback) {
  event_callback_ = callback;

void VrHwc::enableCallback(bool enable) {
  if (enable && client_ != nullptr) {
  if (client_ != nullptr) {
    {
      int32_t width, height;
      GetPrimaryDisplaySize(&width, &height);
@@ -249,7 +246,7 @@ void VrHwc::enableCallback(bool enable) {
      // VR HWC and SurfaceFlinger.
      displays_[kDefaultDisplayId].reset(new HwcDisplay(width, height));
    }
    client_.promote()->onHotplug(kDefaultDisplayId,
    event_callback_->onHotplug(kDefaultDisplayId,
                               IComposerCallback::Connection::CONNECTED);
  }
}
@@ -857,9 +854,9 @@ Return<void> VrHwc::createClient(createClient_cb hidl_cb) {

void VrHwc::ForceDisplaysRefresh() {
  std::lock_guard<std::mutex> guard(mutex_);
  if (client_ != nullptr) {
  if (event_callback_ != nullptr) {
    for (const auto& pair : displays_)
      client_.promote()->onRefresh(pair.first);
      event_callback_->onRefresh(pair.first);
  }
}

+4 −2
Original line number Diff line number Diff line
@@ -207,8 +207,9 @@ class VrHwc : public IComposer, public ComposerHal, public ComposerView {
  // ComposerHal
  bool hasCapability(hwc2_capability_t capability) override;

  void removeClient() override;
  void enableCallback(bool enable) override;
  std::string dumpDebugInfo() override { return {}; }
  void registerEventCallback(EventCallback* callback) override;
  void unregisterEventCallback() override {}

  uint32_t getMaxVirtualDisplayCount() override;
  Error createVirtualDisplay(uint32_t width, uint32_t height,
@@ -304,6 +305,7 @@ class VrHwc : public IComposer, public ComposerHal, public ComposerView {
  std::unordered_map<Display, std::unique_ptr<HwcDisplay>> displays_;
  Display display_count_ = 2;

  EventCallback* event_callback_ = nullptr;
  Observer* observer_ = nullptr;

  VrHwc(const VrHwc&) = delete;