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

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

Merge "Resurrect the pose tool."

parents 7ce48677 2a4d63ce
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -103,9 +103,14 @@ class CPUMappedBroadcastRing : public CPUMappedBuffer {
  // Try obtaining the ring. If the named buffer has not been created yet, it
  // will return nullptr.
  RingType* Ring() {
    // No ring created yet?
    if (ring_ == nullptr) {
      // Not mapped the memory yet?
      if (IsMapped() == false) {
        TryMapping();
      }

      // If have the memory mapped, allocate the ring.
      if (IsMapped()) {
        switch (usage_mode_) {
          case CPUUsageMode::READ_OFTEN:
+20 −7
Original line number Diff line number Diff line
@@ -22,6 +22,11 @@ using android::pdx::Transaction;

namespace android {
namespace dvr {
namespace {

typedef CPUMappedBroadcastRing<DvrPoseRing> SensorPoseRing;

}  // namespace

// PoseClient is a remote interface to the pose service in sensord.
class PoseClient : public pdx::ClientBase<PoseClient> {
@@ -36,16 +41,21 @@ class PoseClient : public pdx::ClientBase<PoseClient> {
  // Polls the pose service for the current state and stores it in *state.
  // Returns zero on success, a negative error code otherwise.
  int Poll(DvrPose* state) {
    const auto vsync_buffer = GetVsyncBuffer();
    if (vsync_buffer) {
    // Allocate the helper class to access the sensor pose buffer.
    if (sensor_pose_buffer_ == nullptr) {
      sensor_pose_buffer_ = std::make_unique<SensorPoseRing>(
          DvrGlobalBuffers::kSensorPoseBuffer, CPUUsageMode::READ_RARELY);
    }

    if (state) {
        // Fill the state
        *state = vsync_buffer->current_pose;
      if (sensor_pose_buffer_->GetNewest(state)) {
        return 0;
      } else {
        return -EAGAIN;
      }
      return -EINVAL;
    }

    return -EAGAIN;
    return -EINVAL;
  }

  int GetPose(uint32_t vsync_count, DvrPoseAsync* out_pose) {
@@ -235,6 +245,9 @@ class PoseClient : public pdx::ClientBase<PoseClient> {
  // The vsync pose buffer if already mapped.
  std::unique_ptr<CPUMappedBuffer> vsync_pose_buffer_;

  // The direct sensor pose buffer.
  std::unique_ptr<SensorPoseRing> sensor_pose_buffer_;

  const DvrVsyncPoseBuffer* mapped_vsync_pose_buffer_ = nullptr;

  struct ControllerClientState {