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

Commit 28c00842 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Cleanup in ProximityInfoStateUtils

Change-Id: I416c0f0a5da6ce69c4ca1e848168e47b83d6597a
parent 40be4c3b
Loading
Loading
Loading
Loading
+55 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
 * limitations under the License.
 */

#include "defines.h"
#include "proximity_info_params.h"

namespace latinime {
@@ -26,10 +27,17 @@ const int ProximityInfoParams::NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR =
        1 << NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR_LOG_2;
const float ProximityInfoParams::NOT_A_DISTANCE_FLOAT = -1.0f;

// Per method constants
/* Per method constants */
// Used by ProximityInfoStateUtils::initGeometricDistanceInfos()
const float ProximityInfoParams::NEAR_KEY_NORMALIZED_SQUARED_THRESHOLD = 4.0f;

// Used by ProximityInfoStateUtils::updateNearKeysDistances()
const float ProximityInfoParams::NEAR_KEY_THRESHOLD_FOR_DISTANCE = 2.0f;

// Used by ProximityInfoStateUtils::isPrevLocalMin()
const float ProximityInfoParams::MARGIN_FOR_PREV_LOCAL_MIN = 0.01f;

// Used by ProximityInfoStateUtils::getPointScore()
const int ProximityInfoParams::DISTANCE_BASE_SCALE = 100;
const float ProximityInfoParams::NEAR_KEY_THRESHOLD_FOR_POINT_SCORE = 0.6f;
const int ProximityInfoParams::CORNER_CHECK_DISTANCE_THRESHOLD_SCALE = 25;
@@ -39,6 +47,52 @@ const float ProximityInfoParams::CORNER_ANGLE_THRESHOLD_FOR_POINT_SCORE = M_PI_F
const float ProximityInfoParams::CORNER_SUM_ANGLE_THRESHOLD = M_PI_F / 4.0f;
const float ProximityInfoParams::CORNER_SCORE = 1.0f;

// Used by ProximityInfoStateUtils::refreshSpeedRates()
const int ProximityInfoParams::NUM_POINTS_FOR_SPEED_CALCULATION = 2;

// Used by ProximityInfoStateUtils::pushTouchPoint()
const int ProximityInfoParams::LAST_POINT_SKIP_DISTANCE_SCALE = 4;

// Used by ProximityInfoStateUtils::updateAlignPointProbabilities()
const float ProximityInfoParams::MIN_PROBABILITY = 0.000001f;
const float ProximityInfoParams::MAX_SKIP_PROBABILITY = 0.95f;
const float ProximityInfoParams::SKIP_FIRST_POINT_PROBABILITY = 0.01f;
const float ProximityInfoParams::SKIP_LAST_POINT_PROBABILITY = 0.1f;
const float ProximityInfoParams::MIN_SPEED_RATE_FOR_SKIP_PROBABILITY = 0.15f;
const float ProximityInfoParams::SPEED_WEIGHT_FOR_SKIP_PROBABILITY = 0.9f;
const float ProximityInfoParams::SLOW_STRAIGHT_WEIGHT_FOR_SKIP_PROBABILITY = 0.6f;
const float ProximityInfoParams::NEAREST_DISTANCE_WEIGHT = 0.5f;
const float ProximityInfoParams::NEAREST_DISTANCE_BIAS = 0.5f;
const float ProximityInfoParams::NEAREST_DISTANCE_WEIGHT_FOR_LAST = 0.6f;
const float ProximityInfoParams::NEAREST_DISTANCE_BIAS_FOR_LAST = 0.4f;
const float ProximityInfoParams::ANGLE_WEIGHT = 0.90f;
const float ProximityInfoParams::DEEP_CORNER_ANGLE_THRESHOLD = M_PI_F * 60.0f / 180.0f;
const float ProximityInfoParams::SKIP_DEEP_CORNER_PROBABILITY = 0.1f;
const float ProximityInfoParams::CORNER_ANGLE_THRESHOLD = M_PI_F * 30.0f / 180.0f;
const float ProximityInfoParams::STRAIGHT_ANGLE_THRESHOLD = M_PI_F * 15.0f / 180.0f;
const float ProximityInfoParams::SKIP_CORNER_PROBABILITY = 0.4f;
const float ProximityInfoParams::SPEED_MARGIN = 0.1f;
const float ProximityInfoParams::CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION = 0.0f;
// TODO: The variance is critical for accuracy; thus, adjusting these parameter by machine
// learning or something would be efficient.
const float ProximityInfoParams::SPEEDxANGLE_WEIGHT_FOR_STANDARD_DIVIATION = 0.3f;
const float ProximityInfoParams::MAX_SPEEDxANGLE_RATE_FOR_STANDERD_DIVIATION = 0.25f;
const float ProximityInfoParams::SPEEDxNEAREST_WEIGHT_FOR_STANDARD_DIVIATION = 0.5f;
const float ProximityInfoParams::MAX_SPEEDxNEAREST_RATE_FOR_STANDERD_DIVIATION = 0.15f;
const float ProximityInfoParams::MIN_STANDERD_DIVIATION = 0.37f;
const float ProximityInfoParams::PREV_DISTANCE_WEIGHT = 0.5f;
const float ProximityInfoParams::NEXT_DISTANCE_WEIGHT = 0.6f;

// Used by ProximityInfoStateUtils::suppressCharProbabilities()
const float ProximityInfoParams::SUPPRESSION_LENGTH_WEIGHT = 1.5f;
const float ProximityInfoParams::MIN_SUPPRESSION_RATE = 0.1f;
const float ProximityInfoParams::SUPPRESSION_WEIGHT = 0.5f;
const float ProximityInfoParams::SUPPRESSION_WEIGHT_FOR_PROBABILITY_GAIN = 0.1f;
const float ProximityInfoParams::SKIP_PROBABALITY_WEIGHT_FOR_PROBABILITY_GAIN = 0.3f;

// Used by ProximityInfoStateUtils::getMostProbableString()
const float ProximityInfoParams::DEMOTION_LOG_PROBABILITY = 0.3f;

// TODO: Investigate if this is required
const float ProximityInfoParams::SEARCH_KEY_RADIUS_RATIO = 0.95f;
} // namespace latinime
+44 −0
Original line number Diff line number Diff line
@@ -50,6 +50,50 @@ class ProximityInfoParams {
    static const float CORNER_SUM_ANGLE_THRESHOLD;
    static const float CORNER_SCORE;

    // Used by ProximityInfoStateUtils::refreshSpeedRates()
    static const int NUM_POINTS_FOR_SPEED_CALCULATION;

    // Used by ProximityInfoStateUtils::pushTouchPoint()
    static const int LAST_POINT_SKIP_DISTANCE_SCALE;

    // Used by ProximityInfoStateUtils::updateAlignPointProbabilities()
    static const float MIN_PROBABILITY;
    static const float MAX_SKIP_PROBABILITY;
    static const float SKIP_FIRST_POINT_PROBABILITY;
    static const float SKIP_LAST_POINT_PROBABILITY;
    static const float MIN_SPEED_RATE_FOR_SKIP_PROBABILITY;
    static const float SPEED_WEIGHT_FOR_SKIP_PROBABILITY;
    static const float SLOW_STRAIGHT_WEIGHT_FOR_SKIP_PROBABILITY;
    static const float NEAREST_DISTANCE_WEIGHT;
    static const float NEAREST_DISTANCE_BIAS;
    static const float NEAREST_DISTANCE_WEIGHT_FOR_LAST;
    static const float NEAREST_DISTANCE_BIAS_FOR_LAST;
    static const float ANGLE_WEIGHT;
    static const float DEEP_CORNER_ANGLE_THRESHOLD;
    static const float SKIP_DEEP_CORNER_PROBABILITY;
    static const float CORNER_ANGLE_THRESHOLD;
    static const float STRAIGHT_ANGLE_THRESHOLD;
    static const float SKIP_CORNER_PROBABILITY;
    static const float SPEED_MARGIN;
    static const float CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION;
    static const float SPEEDxANGLE_WEIGHT_FOR_STANDARD_DIVIATION;
    static const float MAX_SPEEDxANGLE_RATE_FOR_STANDERD_DIVIATION;
    static const float SPEEDxNEAREST_WEIGHT_FOR_STANDARD_DIVIATION;
    static const float MAX_SPEEDxNEAREST_RATE_FOR_STANDERD_DIVIATION;
    static const float MIN_STANDERD_DIVIATION;
    static const float PREV_DISTANCE_WEIGHT;
    static const float NEXT_DISTANCE_WEIGHT;

    // Used by ProximityInfoStateUtils::suppressCharProbabilities()
    static const float SUPPRESSION_LENGTH_WEIGHT;
    static const float MIN_SUPPRESSION_RATE;
    static const float SUPPRESSION_WEIGHT;
    static const float SUPPRESSION_WEIGHT_FOR_PROBABILITY_GAIN;
    static const float SKIP_PROBABALITY_WEIGHT_FOR_PROBABILITY_GAIN;

    // Used by ProximityInfoStateUtils::getMostProbableString()
    static const float DEMOTION_LOG_PROBABILITY;

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfoParams);
    static const int NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR_LOG_2;
