From 3a5a30495a45f8dc6780081cfc1a90dd38220dd1 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 27 Feb 2015 15:03:57 +0530 Subject: [PATCH] Removing mutex lock that was affecting performance - Removing mutex lock used during entry into orientation_filter - lock is not needed as each virtual sensor has a separate orientation_filter object - separate objects in virtual sensor for both event driven and polling based modes. Change-Id: Ie2d2aa41a664c858fc1305213c3f9bb2309a7e67 --- src/orientation/orientation_sensor.cpp | 28 +++++++++------------- src/orientation/orientation_sensor.h | 3 ++- src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp | 10 ++------ src/rotation_vector/gaming_rv/gaming_rv_sensor.h | 1 + .../geomagnetic_rv/geomagnetic_rv_sensor.cpp | 12 +++------- .../geomagnetic_rv/geomagnetic_rv_sensor.h | 1 + src/rotation_vector/rv/rv_sensor.cpp | 26 ++++++++------------ src/rotation_vector/rv/rv_sensor.h | 3 ++- src/shared/virtual_sensor.h | 1 - 9 files changed, 32 insertions(+), 53 deletions(-) diff --git a/src/orientation/orientation_sensor.cpp b/src/orientation/orientation_sensor.cpp index 500217a..0c8bed3 100755 --- a/src/orientation/orientation_sensor.cpp +++ b/src/orientation/orientation_sensor.cpp @@ -334,15 +334,12 @@ void orientation_sensor::synthesize(const sensor_event_t &event, vector m_orientation; + orientation_filter m_orientation_filter; + orientation_filter m_orientation_filter_poll; unsigned int m_enable_orientation; diff --git a/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp index 51a0a4b..fb44e0c 100755 --- a/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp +++ b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp @@ -244,10 +244,7 @@ void gaming_rv_sensor::synthesize(const sensor_event_t& event, vector m_orientation_filter; + orientation_filter m_orientation_filter_poll; unsigned int m_enable_gaming_rv; diff --git a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp index ae0348f..6649333 100755 --- a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp +++ b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp @@ -255,10 +255,7 @@ void geomagnetic_rv_sensor::synthesize(const sensor_event_t& event, vector m_orientation_filter; + orientation_filter m_orientation_filter_poll; unsigned int m_enable_geomagnetic_rv; diff --git a/src/rotation_vector/rv/rv_sensor.cpp b/src/rotation_vector/rv/rv_sensor.cpp index 958042e..48c48de 100755 --- a/src/rotation_vector/rv/rv_sensor.cpp +++ b/src/rotation_vector/rv/rv_sensor.cpp @@ -300,15 +300,12 @@ void rv_sensor::synthesize(const sensor_event_t& event, vector & if (m_enable_orientation == ORIENTATION_ENABLED) { m_enable_orientation = 0; - m_orientation.m_pitch_phase_compensation = m_pitch_rotation_compensation; - m_orientation.m_roll_phase_compensation = m_roll_rotation_compensation; - m_orientation.m_azimuth_phase_compensation = m_azimuth_rotation_compensation; - m_orientation.m_magnetic_alignment_factor = m_magnetic_alignment_factor; + m_orientation_filter.m_pitch_phase_compensation = m_pitch_rotation_compensation; + m_orientation_filter.m_roll_phase_compensation = m_roll_rotation_compensation; + m_orientation_filter.m_azimuth_phase_compensation = m_azimuth_rotation_compensation; + m_orientation_filter.m_magnetic_alignment_factor = m_magnetic_alignment_factor; - { - AUTOLOCK(m_fusion_mutex); - quaternion_orientation = m_orientation.get_9axis_quaternion(m_accel, m_gyro, m_magnetic); - } + quaternion_orientation = m_orientation_filter.get_9axis_quaternion(m_accel, m_gyro, m_magnetic); m_time = get_timestamp(); rv_event.sensor_id = get_id(); @@ -353,15 +350,12 @@ int rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &data) gyro.m_time_stamp = gyro_data.timestamp; magnetic.m_time_stamp = magnetic_data.timestamp; - m_orientation.m_pitch_phase_compensation = m_pitch_rotation_compensation; - m_orientation.m_roll_phase_compensation = m_roll_rotation_compensation; - m_orientation.m_azimuth_phase_compensation = m_azimuth_rotation_compensation; - m_orientation.m_magnetic_alignment_factor = m_magnetic_alignment_factor; + m_orientation_filter_poll.m_pitch_phase_compensation = m_pitch_rotation_compensation; + m_orientation_filter_poll.m_roll_phase_compensation = m_roll_rotation_compensation; + m_orientation_filter_poll.m_azimuth_phase_compensation = m_azimuth_rotation_compensation; + m_orientation_filter_poll.m_magnetic_alignment_factor = m_magnetic_alignment_factor; - { - AUTOLOCK(m_fusion_mutex); - quaternion_orientation = m_orientation.get_9axis_quaternion(m_accel, m_gyro, m_magnetic); - } + quaternion_orientation = m_orientation_filter_poll.get_9axis_quaternion(m_accel, m_gyro, m_magnetic); data.accuracy = SENSOR_ACCURACY_GOOD; data.timestamp = get_timestamp(); diff --git a/src/rotation_vector/rv/rv_sensor.h b/src/rotation_vector/rv/rv_sensor.h index 003c3fa..e3d2158 100755 --- a/src/rotation_vector/rv/rv_sensor.h +++ b/src/rotation_vector/rv/rv_sensor.h @@ -51,7 +51,8 @@ private: cmutex m_value_mutex; - orientation_filter m_orientation; + orientation_filter m_orientation_filter; + orientation_filter m_orientation_filter_poll; unsigned int m_enable_orientation; diff --git a/src/shared/virtual_sensor.h b/src/shared/virtual_sensor.h index 3cb79fb..7a3b70c 100755 --- a/src/shared/virtual_sensor.h +++ b/src/shared/virtual_sensor.h @@ -33,7 +33,6 @@ public: bool is_virtual(void); protected: - cmutex m_fusion_mutex; bool activate(void); bool deactivate(void); -- 2.7.4