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

Commit 0b485c91 authored by Corey Tabaka's avatar Corey Tabaka
Browse files

libvrflinger: Add additional info to PDX dump.

- Add logging for surface and layers.
- Minor cleanup of AcquiredBuffer code.
- Add additional debug tracing.

Bug: None
Test: servicetool --dump /dev/socket/pdx/system/vr/display/client
Change-Id: Ie7cfe46978139e0eef2184b03acb4b9bab428a33
parent 537b16c4
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -55,9 +55,9 @@ bool AcquiredBuffer::IsAvailable() const {
  if (acquire_fence_) {
    const int ret = sync_wait(acquire_fence_.Get(), 0);
    ALOGD_IF(TRACE || (ret < 0 && errno != ETIME),
             "AcquiredBuffer::IsAvailable: acquire_fence_=%d sync_wait()=%d "
             "errno=%d.",
             acquire_fence_.Get(), ret, ret < 0 ? errno : 0);
             "AcquiredBuffer::IsAvailable: buffer_id=%d acquire_fence=%d "
             "sync_wait()=%d errno=%d.",
             buffer_->id(), acquire_fence_.Get(), ret, ret < 0 ? errno : 0);
    if (ret == 0) {
      // The fence is completed, so to avoid further calls to sync_wait we close
      // it here.
@@ -78,6 +78,8 @@ std::shared_ptr<BufferConsumer> AcquiredBuffer::ClaimBuffer() {
}

int AcquiredBuffer::Release(LocalHandle release_fence) {
  ALOGD_IF(TRACE, "AcquiredBuffer::Release: buffer_id=%d release_fence=%d",
           buffer_ ? buffer_->id() : -1, release_fence.Get());
  if (buffer_) {
    // Close the release fence since we can't transfer it with an async release.
    release_fence.Close();
+3 −3
Original line number Diff line number Diff line
@@ -67,13 +67,13 @@ class AcquiredBuffer {
  int Release(pdx::LocalHandle release_fence);

 private:
  AcquiredBuffer(const AcquiredBuffer&) = delete;
  void operator=(const AcquiredBuffer&) = delete;

  std::shared_ptr<BufferConsumer> buffer_;
  // Mutable so that the fence can be closed when it is determined to be
  // signaled during IsAvailable().
  mutable pdx::LocalHandle acquire_fence_;

  AcquiredBuffer(const AcquiredBuffer&) = delete;
  void operator=(const AcquiredBuffer&) = delete;
};

}  // namespace dvr
+63 −1
Original line number Diff line number Diff line
#include "display_service.h"

#include <unistd.h>

#include <algorithm>
#include <sstream>
#include <string>
#include <vector>

#include <android-base/file.h>
@@ -45,7 +49,65 @@ bool DisplayService::IsInitialized() const {
}

std::string DisplayService::DumpState(size_t /*max_length*/) {
  return hardware_composer_.Dump();
  std::ostringstream stream;

  auto surfaces = GetDisplaySurfaces();
  std::sort(surfaces.begin(), surfaces.end(), [](const auto& a, const auto& b) {
    return a->surface_id() < b->surface_id();
  });

  stream << "Application Surfaces:" << std::endl;

  size_t count = 0;
  for (const auto& surface : surfaces) {
    if (surface->surface_type() == SurfaceType::Application) {
      stream << "Surface " << count++ << ":";
      stream << " surface_id=" << surface->surface_id()
             << " process_id=" << surface->process_id()
             << " user_id=" << surface->user_id()
             << " visible=" << surface->visible()
             << " z_order=" << surface->z_order();

      stream << " queue_ids=";
      auto queue_ids = surface->GetQueueIds();
      std::sort(queue_ids.begin(), queue_ids.end());
      for (int32_t id : queue_ids) {
        if (id != queue_ids[0])
          stream << ",";
        stream << id;
      }
      stream << std::endl;
    }
  }
  stream << std::endl;

  stream << "Direct Surfaces:" << std::endl;

  count = 0;
  for (const auto& surface : surfaces) {
    if (surface->surface_type() == SurfaceType::Direct) {
      stream << "Surface " << count++ << ":";
      stream << " surface_id=" << surface->surface_id()
             << " process_id=" << surface->process_id()
             << " user_id=" << surface->user_id()
             << " visible=" << surface->visible()
             << " z_order=" << surface->z_order();

      stream << " queue_ids=";
      auto queue_ids = surface->GetQueueIds();
      std::sort(queue_ids.begin(), queue_ids.end());
      for (int32_t id : queue_ids) {
        if (id != queue_ids[0])
          stream << ",";
        stream << id;
      }
      stream << std::endl;
    }
  }
  stream << std::endl;

  stream << hardware_composer_.Dump();
  return stream.str();
}

void DisplayService::OnChannelClose(pdx::Message& message,
+11 −4
Original line number Diff line number Diff line
@@ -258,6 +258,13 @@ void ApplicationDisplaySurface::OnQueueEvent(
  }
}

std::vector<int32_t> DirectDisplaySurface::GetQueueIds() const {
  std::vector<int32_t> queue_ids;
  if (direct_queue_)
    queue_ids.push_back(direct_queue_->id());
  return queue_ids;
}

Status<LocalChannelHandle> DirectDisplaySurface::OnCreateQueue(
    Message& /*message*/, const ProducerQueueConfig& config) {
  ATRACE_NAME("DirectDisplaySurface::OnCreateQueue");
@@ -370,8 +377,8 @@ AcquiredBuffer DirectDisplaySurface::AcquireCurrentBuffer() {
  }
  AcquiredBuffer buffer = std::move(acquired_buffers_.Front());
  acquired_buffers_.PopFront();
  ALOGD_IF(TRACE, "DirectDisplaySurface::AcquireCurrentBuffer: buffer: %p",
           buffer.buffer().get());
  ALOGD_IF(TRACE, "DirectDisplaySurface::AcquireCurrentBuffer: buffer_id=%d",
           buffer.buffer()->id());
  return buffer;
}

@@ -399,8 +406,8 @@ AcquiredBuffer DirectDisplaySurface::AcquireNewestAvailableBuffer(
      break;
  }
  ALOGD_IF(TRACE,
           "DirectDisplaySurface::AcquireNewestAvailableBuffer: buffer: %p",
           buffer.buffer().get());
           "DirectDisplaySurface::AcquireNewestAvailableBuffer: buffer_id=%d",
           buffer.buffer()->id());
  return buffer;
}

+1 −0
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ class DirectDisplaySurface : public DisplaySurface {
      : DisplaySurface(service, SurfaceType::Direct, surface_id, process_id,
                       user_id, attributes),
        acquired_buffers_(kMaxPostedBuffers) {}
  std::vector<int32_t> GetQueueIds() const override;
  bool IsBufferAvailable();
  bool IsBufferPosted();
  AcquiredBuffer AcquireCurrentBuffer();
Loading