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

Commit a750f1cc authored by Ahmad Khalil's avatar Ahmad Khalil
Browse files

Fix PWLE v2 effect durations

The `VibratorHalWrapper` now calculates and returns the total duration of the PWLE vibrations by summing the durations of all PWLE primitives.

Bug: 390701627
Flag: android.os.vibrator.normalized_pwle_effects
Test: atest libvibratorservice_test
Change-Id: I38c64d334939e8963b194cca956f290a81c06e8f
parent 0a18c9b0
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -131,9 +131,10 @@ HalResult<void> HalWrapper::performPwleEffect(const std::vector<PrimitivePwle>&,
    return HalResult<void>::unsupported();
}

HalResult<void> HalWrapper::composePwleV2(const CompositePwleV2&, const std::function<void()>&) {
HalResult<milliseconds> HalWrapper::composePwleV2(const CompositePwleV2&,
                                                  const std::function<void()>&) {
    ALOGV("Skipped composePwleV2 because it's not available in Vibrator HAL");
    return HalResult<void>::unsupported();
    return HalResult<milliseconds>::unsupported();
}

HalResult<Capabilities> HalWrapper::getCapabilities() {
@@ -359,11 +360,18 @@ HalResult<void> AidlHalWrapper::performPwleEffect(const std::vector<PrimitivePwl
    return HalResultFactory::fromStatus(getHal()->composePwle(primitives, cb));
}

HalResult<void> AidlHalWrapper::composePwleV2(const CompositePwleV2& composite,
                                              const std::function<void()>& completionCallback) {
HalResult<milliseconds> AidlHalWrapper::composePwleV2(
        const CompositePwleV2& composite, const std::function<void()>& completionCallback) {
    // This method should always support callbacks, so no need to double check.
    auto cb = ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback);
    return HalResultFactory::fromStatus(getHal()->composePwleV2(composite, cb));

    milliseconds totalDuration(0);
    for (const auto& primitive : composite.pwlePrimitives) {
        totalDuration += milliseconds(primitive.timeMillis);
    }

    return HalResultFactory::fromStatus<milliseconds>(getHal()->composePwleV2(composite, cb),
                                                      totalDuration);
}

HalResult<Capabilities> AidlHalWrapper::getCapabilitiesInternal() {
+5 −4
Original line number Diff line number Diff line
@@ -423,8 +423,8 @@ public:
    virtual HalResult<void> performPwleEffect(const std::vector<PrimitivePwle>& primitives,
                                              const std::function<void()>& completionCallback);

    virtual HalResult<void> composePwleV2(const CompositePwleV2& composite,
                                          const std::function<void()>& completionCallback);
    virtual HalResult<std::chrono::milliseconds> composePwleV2(
            const CompositePwleV2& composite, const std::function<void()>& completionCallback);

protected:
    // Shared pointer to allow CallbackScheduler to outlive this wrapper.
@@ -511,7 +511,8 @@ public:
            const std::vector<PrimitivePwle>& primitives,
            const std::function<void()>& completionCallback) override final;

    HalResult<void> composePwleV2(const CompositePwleV2& composite,
    HalResult<std::chrono::milliseconds> composePwleV2(
            const CompositePwleV2& composite,
            const std::function<void()>& completionCallback) override final;

protected:
+1 −0
Original line number Diff line number Diff line
@@ -787,5 +787,6 @@ TEST_F(VibratorHalWrapperAidlTest, TestComposePwleV2) {

    result = mWrapper->composePwleV2(composite, callback);
    ASSERT_TRUE(result.isOk());
    ASSERT_EQ(300ms, result.value());
    ASSERT_EQ(1, *callbackCounter.get());
}