Skip to content

Commit

Permalink
Add task printer
Browse files Browse the repository at this point in the history
  • Loading branch information
syifan committed Apr 26, 2024
1 parent 20c32df commit 898b9e4
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 7 deletions.
24 changes: 21 additions & 3 deletions tracing/backtracetracer.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,40 @@
package tracing

import (
"log"
"fmt"
"sync"
)

// TaskPrinter can print tasks with a format.
type TaskPrinter interface {
Print(task Task)
}

type defaultTaskPrinter struct {
}

func (p *defaultTaskPrinter) Print(task Task) {
fmt.Printf("%s-%s@%s\n", task.Kind, task.What, task.Where)
}

// BackTraceTracer can record tasks incomplete tasks
type BackTraceTracer struct {
printer TaskPrinter
tracingTasks map[string]Task
lock sync.Mutex
}

// NewBackTraceTracer creates a new BackTraceTracer
func NewBackTraceTracer() *BackTraceTracer {
func NewBackTraceTracer(printer TaskPrinter) *BackTraceTracer {
t := &BackTraceTracer{
printer: printer,
tracingTasks: make(map[string]Task),
}

if t.printer == nil {
t.printer = &defaultTaskPrinter{}
}

return t
}

Expand All @@ -39,7 +57,7 @@ func (t *BackTraceTracer) EndTask(task Task) {
}

func (t *BackTraceTracer) DumpBackTrace(task Task) {
log.Printf("Task %s", task.ID)
t.printer.Print(task)

if task.ParentID == "" {
return
Expand Down
24 changes: 22 additions & 2 deletions tracing/backtracetracer_test.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
package tracing

import (
gomock "github.com/golang/mock/gomock"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

var _ = Describe("BackTraceTracer", func() {
var (
t *BackTraceTracer
mockCtrl *gomock.Controller
mockTaskPrinter *MockTaskPrinter
t *BackTraceTracer
)

BeforeEach(func() {
t = NewBackTraceTracer()
mockCtrl = gomock.NewController(GinkgoT())
mockTaskPrinter = NewMockTaskPrinter(mockCtrl)

t = NewBackTraceTracer(mockTaskPrinter)
})

AfterEach(func() {
mockCtrl.Finish()
})

It("should trace a single task", func() {
Expand Down Expand Up @@ -64,6 +74,8 @@ var _ = Describe("BackTraceTracer", func() {
It("should print single tasks", func() {
t.StartTask(Task{ID: "1"})

mockTaskPrinter.EXPECT().Print(Task{ID: "1"})

t.DumpBackTrace(Task{ID: "1"})
})

Expand All @@ -72,6 +84,14 @@ var _ = Describe("BackTraceTracer", func() {
t.StartTask(Task{ID: "2", ParentID: "1"})
t.StartTask(Task{ID: "3", ParentID: "2"})

e3 := mockTaskPrinter.EXPECT().
Print(Task{ID: "3", ParentID: "2"})
e2 := mockTaskPrinter.EXPECT().
Print(Task{ID: "2", ParentID: "1"}).
After(e3)
mockTaskPrinter.EXPECT().Print(Task{ID: "1"}).
After(e2)

t.DumpBackTrace(Task{ID: "3", ParentID: "2"})
})
})
37 changes: 36 additions & 1 deletion tracing/mock_tracing_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tracing/tracing_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
)

//go:generate mockgen -destination "mock_sim_test.go" -package $GOPACKAGE -write_package_comment=false github.com/sarchlab/akita/v4/sim TimeTeller
//go:generate mockgen -destination "mock_tracing_test.go" -package $GOPACKAGE -write_package_comment=false github.com/sarchlab/akita/v4/tracing NamedHookable
//go:generate mockgen -destination "mock_tracing_test.go" -package $GOPACKAGE -write_package_comment=false github.com/sarchlab/akita/v4/tracing NamedHookable,TaskPrinter

func TestTracing(t *testing.T) {
RegisterFailHandler(Fail)
Expand Down

0 comments on commit 898b9e4

Please sign in to comment.