
The concept of the ActionManager acts as a sort of "Hub" that can receive various types of action and dispatch them to a set of registered handlers. One handler will handle the action or it'll cascade to other handlers. This model does not really fit the current evolution of the Action tracing and debugging: we can't foresee a good case where this behavior compose with the use-case behind the handlers. Instead we simplify it with a single callback installed on the Context. Differential Revision: https://reviews.llvm.org/D144811
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
//===- DebugCounterTest.cpp - Debug Counter Tests -------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Debug/Counter.h"
|
|
#include "mlir/Support/TypeID.h"
|
|
#include "gmock/gmock.h"
|
|
|
|
using namespace mlir;
|
|
using namespace mlir::tracing;
|
|
|
|
namespace {
|
|
|
|
struct CounterAction : public ActionImpl<CounterAction> {
|
|
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CounterAction)
|
|
static constexpr StringLiteral tag = "counter-action";
|
|
};
|
|
|
|
TEST(DebugCounterTest, CounterTest) {
|
|
DebugCounter counter;
|
|
counter.addCounter(CounterAction::tag, /*countToSkip=*/1,
|
|
/*countToStopAfter=*/3);
|
|
|
|
int count = 0;
|
|
auto noOp = [&]() {
|
|
++count;
|
|
return;
|
|
};
|
|
|
|
// The first execution is skipped.
|
|
counter(noOp, CounterAction{});
|
|
EXPECT_EQ(count, 0);
|
|
|
|
// The counter stops after 3 successful executions.
|
|
counter(noOp, CounterAction{});
|
|
EXPECT_EQ(count, 1);
|
|
counter(noOp, CounterAction{});
|
|
EXPECT_EQ(count, 2);
|
|
counter(noOp, CounterAction{});
|
|
EXPECT_EQ(count, 3);
|
|
counter(noOp, CounterAction{});
|
|
EXPECT_EQ(count, 3);
|
|
}
|
|
|
|
} // namespace
|