提交 55719274 编写于 作者: S Steven Rostedt 提交者: Steven Rostedt

tracing/filter: Optimize short ciruit check

The test if we should break out early for OR and AND operations
can be optimized by comparing the current result with
  (pred->op == OP_OR)

That is if the result is true and the op is an OP_OR, or
if the result is false and the op is not an OP_OR (thus an OP_AND)
we can break out early in either case. Otherwise we continue
processing.

Cc: Tom Zanussi <tzanussi@gmail.com>
Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
上级 61e9dea2
......@@ -426,9 +426,15 @@ int filter_match_preds(struct event_filter *filter, void *rec)
pred->parent, &move);
continue;
case MOVE_UP_FROM_LEFT:
/* Check for short circuits */
if ((match && pred->op == OP_OR) ||
(!match && pred->op == OP_AND)) {
/*
* Check for short circuits.
*
* Optimization: !!match == (pred->op == OP_OR)
* is the same as:
* if ((match && pred->op == OP_OR) ||
* (!match && pred->op == OP_AND))
*/
if (!!match == (pred->op == OP_OR)) {
if (pred == root)
break;
pred = get_pred_parent(pred, preds,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册