-enum lttng_trigger_status lttng_trigger_set_firing_policy(
- struct lttng_trigger *trigger,
- enum lttng_trigger_firing_policy policy_type,
- uint64_t threshold)
-{
- enum lttng_trigger_status ret = LTTNG_TRIGGER_STATUS_OK;
- assert(trigger);
-
- if (threshold < 1) {
- ret = LTTNG_TRIGGER_STATUS_INVALID;
- goto end;
- }
-
- trigger->firing_policy.type = policy_type;
- trigger->firing_policy.threshold = threshold;
-
-end:
- return ret;
-}
-
-enum lttng_trigger_status lttng_trigger_get_firing_policy(
- const struct lttng_trigger *trigger,
- enum lttng_trigger_firing_policy *policy_type,
- uint64_t *threshold)
-{
- enum lttng_trigger_status status = LTTNG_TRIGGER_STATUS_OK;
-
- if (!trigger || !policy_type || !threshold) {
- status = LTTNG_TRIGGER_STATUS_INVALID;
- goto end;
- }
-
- *policy_type = trigger->firing_policy.type;
- *threshold = trigger->firing_policy.threshold;
-
-end:
- return status;
-}
-
-LTTNG_HIDDEN
-bool lttng_trigger_should_fire(const struct lttng_trigger *trigger)
-{
- bool ready_to_fire = false;
-
- assert(trigger);
-
- switch (trigger->firing_policy.type) {
- case LTTNG_TRIGGER_FIRING_POLICY_EVERY_N:
- if (trigger->firing_policy.current_count < trigger->firing_policy.threshold) {
- ready_to_fire = true;
- }
- break;
- case LTTNG_TRIGGER_FIRING_POLICY_ONCE_AFTER_N:
- if (trigger->firing_policy.current_count < trigger->firing_policy.threshold) {
- ready_to_fire = true;
- }
- break;
- default:
- abort();
- };
-
- return ready_to_fire;
-}
-
-LTTNG_HIDDEN
-void lttng_trigger_fire(struct lttng_trigger *trigger)
-{
- assert(trigger);
-
- trigger->firing_policy.current_count++;
-
- switch (trigger->firing_policy.type) {
- case LTTNG_TRIGGER_FIRING_POLICY_EVERY_N:
- if (trigger->firing_policy.current_count == trigger->firing_policy.threshold) {
- trigger->firing_policy.current_count = 0;
- }
-
- break;
- case LTTNG_TRIGGER_FIRING_POLICY_ONCE_AFTER_N:
- /*
- * TODO:
- * As an optimisation, deactivate the trigger condition and
- * remove any checks in the traced application or kernel since
- * the trigger will never fire again.
- */
- break;
- default:
- abort();
- };
-}
-