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

Commit 7f9437b0 authored by WyattRiley's avatar WyattRiley Committed by android-build-merger
Browse files

Merge "Allow more time to un-blacklist strongest satelite" into pie-vts-dev am: 23874c7a

am: dc4f6c49

Change-Id: Iceac782fe92d1a92eef4ff4d874a3010e7a33912
parents ef24454e dc4f6c49
Loading
Loading
Loading
Loading
+51 −26
Original line number Diff line number Diff line
@@ -119,6 +119,11 @@ IGnssConfiguration::BlacklistedSource FindStrongFrequentNonGpsSource(
    struct ComparableBlacklistedSource {
        IGnssConfiguration::BlacklistedSource id;

        ComparableBlacklistedSource() {
            id.constellation = GnssConstellationType::UNKNOWN;
            id.svid = 0;
        }

        bool operator<(const ComparableBlacklistedSource& compare) const {
            return ((id.svid < compare.id.svid) || ((id.svid == compare.id.svid) &&
                                                    (id.constellation < compare.id.constellation)));
@@ -191,18 +196,21 @@ IGnssConfiguration::BlacklistedSource FindStrongFrequentNonGpsSource(
 * 3) Restart location, wait for 3 locations, ensuring they are valid, and checks corresponding
 * GnssStatus does not use those satellites.
 * 4a & b) Turns off location, and send in empty blacklist.
 * 5) Restart location, wait for 3 locations, ensuring they are valid, and checks corresponding
 * 5a) Restart location, wait for 3 locations, ensuring they are valid, and checks corresponding
 * GnssStatus does re-use at least the previously strongest satellite
 * 5b) Retry a few times, in case GNSS search strategy takes a while to reacquire even the
 * formerly strongest satellite
 */
TEST_F(GnssHalTest, BlacklistIndividualSatellites) {
    const int kLocationsToAwait = 3;
    const int kRetriesToUnBlacklist = 10;

    StartAndCheckLocations(kLocationsToAwait);

    // Tolerate 1 less sv status to handle edge cases in reporting.
    EXPECT_GE((int)list_gnss_sv_status_.size() + 1, kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", (int)list_gnss_sv_status_.size(),
          kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)",
          (int)list_gnss_sv_status_.size(), kLocationsToAwait, location_called_count_);

    /*
     * Identify strongest SV seen at least kLocationsToAwait -1 times
@@ -237,13 +245,18 @@ TEST_F(GnssHalTest, BlacklistIndividualSatellites) {
    // retry and ensure satellite not used
    list_gnss_sv_status_.clear();

    location_called_count_ = 0;
    StartAndCheckLocations(kLocationsToAwait);

    // early exit if test is being run with insufficient signal
    if (location_called_count_ == 0) {
        ALOGE("0 Gnss locations received - ensure sufficient signal and retry");
    }
    ASSERT_TRUE(location_called_count_ > 0);

    // Tolerate 1 less sv status to handle edge cases in reporting.
    EXPECT_GE((int)list_gnss_sv_status_.size() + 1, kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", (int)list_gnss_sv_status_.size(),
          kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)",
          (int)list_gnss_sv_status_.size(), kLocationsToAwait, location_called_count_);
    for (const auto& gnss_sv_status : list_gnss_sv_status_) {
        for (uint32_t iSv = 0; iSv < gnss_sv_status.numSvs; iSv++) {
            const auto& gnss_sv = gnss_sv_status.gnssSvList[iSv];
@@ -260,17 +273,28 @@ TEST_F(GnssHalTest, BlacklistIndividualSatellites) {
    ASSERT_TRUE(result.isOk());
    EXPECT_TRUE(result);

    bool strongest_sv_is_reobserved = false;
    // do several loops awaiting a few locations, allowing non-immediate reacquisition strategies
    int unblacklist_loops_remaining = kRetriesToUnBlacklist;
    while (!strongest_sv_is_reobserved && (unblacklist_loops_remaining-- > 0)) {
        StopAndClearLocations();
        list_gnss_sv_status_.clear();

        StartAndCheckLocations(kLocationsToAwait);

        // early exit loop if test is being run with insufficient signal
        if (location_called_count_ == 0) {
            ALOGE("0 Gnss locations received - ensure sufficient signal and retry");
        }
        ASSERT_TRUE(location_called_count_ > 0);

        // Tolerate 1 less sv status to handle edge cases in reporting.
        EXPECT_GE((int)list_gnss_sv_status_.size() + 1, kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", (int)list_gnss_sv_status_.size(),
          kLocationsToAwait);
        ALOGD(
            "Clear blacklist, observed %d GnssSvStatus, while awaiting %d Locations"
            ", tries remaining %d",
            (int)list_gnss_sv_status_.size(), kLocationsToAwait, unblacklist_loops_remaining);

    bool strongest_sv_is_reobserved = false;
        for (const auto& gnss_sv_status : list_gnss_sv_status_) {
            for (uint32_t iSv = 0; iSv < gnss_sv_status.numSvs; iSv++) {
                const auto& gnss_sv = gnss_sv_status.gnssSvList[iSv];
@@ -283,6 +307,7 @@ TEST_F(GnssHalTest, BlacklistIndividualSatellites) {
            }
            if (strongest_sv_is_reobserved) break;
        }
    }
    EXPECT_TRUE(strongest_sv_is_reobserved);
    StopAndClearLocations();
}
@@ -304,8 +329,8 @@ TEST_F(GnssHalTest, BlacklistConstellation) {

    // Tolerate 1 less sv status to handle edge cases in reporting.
    EXPECT_GE((int)list_gnss_sv_status_.size() + 1, kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", (int)list_gnss_sv_status_.size(),
          kLocationsToAwait);
    ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)",
          (int)list_gnss_sv_status_.size(), kLocationsToAwait, location_called_count_);

    // Find first non-GPS constellation to blacklist
    GnssConstellationType constellation_to_blacklist = GnssConstellationType::UNKNOWN;