+16 −17
Original line number Diff line number Diff line
@@ -89,29 +89,28 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
    }

    if (xCoordinates && yCoordinates) {
        mSampledInputSize = ProximityInfoStateUtils::updateTouchPoints(
                mProximityInfo->getMostCommonKeyWidth(), mProximityInfo, mMaxPointToKeyLength,
                mInputProximities, xCoordinates, yCoordinates, times, pointerIds, inputSize,
                isGeometric, pointerId, pushTouchPointStartIndex, &mSampledInputXs,
                &mSampledInputYs, &mSampledTimes, &mSampledLengthCache, &mSampledInputIndice);
        mSampledInputSize = ProximityInfoStateUtils::updateTouchPoints(mProximityInfo,
                mMaxPointToKeyLength, mInputProximities, xCoordinates, yCoordinates, times,
                pointerIds, inputSize, isGeometric, pointerId, pushTouchPointStartIndex,
                &mSampledInputXs, &mSampledInputYs, &mSampledTimes, &mSampledLengthCache,
                &mSampledInputIndice);
    }

    if (mSampledInputSize > 0 && isGeometric) {
        mAverageSpeed = ProximityInfoStateUtils::refreshSpeedRates(
                inputSize, xCoordinates, yCoordinates, times, lastSavedInputSize,
                mSampledInputSize, &mSampledInputXs, &mSampledInputYs, &mSampledTimes,
                &mSampledLengthCache, &mSampledInputIndice, &mSpeedRates, &mDirections);
        ProximityInfoStateUtils::refreshBeelineSpeedRates(
                mProximityInfo->getMostCommonKeyWidth(), mAverageSpeed, inputSize,
                xCoordinates, yCoordinates, times, mSampledInputSize, &mSampledInputXs,
                &mSampledInputYs, &mSampledInputIndice, &mBeelineSpeedPercentiles);
        mAverageSpeed = ProximityInfoStateUtils::refreshSpeedRates(inputSize, xCoordinates,
                yCoordinates, times, lastSavedInputSize, mSampledInputSize, &mSampledInputXs,
                &mSampledInputYs, &mSampledTimes, &mSampledLengthCache, &mSampledInputIndice,
                &mSpeedRates, &mDirections);
        ProximityInfoStateUtils::refreshBeelineSpeedRates(mProximityInfo->getMostCommonKeyWidth(),
                mAverageSpeed, inputSize, xCoordinates, yCoordinates, times, mSampledInputSize,
                &mSampledInputXs, &mSampledInputYs, &mSampledInputIndice,
                &mBeelineSpeedPercentiles);
    }

    if (mSampledInputSize > 0) {
        ProximityInfoStateUtils::initGeometricDistanceInfos(
                mProximityInfo, mProximityInfo->getKeyCount(),
                mSampledInputSize, lastSavedInputSize, &mSampledInputXs, &mSampledInputYs,
                &mSampledNearKeysVector, &mSampledDistanceCache_G);
        ProximityInfoStateUtils::initGeometricDistanceInfos(mProximityInfo, mSampledInputSize,
                lastSavedInputSize, &mSampledInputXs, &mSampledInputYs, &mSampledNearKeysVector,
                &mSampledDistanceCache_G);
        if (isGeometric) {
            // updates probabilities of skipping or mapping each key for all points.
            ProximityInfoStateUtils::updateAlignPointProbabilities(