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

Commit 269aa5e7 authored by rongliu's avatar rongliu Committed by android-build-merger
Browse files

Merge "Add metadata in direct display surface to support ANativeWindow use cases." into oc-mr1-dev

am: b5e8b5dd

Change-Id: I247d9e1626bc45a62980a08fe162fc537a822bbd
parents 765e4f5e b5e8b5dd
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -301,6 +301,9 @@ Status<LocalChannelHandle> DirectDisplaySurface::OnCreateQueue(
    }

    direct_queue_ = producer->CreateConsumerQueue();
    if (direct_queue_->metadata_size() > 0) {
      metadata_.reset(new uint8_t[direct_queue_->metadata_size()]);
    }
    auto status = RegisterQueue(direct_queue_);
    if (!status) {
      ALOGE(
@@ -345,7 +348,12 @@ void DirectDisplaySurface::DequeueBuffersLocked() {
  while (true) {
    LocalHandle acquire_fence;
    size_t slot;
    auto buffer_status = direct_queue_->Dequeue(0, &slot, &acquire_fence);
    auto buffer_status = direct_queue_->Dequeue(
        0, &slot, metadata_.get(),
        direct_queue_->metadata_size(), &acquire_fence);
    ALOGD_IF(TRACE,
             "DirectDisplaySurface::DequeueBuffersLocked: Dequeue with metadata_size: %zu",
             direct_queue_->metadata_size());
    if (!buffer_status) {
      ALOGD_IF(
          TRACE > 1 && buffer_status.error() == ETIMEDOUT,
+5 −1
Original line number Diff line number Diff line
@@ -144,7 +144,8 @@ class DirectDisplaySurface : public DisplaySurface {
                       const display::SurfaceAttributes& attributes)
      : DisplaySurface(service, SurfaceType::Direct, surface_id, process_id,
                       user_id, attributes),
        acquired_buffers_(kMaxPostedBuffers) {}
        acquired_buffers_(kMaxPostedBuffers),
        metadata_(nullptr){}
  std::vector<int32_t> GetQueueIds() const override;
  bool IsBufferAvailable();
  bool IsBufferPosted();
@@ -179,6 +180,9 @@ class DirectDisplaySurface : public DisplaySurface {
  RingBuffer<AcquiredBuffer> acquired_buffers_;

  std::shared_ptr<ConsumerQueue> direct_queue_;

  // Stores metadata when it dequeue buffers from consumer queue.
  std::unique_ptr<uint8_t[]> metadata_;
};

}  // namespace dvr