diff --git a/aosp_felix.mk b/aosp_felix.mk index 949a93a..7ed36e9 100644 --- a/aosp_felix.mk +++ b/aosp_felix.mk @@ -27,6 +27,3 @@ PRODUCT_DEVICE := felix PRODUCT_MODEL := AOSP on Felix PRODUCT_BRAND := Android PRODUCT_MANUFACTURER := Google - -DEVICE_MANIFEST_FILE := \ - device/google/felix/manifest.xml diff --git a/bluetooth/bt_vendor_overlay.conf b/bluetooth/bt_vendor_overlay.conf index b7b419b..aab8da2 100644 --- a/bluetooth/bt_vendor_overlay.conf +++ b/bluetooth/bt_vendor_overlay.conf @@ -4,6 +4,6 @@ UartPort = /dev/ttySAC18 # Update BQR Event Mask property value -BqrEventMaskValueUpdate = 262238 +BqrEventMaskValueUpdate = 295006 BtOpusEnabled = true diff --git a/device-felix.mk b/device-felix.mk index 1462ad5..834a899 100644 --- a/device-felix.mk +++ b/device-felix.mk @@ -40,7 +40,7 @@ include device/google/gs201/device-shipping-common.mk $(call soong_config_set,fp_hal_feature,pixel_product, product_a) include device/google/felix/vibrator/cs40l26/device.mk include device/google/gs-common/bcmbt/bluetooth.mk -include device/google/gs-common/display/dump_second_display.mk +include device/google/gs-common/display/dump_exynos_second_display.mk include device/google/gs-common/touch/gti/predump_gti_dual.mk include device/google/gs-common/touch/stm/predump_stm6.mk ifeq ($(filter factory_felix, $(TARGET_PRODUCT)),) @@ -411,10 +411,16 @@ PRODUCT_PRODUCT_PROPERTIES += \ # Override BQR mask to enable LE Audio Choppy report ifneq (,$(filter eng, $(TARGET_BUILD_VARIANT))) PRODUCT_PRODUCT_PROPERTIES += \ - persist.bluetooth.bqr.event_mask=262238 + persist.bluetooth.bqr.event_mask=295006 \ + persist.bluetooth.bqr.vnd_quality_mask=29 \ + persist.bluetooth.bqr.vnd_trace_mask=0 \ + persist.bluetooth.vendor.btsnoop=true else PRODUCT_PRODUCT_PROPERTIES += \ - persist.bluetooth.bqr.event_mask=94 + persist.bluetooth.bqr.event_mask=295006 \ + persist.bluetooth.bqr.vnd_quality_mask=16 \ + persist.bluetooth.bqr.vnd_trace_mask=0 \ + persist.bluetooth.vendor.btsnoop=false endif # Bluetooth LE Audio CIS handover to SCO @@ -439,6 +445,14 @@ PRODUCT_PRODUCT_PROPERTIES += \ PRODUCT_PACKAGES_ENG += \ ewp_tool +# Disable Bluetooth HAP by default +PRODUCT_PRODUCT_PROPERTIES += \ + bluetooth.profile.hap.enabled_by_default=false + +# Disable Bluetooth LE Audio toggle for ASHA device +PRODUCT_PRODUCT_PROPERTIES += \ + bluetooth.leaudio.toggle_visible_for_asha=false + # Enable DeviceAsWebcam support PRODUCT_VENDOR_PROPERTIES += \ ro.usb.uvc.enabled=true diff --git a/device_framework_matrix_product_felix.xml b/device_framework_matrix_product_felix.xml index 492724d..3ac3995 100644 --- a/device_framework_matrix_product_felix.xml +++ b/device_framework_matrix_product_felix.xml @@ -1,7 +1,7 @@ com.google.hardware.pixel.display - 13 + 13-14 IDisplay secondary diff --git a/manifest.xml b/manifest.xml deleted file mode 100644 index a287416..0000000 --- a/manifest.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - android.hardware.audio - hwbinder - 7.1 - - IDevicesFactory - default - - - - android.hardware.audio.effect - hwbinder - 7.0 - - IEffectsFactory - default - - - - android.hardware.soundtrigger - hwbinder - 2.3 - - ISoundTriggerHw - default - - - - android.hardware.media.omx - hwbinder - 1.0 - - IOmx - default - - - IOmxStore - default - - - - android.hardware.graphics.allocator - hwbinder - 4.0 - - IAllocator - default - - - - android.hardware.graphics.composer - hwbinder - 2.4 - - IComposer - default - - - - android.hardware.renderscript - passthrough - 1.0 - - IDevice - default - - - - android.hardware.dumpstate - hwbinder - 1.1 - - IDumpstateDevice - default - - - - android.hardware.bluetooth.audio - hwbinder - 2.1 - - IBluetoothAudioProvidersFactory - default - - - - android.hardware.boot - hwbinder - @1.2::IBootControl/default - - - android.hardware.neuralnetworks - hwbinder - @1.3::IDevice/google-edgetpu - - - android.hardware.health - hwbinder - 2.1 - - IHealth - default - - - - vendor.google.google_battery - 3 - - IGoogleBattery - default - - - - vendor.google.whitechapel.audio.audioext - hwbinder - 4.0 - - IAudioExt - default - - - - diff --git a/powerhint.json b/powerhint.json index 2074a8e..0088169 100644 --- a/powerhint.json +++ b/powerhint.json @@ -194,6 +194,54 @@ ], "ResetOnInit": true }, + { + "Name": "TAUclampMinOnNiceEnable", + "Path": "/proc/vendor_sched/groups/ta/uclamp_min_on_nice_enable", + "Values": [ + "1", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampMinOnNiceHighValue", + "Path": "/proc/vendor_sched/groups/ta/uclamp_min_on_nice_high_value", + "Values": [ + "765", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampMinOnNiceMidValue", + "Path": "/proc/vendor_sched/groups/ta/uclamp_min_on_nice_mid_value", + "Values": [ + "600", + "590", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampMinOnNiceHighPrio", + "Path": "/proc/vendor_sched/groups/ta/uclamp_min_on_nice_high_prio", + "Values": [ + "110", + "119", + "120" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampMinOnNiceMidPrio", + "Path": "/proc/vendor_sched/groups/ta/uclamp_min_on_nice_mid_prio", + "Values": [ + "128", + "139", + "130" + ], + "ResetOnInit": true + }, { "Name": "FGUClampBoost", "Path": "/proc/vendor_sched/groups/fg/uclamp_min", @@ -286,6 +334,35 @@ ], "ResetOnInit": true }, + { + "Name": "TAAutoPreferFit", + "Path": "/proc/vendor_sched/groups/ta/auto_prefer_fit", + "Values": [ + "1", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "TAPreferredIdleMaskMid", + "Path": "/proc/vendor_sched/groups/ta/preferred_idle_mask_mid", + "Values": [ + "0x3f", + "0xf0", + "0xff" + ], + "ResetOnInit": true + }, + { + "Name": "TAPreferredIdleMaskLow", + "Path": "/proc/vendor_sched/groups/ta/preferred_idle_mask_low", + "Values": [ + "0x3f", + "0xf0", + "0xff" + ], + "ResetOnInit": true + }, { "Name": "FGPreferIdle", "Path": "/proc/vendor_sched/groups/fg/prefer_idle", @@ -314,14 +391,6 @@ ], "ResetOnInit": true }, - { - "Name": "NewlyIdleBalancer", - "Path": "/proc/vendor_sched/idle_balancer", - "Values": [ - "0", - "1" - ] - }, { "Name": "DisplayWakeup", "Path": "/sys/devices/platform/1c240000.drmdecon/early_wakeup", @@ -688,6 +757,26 @@ ], "DefaultIndex": 0, "ResetOnInit": true + }, + { + "Name": "AAModeProperty", + "Path": "vendor.powerhal.mode.aa", + "Values": [ + "1", + "0" + ], + "ResetOnInit": true, + "Type": "Property" + }, + { + "Name": "SYSTEM_UI_ADPF_PROFILES", + "Path": ":SYSTEM_UI", + "Values": [ + "SYSTEM_UI_PROFILE" + ], + "DefaultIndex": 0, + "ResetOnInit": true, + "Type": "Event" } ], "Actions": [ @@ -780,6 +869,54 @@ "Duration": 5000, "Value": "0" }, + { + "PowerHint": "LAUNCH", + "Node": "TAAutoPreferFit", + "Duration": 5000, + "Value": "1" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAPreferredIdleMaskMid", + "Duration": 5000, + "Value": "0x3f" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAPreferredIdleMaskLow", + "Duration": 5000, + "Value": "0x3f" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMinOnNiceEnable", + "Duration": 5000, + "Value": "1" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMinOnNiceHighValue", + "Duration": 5000, + "Value": "765" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMinOnNiceHighPrio", + "Duration": 5000, + "Value": "110" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMinOnNiceMidValue", + "Duration": 5000, + "Value": "590" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMinOnNiceMidPrio", + "Duration": 5000, + "Value": "139" + }, { "PowerHint": "LAUNCH", "Type": "DoHint", @@ -1383,12 +1520,6 @@ "Duration": 0, "Value": "0" }, - { - "PowerHint": "CAMERA_STREAMING_EXTREME", - "Node": "NewlyIdleBalancer", - "Duration": 0, - "Value": "0" - }, { "PowerHint": "CAMERA_STREAMING_HIGH", "Node": "PMU_POLL", @@ -1503,12 +1634,6 @@ "Duration": 0, "Value": "0" }, - { - "PowerHint": "CAMERA_STREAMING_HIGH", - "Node": "NewlyIdleBalancer", - "Duration": 0, - "Value": "0" - }, { "PowerHint": "CAMERA_STREAMING_STANDARD", "Node": "PowerHALCameraRunning", @@ -1605,12 +1730,6 @@ "Duration": 0, "Value": "0" }, - { - "PowerHint": "CAMERA_STREAMING_STANDARD", - "Node": "NewlyIdleBalancer", - "Duration": 0, - "Value": "0" - }, { "PowerHint": "CAMERA_STREAMING_LOW", "Node": "PowerHALCameraRunning", @@ -1671,12 +1790,6 @@ "Duration": 0, "Value": "0" }, - { - "PowerHint": "CAMERA_STREAMING_LOW", - "Node": "NewlyIdleBalancer", - "Duration": 0, - "Value": "0" - }, { "PowerHint": "CAMERA_MULTI_CAM_STREAMING", "Node": "CPUBigClusterMaxFreq", @@ -1961,6 +2074,12 @@ "Duration": 0, "Value": "1" }, + { + "PowerHint": "AUTOMOTIVE_PROJECTION", + "Node": "AAModeProperty", + "Duration": 0, + "Value": "1" + }, { "PowerHint": "DISPLAY_IDLE", "Node": "FGPreferIdle", @@ -1978,6 +2097,18 @@ "Type": "EndHint", "Value": "DISPLAY_UPDATE_IMMINENT" }, + { + "PowerHint": "DISPLAY_IDLE", + "Type": "MaskHint", + "Value":"DISPLAY_UPDATE_IMMINENT", + "EnableProperty": "vendor.powerhal.mode.aa" + }, + { + "PowerHint": "DISPLAY_IDLE", + "Type": "MaskHint", + "Value":"CPU_LOAD_RESET", + "EnableProperty": "vendor.powerhal.mode.aa" + }, { "PowerHint": "DISPLAY_UPDATE_IMMINENT", "Node": "DisplayWakeup", @@ -2305,76 +2436,40 @@ "MaxRecordsNum": 300 }, { - "Name": "UiHighBoostWithoutPid", - "PID_On": false, - "PID_Po": 0, - "PID_Pu": 0, - "PID_I": 0, - "PID_I_Init": 0, - "PID_I_High": 0, - "PID_I_Low": 0, - "PID_Do": 0, - "PID_Du": 0, - "SamplingWindow_P": 1, - "SamplingWindow_I": 1, - "SamplingWindow_D": 1, + "Name": "SYSTEM_UI_PROFILE", + "PID_On": true, + "PID_Po": 2.0, + "PID_Pu": 1.0, + "PID_I": 0.0, + "PID_I_Init": 200, + "PID_I_High": 512, + "PID_I_Low": -30, + "PID_Do": 500.0, + "PID_Du": 0.0, "UclampMin_On": true, - "UclampMin_Init": 250, - "UclampMin_High": 197, - "UclampMin_Low": 197, + "UclampMin_Init": 232, + "UclampMin_LoadUp": 730, + "UclampMin_LoadReset": 730, + "UclampMin_High": 480, + "UclampMin_Low": 2, "UclampMax_EfficientBase": 500, "UclampMax_EfficientOffset": 200, - "ReportingRateLimitNs": 1, - "TargetTimeFactor": 1.0, - "StaleTimeFactor": 5.0 - }, - { - "Name": "UiLowBoostWithoutPid", - "PID_On": false, - "PID_Po": 0, - "PID_Pu": 0, - "PID_I": 0, - "PID_I_Init": 0, - "PID_I_High": 0, - "PID_I_Low": 0, - "PID_Do": 0, - "PID_Du": 0, "SamplingWindow_P": 1, - "SamplingWindow_I": 1, + "SamplingWindow_I": 0, "SamplingWindow_D": 1, - "UclampMin_On": true, - "UclampMin_Init": 250, - "UclampMin_High": 53, - "UclampMin_Low": 53, - "UclampMax_EfficientBase": 500, - "UclampMax_EfficientOffset": 200, - "ReportingRateLimitNs": 1, + "ReportingRateLimitNs": 166666660, "TargetTimeFactor": 1.0, - "StaleTimeFactor": 5.0 - }, - { - "Name": "UiLowNoneBoost", - "PID_On": false, - "PID_Po": 0, - "PID_Pu": 0, - "PID_I": 0, - "PID_I_Init": 0, - "PID_I_High": 0, - "PID_I_Low": 0, - "PID_Do": 0, - "PID_Du": 0, - "SamplingWindow_P": 1, - "SamplingWindow_I": 1, - "SamplingWindow_D": 1, - "UclampMin_On": true, - "UclampMin_Init": 250, - "UclampMin_High": 0, - "UclampMin_Low": 0, - "UclampMax_EfficientBase": 500, - "UclampMax_EfficientOffset": 200, - "ReportingRateLimitNs": 1, - "TargetTimeFactor": 1.0, - "StaleTimeFactor": 5.0 + "StaleTimeFactor": 15.0, + "HeuristicBoost_On": true, + "HBoostModerateJankThreshold": 2, + "HBoostOffMaxAvgDurRatio": 4.0, + "HBoostSevereJankPidPu": 0.5, + "HBoostSevereJankThreshold": 8, + "HBoostUclampMinCeilingRange": [480, 722], + "HBoostUclampMinFloorRange": [230, 410], + "JankCheckTimeFactor": 1.2, + "LowFrameRateThreshold": 25, + "MaxRecordsNum": 300 } ] } diff --git a/vibrator/common/HardwareBase.cpp b/vibrator/common/HardwareBase.cpp index 583caaa..1059b90 100644 --- a/vibrator/common/HardwareBase.cpp +++ b/vibrator/common/HardwareBase.cpp @@ -29,6 +29,13 @@ namespace android { namespace hardware { namespace vibrator { +void HwApiBase::recordEvent(const char *func, const std::string &value) { + std::lock_guard lock(mRecordsMutex); + mRecords.emplace_back(std::make_unique> + (HwApiBase::RecordType::EVENT, func, value, nullptr)); + mRecords.pop_front(); +} + HwApiBase::HwApiBase() { mPathPrefix = std::getenv("HWAPI_PATH_PREFIX") ?: ""; if (mPathPrefix.empty()) { diff --git a/vibrator/common/HardwareBase.h b/vibrator/common/HardwareBase.h index 0296390..d2102cb 100644 --- a/vibrator/common/HardwareBase.h +++ b/vibrator/common/HardwareBase.h @@ -39,6 +39,7 @@ using ::android::base::unique_fd; class HwApiBase { private: using NamesMap = std::map; + enum class RecordType { EVENT, HWAPI }; class RecordInterface { public: @@ -48,12 +49,16 @@ class HwApiBase { template class Record : public RecordInterface { public: - Record(const char *func, const T &value, const std::ios *stream) - : mFunc(func), mValue(value), mStream(stream), + Record(const RecordType &type, const char *func, const T &value, const std::ios *stream) + : mType(type), + mFunc(func), + mValue(value), + mStream(stream), mTp(std::chrono::system_clock::system_clock::now()) {} std::string toString(const NamesMap &names) override; private: + const RecordType mType; const char *mFunc; const T mValue; const std::ios *mStream; @@ -66,6 +71,7 @@ class HwApiBase { public: HwApiBase(); void debug(int fd); + void recordEvent(const char *func, const std::string &value); protected: void saveName(const std::string &name, const std::ios *stream); @@ -176,7 +182,7 @@ bool HwApiBase::poll(const T &value, std::istream *stream, const int32_t timeout template void HwApiBase::record(const char *func, const T &value, const std::ios *stream) { std::lock_guard lock(mRecordsMutex); - mRecords.emplace_back(std::make_unique>(func, value, stream)); + mRecords.emplace_back(std::make_unique>(RecordType::HWAPI, func, value, stream)); mRecords.pop_front(); } @@ -188,10 +194,18 @@ std::string HwApiBase::Record::toString(const NamesMap &names) { struct tm buf; auto lTime = localtime_r(&lTp, &buf); - ret << std::put_time(lTime, "%Y-%m-%d %H:%M:%S.") << std::setfill('0') << std::setw(3) - << (std::chrono::duration_cast(mTp.time_since_epoch()) % 1000) - .count() - << " " << mFunc << " '" << names.at(mStream) << "' = '" << mValue << "'"; + if (mType == RecordType::EVENT) { + ret << std::put_time(lTime, "%Y-%m-%d %H:%M:%S.") << std::setfill('0') << std::setw(3) + << (std::chrono::duration_cast(mTp.time_since_epoch()) % + 1000).count() + << " | " << "IVibrator::" << mFunc << " | " << mValue; + } else { + ret << " \t" << std::put_time(lTime, "%Y-%m-%d %H:%M:%S.") << std::setfill('0') + << std::setw(3) + << (std::chrono::duration_cast(mTp.time_since_epoch()) % + 1000).count() + << " " << mFunc << " '" << names.at(mStream) << "' = '" << mValue << "'"; + } return ret.str(); } diff --git a/vibrator/cs40l26/Hardware.h b/vibrator/cs40l26/Hardware.h index e4dd344..acd0c6c 100644 --- a/vibrator/cs40l26/Hardware.h +++ b/vibrator/cs40l26/Hardware.h @@ -287,6 +287,10 @@ class HwApi : public Vibrator::HwApi, private HwApiBase { return true; } + void recordEvent(const char *func, const std::string &value) override { + HwApiBase::recordEvent(func, value); + } + void debug(int fd) override { HwApiBase::debug(fd); } private: diff --git a/vibrator/cs40l26/Vibrator.cpp b/vibrator/cs40l26/Vibrator.cpp index 36d8e8c..cabaf71 100644 --- a/vibrator/cs40l26/Vibrator.cpp +++ b/vibrator/cs40l26/Vibrator.cpp @@ -45,6 +45,24 @@ namespace aidl { namespace android { namespace hardware { namespace vibrator { + +#define RECORD(fmt, ...) { \ + this->mHwApiDef->recordEvent(__func__, StringPrintf(fmt, ##__VA_ARGS__)); \ + if (this->mIsDual) { \ + this->mHwApiDual->recordEvent(__func__, StringPrintf(fmt, ##__VA_ARGS__)); \ + } \ +} + +#define RECORD_COMPOSE(...) \ + std::string effectString = ""; \ + for (auto &effect : composite) { \ + effectString += effect.toString() + ", "; \ + } \ + this->mHwApiDef->recordEvent(__func__, effectString.c_str()); \ + if (this->mIsDual) { \ + this->mHwApiDual->recordEvent(__func__, effectString.c_str()); \ + } \ + static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_COMP = 2044; // (COMPOSE_SIZE_MAX + 1) * 8 + 4 static constexpr uint16_t FF_CUSTOM_DATA_LEN_MAX_PWLE = 2302; @@ -195,7 +213,6 @@ enum vibe_state { VIBE_STATE_ASP, }; -std::mutex mActiveId_mutex; // protects mActiveId class DspMemChunk { private: @@ -461,6 +478,7 @@ Vibrator::Vibrator(std::unique_ptr hwApiDefault, std::unique_ptr h if ((mHwApiDual != nullptr) && (mHwCalDual != nullptr)) mIsDual = true; + RECORD("mIsDual = %d", mIsDual); // ==================INPUT Devices== Base ================= const char *inputEventName = std::getenv("INPUT_EVENT_NAME"); const char *inputEventPathName = std::getenv("INPUT_EVENT_PATH"); @@ -816,6 +834,8 @@ ndk::ScopedAStatus Vibrator::off() { bool ret{true}; const std::scoped_lock lock(mActiveId_mutex); + RECORD("mActiveId = %d", mActiveId); + if (mActiveId >= 0) { ALOGD("Off: Stop the active effect: %d", mActiveId); /* Stop the active effect. */ @@ -858,6 +878,7 @@ ndk::ScopedAStatus Vibrator::on(int32_t timeoutMs, const std::shared_ptr &callback) { ATRACE_NAME("Vibrator::on"); ALOGD("Vibrator::on"); + RECORD("timeoutMs = %d", timeoutMs); if (timeoutMs > MAX_TIME_MS) { return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); @@ -883,6 +904,8 @@ ndk::ScopedAStatus Vibrator::perform(Effect effect, EffectStrength strength, int32_t *_aidl_return) { ATRACE_NAME("Vibrator::perform"); ALOGD("Vibrator::perform"); + RECORD("effect = %s, strength = %s", + toString(effect).c_str(), toString(strength).c_str()); return performEffect(effect, strength, callback, _aidl_return); } @@ -964,6 +987,8 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector &composi const std::shared_ptr &callback) { ATRACE_NAME("Vibrator::compose"); ALOGD("Vibrator::compose"); + RECORD_COMPOSE(composite); + uint16_t size; uint16_t nextEffectDelay; @@ -1319,6 +1344,17 @@ static void incrementIndex(int *index) { *index += 1; } +Vibrator::~Vibrator() { + if (isUnderExternalControl()) { + ALOGD("Disabling external control"); + setExternalControl(false); + } + ALOGD("Turning off the vibrator"); + off(); + ALOGD("Waiting for mAsyncHandle to complete"); + mAsyncHandle.wait(); +} + ndk::ScopedAStatus Vibrator::composePwle(const std::vector &composite, const std::shared_ptr &callback) { ATRACE_NAME("Vibrator::composePwle"); diff --git a/vibrator/cs40l26/Vibrator.h b/vibrator/cs40l26/Vibrator.h index 6fc3a3d..b8e31de 100644 --- a/vibrator/cs40l26/Vibrator.h +++ b/vibrator/cs40l26/Vibrator.h @@ -16,6 +16,7 @@ #pragma once #include +#include #include #include #include @@ -29,6 +30,8 @@ namespace android { namespace hardware { namespace vibrator { +using ::android::base::StringPrintf; + class Vibrator : public BnVibrator { public: // APIs for interfacing with the GPIO pin. @@ -103,6 +106,8 @@ class Vibrator : public BnVibrator { int *status) = 0; // Erase OWT waveform virtual bool eraseOwtEffect(int fd, int8_t effectIndex, std::vector *effect) = 0; + // Records IVibrator Event. + virtual void recordEvent(const char *func, const std::string &value) = 0; // Emit diagnostic information to the given file. virtual void debug(int fd) = 0; }; @@ -148,6 +153,7 @@ class Vibrator : public BnVibrator { Vibrator(std::unique_ptr hwApiDefault, std::unique_ptr hwCalDefault, std::unique_ptr hwApiDual, std::unique_ptr hwCalDual, std::unique_ptr hwgpio); + virtual ~Vibrator(); // BnVibrator APIs ndk::ScopedAStatus getCapabilities(int32_t *_aidl_return) override; @@ -250,6 +256,7 @@ class Vibrator : public BnVibrator { bool mConfigHapticAlsaDeviceDone{false}; bool mGPIOStatus; bool mIsDual{false}; + std::mutex mActiveId_mutex; // protects mActiveId }; } // namespace vibrator diff --git a/vibrator/cs40l26/tests/mocks.h b/vibrator/cs40l26/tests/mocks.h index c521b02..a8bd753 100644 --- a/vibrator/cs40l26/tests/mocks.h +++ b/vibrator/cs40l26/tests/mocks.h @@ -58,6 +58,7 @@ class MockApi : public ::aidl::android::hardware::vibrator::Vibrator::HwApi { bool(int fd, const uint8_t *owtData, const uint32_t numBytes, struct ff_effect *effect, uint32_t *outEffectIndex, int *status)); MOCK_METHOD3(eraseOwtEffect, bool(int fd, int8_t effectIndex, std::vector *effect)); + MOCK_METHOD2(recordEvent, void(const char *func, const std::string &value)); MOCK_METHOD1(debug, void(int fd)); ~MockApi() override { destructor(); }; diff --git a/vibrator/cs40l26/tests/test-vibrator.cpp b/vibrator/cs40l26/tests/test-vibrator.cpp index b9b5b3c..dbce7c5 100644 --- a/vibrator/cs40l26/tests/test-vibrator.cpp +++ b/vibrator/cs40l26/tests/test-vibrator.cpp @@ -295,7 +295,7 @@ class VibratorTest : public Test { EXPECT_CALL(*mMockApi, setMinOnOffInterval(_)).Times(times); EXPECT_CALL(*mMockApi, getHapticAlsaDevice(_, _)).Times(times); EXPECT_CALL(*mMockApi, setHapticPcmAmp(_, _, _, _)).Times(times); - + EXPECT_CALL(*mMockApi, recordEvent(_, _)).Times(times); EXPECT_CALL(*mMockApi, debug(_)).Times(times); EXPECT_CALL(*mMockCal, destructor()).Times(times); @@ -335,11 +335,14 @@ TEST_F(VibratorTest, Constructor) { EXPECT_CALL(*mMockApi, destructor()).WillOnce(DoDefault()); EXPECT_CALL(*mMockCal, destructor()).WillOnce(DoDefault()); EXPECT_CALL(*mMockGpio, destructor()).WillOnce(DoDefault()); - + // Mock calls for the VIbrator destructor. + EXPECT_CALL(*mMockApi, recordEvent(_, _)).WillRepeatedly(DoDefault()); + EXPECT_CALL(*mMockApi, setFFGain(_, ON_GLOBAL_SCALE)).WillOnce(DoDefault()); deleteVibrator(false); createMock(&mockapi, &mockcal, &mockgpio); + EXPECT_CALL(*mMockApi, recordEvent(_, _)).WillRepeatedly(DoDefault()); EXPECT_CALL(*mMockCal, getF0(_)) .InSequence(f0Seq) .WillOnce(DoAll(SetArgReferee<0>(f0Val), Return(true))); @@ -387,6 +390,9 @@ TEST_F(VibratorTest, on) { Sequence s1, s2; uint16_t duration = std::rand() + 1; + EXPECT_CALL(*mMockApi, recordEvent(_, _)) + .InSequence(s1) + .WillRepeatedly(DoDefault()); EXPECT_CALL(*mMockApi, setFFGain(_, ON_GLOBAL_SCALE)).InSequence(s1).WillOnce(DoDefault()); EXPECT_CALL(*mMockApi, setFFEffect(_, _, duration + MAX_COLD_START_LATENCY_MS)) .InSequence(s2) @@ -399,6 +405,7 @@ TEST_F(VibratorTest, on) { TEST_F(VibratorTest, off) { Sequence s1; + EXPECT_CALL(*mMockApi, recordEvent(_, _)).InSequence(s1).WillRepeatedly(DoDefault()); EXPECT_CALL(*mMockApi, setFFGain(_, ON_GLOBAL_SCALE)).InSequence(s1).WillOnce(DoDefault()); EXPECT_TRUE(mVibrator->off().isOk()); } @@ -528,6 +535,8 @@ TEST_P(EffectsTest, perform) { ExpectationSet eSetup; Expectation eActivate, ePollHaptics, ePollStop, eEraseDone; + eSetup += EXPECT_CALL(*mMockApi, recordEvent(_, _)).WillRepeatedly(DoDefault()); + if (scale != EFFECT_SCALE.end()) { EffectIndex index = EFFECT_INDEX.at(effect); duration = EFFECT_DURATIONS[index]; @@ -664,6 +673,7 @@ TEST_P(ComposeTest, compose) { return ndk::ScopedAStatus::ok(); }; + eSetup += EXPECT_CALL(*mMockApi, recordEvent(_, _)).WillRepeatedly(DoDefault()); eSetup += EXPECT_CALL(*mMockApi, setFFGain(_, ON_GLOBAL_SCALE)) .After(eSetup) .WillOnce(DoDefault()); diff --git a/wifi/BoardConfig-wifi.mk b/wifi/BoardConfig-wifi.mk index dcec4ca..a1dc3e2 100644 --- a/wifi/BoardConfig-wifi.mk +++ b/wifi/BoardConfig-wifi.mk @@ -31,6 +31,7 @@ WIFI_AVOID_IFACE_RESET_MAC_CHANGE := true WIFI_FEATURE_HOSTAPD_11AX := true BOARD_HOSTAPD_CONFIG_80211W_MFP_OPTIONAL := true WIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true +WIFI_BRCM_OPEN_SOURCE_MULTI_AKM := enabled PRODUCT_COPY_FILES += \ device/google/felix/wifi/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant_overlay.conf \