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

Commit 5503f5ca authored by Yangster-mac's avatar Yangster-mac
Browse files

condition dimension query.

Test: Modified the metric link test to query a subset of the predicate/condition dimensions.

Change-Id: I693f14e0b11693fc8ee0bf4fc550977c20d31f71
parent 940ba0c8
Loading
Loading
Loading
Loading
+20 −3
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@


#include "SimpleConditionTracker.h"
#include "SimpleConditionTracker.h"
#include "guardrail/StatsdStats.h"
#include "guardrail/StatsdStats.h"
#include "dimension.h"


#include <log/logprint.h>
#include <log/logprint.h>


@@ -171,12 +172,12 @@ void SimpleConditionTracker::handleConditionEvent(const HashableDimensionKey& ou
        // We get a new output key.
        // We get a new output key.
        newCondition = matchStart ? ConditionState::kTrue : ConditionState::kFalse;
        newCondition = matchStart ? ConditionState::kTrue : ConditionState::kFalse;
        if (matchStart && mInitialValue != ConditionState::kTrue) {
        if (matchStart && mInitialValue != ConditionState::kTrue) {
            mSlicedConditionState[outputKey] = 1;
            mSlicedConditionState.insert(std::make_pair(outputKey, 1));
            changed = true;
            changed = true;
        } else if (mInitialValue != ConditionState::kFalse) {
        } else if (mInitialValue != ConditionState::kFalse) {
            // it's a stop and we don't have history about it.
            // it's a stop and we don't have history about it.
            // If the default condition is not false, it means this stop is valuable to us.
            // If the default condition is not false, it means this stop is valuable to us.
            mSlicedConditionState[outputKey] = 0;
            mSlicedConditionState.insert(std::make_pair(outputKey, 0));
            changed = true;
            changed = true;
        }
        }
    } else {
    } else {
@@ -341,9 +342,25 @@ void SimpleConditionTracker::isConditionMet(
            conditionState = conditionState |
            conditionState = conditionState |
                    (startedCountIt->second > 0 ? ConditionState::kTrue : ConditionState::kFalse);
                    (startedCountIt->second > 0 ? ConditionState::kTrue : ConditionState::kFalse);
        } else {
        } else {
            // For unseen key, check whether the require dimensions are subset of sliced condition
            // output.
            bool seenDimension = false;
            for (const auto& slice : mSlicedConditionState) {
                if (IsSubDimension(slice.first.getDimensionsValue(),
                                   key.getDimensionsValue())) {
                    seenDimension = true;
                    conditionState = conditionState |
                        (slice.second > 0 ? ConditionState::kTrue : ConditionState::kFalse);
                }
                if (conditionState == ConditionState::kTrue) {
                    break;
                }
            }
            if (!seenDimension) {
                conditionState = conditionState | mInitialValue;
                conditionState = conditionState | mInitialValue;
            }
            }
        }
        }
    }
    conditionCache[mIndex] = conditionState;
    conditionCache[mIndex] = conditionState;
    VLOG("Predicate %lld return %d", (long long)mConditionId, conditionCache[mIndex]);
    VLOG("Predicate %lld return %d", (long long)mConditionId, conditionCache[mIndex]);
}
}
+5 −3
Original line number Original line Diff line number Diff line
@@ -331,13 +331,15 @@ bool IsSubDimension(const DimensionsValue& dimension, const DimensionsValue& sub
        case DimensionsValue::ValueCase::kValueFloat:
        case DimensionsValue::ValueCase::kValueFloat:
            return dimension.value_float() == sub.value_float();
            return dimension.value_float() == sub.value_float();
        case DimensionsValue::ValueCase::kValueTuple: {
        case DimensionsValue::ValueCase::kValueTuple: {
            if (dimension.value_tuple().dimensions_value_size() < sub.value_tuple().dimensions_value_size()) {
            if (dimension.value_tuple().dimensions_value_size() <
                sub.value_tuple().dimensions_value_size()) {
                return false;
                return false;
            }
            }
            bool allSub = true;
            bool allSub = true;
            for (int i = 0; i < sub.value_tuple().dimensions_value_size(); ++i) {
            for (int i = 0; allSub && i < sub.value_tuple().dimensions_value_size(); ++i) {
                bool isSub = false;
                bool isSub = false;
                for (int j = 0; !isSub && j < dimension.value_tuple().dimensions_value_size(); ++j) {
                for (int j = 0; !isSub &&
                        j < dimension.value_tuple().dimensions_value_size(); ++j) {
                    isSub |= IsSubDimension(dimension.value_tuple().dimensions_value(j),
                    isSub |= IsSubDimension(dimension.value_tuple().dimensions_value(j),
                                            sub.value_tuple().dimensions_value(i));
                                            sub.value_tuple().dimensions_value(i));
                }
                }
+1 −1
Original line number Original line Diff line number Diff line
@@ -46,7 +46,7 @@ StatsdConfig CreateStatsdConfig() {
    auto isSyncingPredicate = CreateIsSyncingPredicate();
    auto isSyncingPredicate = CreateIsSyncingPredicate();
    *isSyncingPredicate.mutable_simple_predicate()->mutable_dimensions() =
    *isSyncingPredicate.mutable_simple_predicate()->mutable_dimensions() =
        CreateDimensions(
        CreateDimensions(
            android::util::SYNC_STATE_CHANGED, {1 /* uid field */});
            android::util::SYNC_STATE_CHANGED, {1 /* uid field */, 2 /* name field*/});


    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
    auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =
    *isInBackgroundPredicate.mutable_simple_predicate()->mutable_dimensions() =