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

Commit d9f6fa28 authored by Dan Willemsen's avatar Dan Willemsen
Browse files

Add build tracing

This creates a rotating build.trace.gz in the out directory that can be
loaded with chrome://tracing. It'll include start and end timings for
make/soong/kati/ninja, and it will import and time-correct the ninja log
files.

Test: m -j; load out/build.trace.gz in chrome://tracing
Test: multiproduct_kati -keep; load out/multiproduct*/build.trace.gz
Change-Id: Ic060fa9515eb88d95dbe16712479dae9dffcf626
parent c2af0bed
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ blueprint_go_binary {
    deps: [
        "soong-ui-build",
        "soong-ui-logger",
        "soong-ui-tracer",
    ],
    srcs: [
        "main.go",
+16 −5
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import (

	"android/soong/ui/build"
	"android/soong/ui/logger"
	"android/soong/ui/tracer"
)

// We default to number of cpus / 4, which seems to be the sweet spot for my
@@ -64,13 +65,20 @@ func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	build.SetupSignals(log, cancel, log.Cleanup)
	trace := tracer.New(log)
	defer trace.Close()

	buildCtx := &build.ContextImpl{
	build.SetupSignals(log, cancel, func() {
		trace.Close()
		log.Cleanup()
	})

	buildCtx := build.Context{&build.ContextImpl{
		Context:        ctx,
		Logger:         log,
		Tracer:         trace,
		StdioInterface: build.StdioImpl{},
	}
	}}

	failed := false

@@ -95,6 +103,7 @@ func main() {

	build.SetupOutDir(buildCtx, config)
	log.SetOutput(filepath.Join(config.OutDir(), "build.log"))
	trace.SetOutput(filepath.Join(config.OutDir(), "build.trace"))

	vars, err := build.DumpMakeVars(buildCtx, config, nil, nil, []string{"all_named_products"})
	if err != nil {
@@ -130,11 +139,13 @@ func main() {
			productLog := logger.New(&bytes.Buffer{})
			productLog.SetOutput(filepath.Join(productOutDir, "build.log"))

			productCtx := &build.ContextImpl{
			productCtx := build.Context{&build.ContextImpl{
				Context:        ctx,
				Logger:         productLog,
				Tracer:         trace,
				StdioInterface: build.NewCustomStdio(nil, f, f),
			}
				Thread:         trace.NewThread(product),
			}}

			productConfig := build.NewConfig(productCtx)
			productConfig.Environment().Set("OUT_DIR", productOutDir)
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ blueprint_go_binary {
    deps: [
        "soong-ui-build",
        "soong-ui-logger",
        "soong-ui-tracer",
    ],
    srcs: [
        "main.go",
+14 −6
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import (

	"android/soong/ui/build"
	"android/soong/ui/logger"
	"android/soong/ui/tracer"
)

func indexList(s string, list []string) int {
@@ -51,26 +52,33 @@ func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	build.SetupSignals(log, cancel, log.Cleanup)
	trace := tracer.New(log)
	defer trace.Close()

	buildCtx := &build.ContextImpl{
	build.SetupSignals(log, cancel, func() {
		trace.Close()
		log.Cleanup()
	})

	buildCtx := build.Context{&build.ContextImpl{
		Context:        ctx,
		Logger:         log,
		Tracer:         trace,
		StdioInterface: build.StdioImpl{},
	}
	}}
	config := build.NewConfig(buildCtx, os.Args[1:]...)

	log.SetVerbose(config.IsVerbose())
	if err := os.MkdirAll(config.OutDir(), 0777); err != nil {
		log.Fatalf("Error creating out directory: %v", err)
	}
	build.SetupOutDir(buildCtx, config)
	log.SetOutput(filepath.Join(config.OutDir(), "build.log"))
	trace.SetOutput(filepath.Join(config.OutDir(), "build.trace"))

	if start, ok := os.LookupEnv("TRACE_BEGIN_SOONG"); ok {
		if !strings.HasSuffix(start, "N") {
			if start_time, err := strconv.ParseUint(start, 10, 64); err == nil {
				log.Verbosef("Took %dms to start up.",
					time.Since(time.Unix(0, int64(start_time))).Nanoseconds()/time.Millisecond.Nanoseconds())
				buildCtx.CompleteTrace("startup", start_time, uint64(time.Now().UnixNano()))
			}
		}
	}
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ bootstrap_go_package {
    pkgPath: "android/soong/ui/build",
    deps: [
        "soong-ui-logger",
        "soong-ui-tracer",
    ],
    srcs: [
        "build.go",
Loading