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

Commit dae8314a authored by Nan Zhang's avatar Nan Zhang Committed by Gerrit Code Review
Browse files

Merge "Generate build timing metrics to proto format file"

parents bf35e33c 17f27677
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import (

	"android/soong/ui/build"
	"android/soong/ui/logger"
	"android/soong/ui/metrics"
	"android/soong/ui/status"
	"android/soong/ui/terminal"
	"android/soong/ui/tracer"
@@ -73,6 +74,8 @@ func main() {
	trace := tracer.New(log)
	defer trace.Close()

	met := metrics.New()

	stat := &status.Status{}
	defer stat.Finish()
	stat.AddOutput(terminal.NewStatusOutput(writer, os.Getenv("NINJA_STATUS")))
@@ -87,6 +90,7 @@ func main() {
	buildCtx := build.Context{ContextImpl: &build.ContextImpl{
		Context: ctx,
		Logger:  log,
		Metrics: met,
		Tracer:  trace,
		Writer:  writer,
		Status:  stat,
@@ -100,6 +104,9 @@ func main() {

	build.SetupOutDir(buildCtx, config)

	metricsPath := filepath.Join(config.OutDir(), "build_metrics")
	defer met.Dump(metricsPath)

	logsDir := config.OutDir()
	if config.Dist() {
		logsDir = filepath.Join(config.DistDir(), "logs")
@@ -116,7 +123,7 @@ func main() {
			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()))
				buildCtx.CompleteTrace(metrics.RunSetupTool, "startup", start_time, uint64(time.Now().UnixNano()))
			}
		}

+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ bootstrap_go_package {
    deps: [
        "soong-ui-build-paths",
        "soong-ui-logger",
        "soong-ui-metrics",
        "soong-ui-status",
        "soong-ui-terminal",
        "soong-ui-tracer",
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import (
	"os"
	"path/filepath"
	"strings"

	"android/soong/ui/metrics"
)

func removeGlobs(ctx Context, globs ...string) {
@@ -158,7 +160,7 @@ func installCleanIfNecessary(ctx Context, config Config) {
		return
	}

	ctx.BeginTrace("installclean")
	ctx.BeginTrace(metrics.PrimaryNinja, "installclean")
	defer ctx.EndTrace()

	prevConfig := strings.TrimPrefix(strings.TrimSuffix(string(prev), suffix), prefix)
+3 −0
Original line number Diff line number Diff line
@@ -217,6 +217,9 @@ func NewConfig(ctx Context, args ...string) Config {
	} else {
		content = strconv.FormatInt(time.Now().Unix(), 10)
	}
	if ctx.Metrics != nil {
		ctx.Metrics.SetBuildDateTime(content)
	}
	err := ioutil.WriteFile(buildDateTimeFile, []byte(content), 0777)
	if err != nil {
		ctx.Fatalln("Failed to write BUILD_DATETIME to file:", err)
+23 −4
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ import (
	"context"

	"android/soong/ui/logger"
	"android/soong/ui/metrics"
	"android/soong/ui/metrics/metrics_proto"
	"android/soong/ui/status"
	"android/soong/ui/terminal"
	"android/soong/ui/tracer"
@@ -31,6 +33,8 @@ type ContextImpl struct {
	context.Context
	logger.Logger

	Metrics *metrics.Metrics

	Writer terminal.Writer
	Status *status.Status

@@ -39,9 +43,12 @@ type ContextImpl struct {
}

// BeginTrace starts a new Duration Event.
func (c ContextImpl) BeginTrace(name string) {
func (c ContextImpl) BeginTrace(name, desc string) {
	if c.Tracer != nil {
		c.Tracer.Begin(name, c.Thread)
		c.Tracer.Begin(desc, c.Thread)
	}
	if c.Metrics != nil {
		c.Metrics.TimeTracer.Begin(name, desc, c.Thread)
	}
}

@@ -50,11 +57,23 @@ func (c ContextImpl) EndTrace() {
	if c.Tracer != nil {
		c.Tracer.End(c.Thread)
	}
	if c.Metrics != nil {
		c.Metrics.SetTimeMetrics(c.Metrics.TimeTracer.End(c.Thread))
	}
}

// CompleteTrace writes a trace with a beginning and end times.
func (c ContextImpl) CompleteTrace(name string, begin, end uint64) {
func (c ContextImpl) CompleteTrace(name, desc string, begin, end uint64) {
	if c.Tracer != nil {
		c.Tracer.Complete(name, c.Thread, begin, end)
		c.Tracer.Complete(desc, c.Thread, begin, end)
	}
	if c.Metrics != nil {
		realTime := end - begin
		c.Metrics.SetTimeMetrics(
			metrics_proto.PerfInfo{
				Desc:      &desc,
				Name:      &name,
				StartTime: &begin,
				RealTime:  &realTime})
	}
}
Loading