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

Commit 8b6fe3a4 authored by Ytai Ben-Tsvi's avatar Ytai Ben-Tsvi
Browse files

Fix destruction order in SpatializerPoseController

We want to make sure the pose provider is destroyed before the
processor, to make sure no pose updates are received with the
processor destroyed.

Test: Manual inspection of logs while running head tracking.
Bug: 188502620
Change-Id: I7110e8db178e16f4addbfb6a0701a700da976ac7
parent 54f07586
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,6 @@ SpatializerPoseController::SpatializerPoseController(Listener* listener,
                                                     std::chrono::microseconds maxUpdatePeriod)
    : mListener(listener),
      mSensorPeriod(sensorPeriod),
      mPoseProvider(SensorPoseProvider::create("headtracker", this)),
      mProcessor(createHeadTrackingProcessor(HeadTrackingProcessor::Options{
              .maxTranslationalVelocity = kMaxTranslationalVelocity / kTicksPerSecond,
              .maxRotationalVelocity = kMaxRotationalVelocity / kTicksPerSecond,
@@ -86,6 +85,7 @@ SpatializerPoseController::SpatializerPoseController(Listener* listener,
              .freshnessTimeout = Ticks(sensorPeriod * kMaxLostSamples).count(),
              .predictionDuration = Ticks(kPredictionDuration).count(),
      })),
      mPoseProvider(SensorPoseProvider::create("headtracker", this)),
      mThread([this, maxUpdatePeriod] {
          while (true) {
              Pose3f headToStage;
+2 −1
Original line number Diff line number Diff line
@@ -115,8 +115,9 @@ class SpatializerPoseController : private media::SensorPoseProvider::Listener {
    mutable std::mutex mMutex;
    Listener* const mListener;
    const std::chrono::microseconds mSensorPeriod;
    std::unique_ptr<media::SensorPoseProvider> mPoseProvider;
    // Order matters for the following two members to ensure correct destruction.
    std::unique_ptr<media::HeadTrackingProcessor> mProcessor;
    std::unique_ptr<media::SensorPoseProvider> mPoseProvider;
    int32_t mHeadSensor = media::SensorPoseProvider::INVALID_HANDLE;
    int32_t mScreenSensor = media::SensorPoseProvider::INVALID_HANDLE;
    std::optional<media::HeadTrackingMode> mActualMode;