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

Commit b5e8b5dd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 3910fd7e f60f307b
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