private void ProcessTaskStartEvent(TaskStartedEvent e, TimelineBuilderContext context) { Debug.Assert(context.HasOpenBuilds); Debug.Assert(context.HasOpenProjects); Debug.Assert(context.HasOpenTargets); BuildEntry taskEntry = new BuildEntry(e); context.OpenTaskEntries.Add(taskEntry); // a task's parent is a Target TaskEventContext taskContext = taskEntry.Context as TaskEventContext; Debug.Assert(taskContext != null); BuildEntry parentEntry = context.OpenTargetEntries.Find(targetEntry => { TargetEventContext targetContext = targetEntry.Context as TargetEventContext; Debug.Assert(targetContext != null); return(targetContext.ContextId == taskContext.ContextId && targetContext.ProjectId == taskContext.ProjectId && targetContext.TargetId == taskContext.TargetId); }); Debug.Assert(parentEntry != null); parentEntry.AddChild(e); parentEntry.AddChild(taskEntry); }
private void ProcessMessageEvent(MessageEvent e, TimelineBuilderContext context) { Debug.Assert(context.HasOpenBuilds); // a message can be executed as part of any entry: build, project, target or task BuildEntry parentEntry = null; // part of the build? if (e.Context == null) { parentEntry = context.RootEntry; } else { MessageEventContext messageContext = e.Context as MessageEventContext; // part of a task? if (messageContext.TaskId != null) { Debug.Assert(messageContext.ProjectId != null); Debug.Assert(messageContext.TargetId != null); parentEntry = context.OpenTaskEntries.Find(taskEntry => { TaskEventContext taskContext = taskEntry.Context as TaskEventContext; Debug.Assert(taskContext != null); return(taskContext.NodeId == messageContext.NodeId && taskContext.ContextId == messageContext.ContextId && taskContext.ProjectId == messageContext.ProjectId && taskContext.TargetId == messageContext.TargetId && taskContext.TaskId == messageContext.TaskId); }); } // part of a target? else if (messageContext.TargetId != null) { Debug.Assert(messageContext.ProjectId != null); Debug.Assert(messageContext.TaskId == null); parentEntry = context.OpenTargetEntries.Find(targetEntry => { TargetEventContext targetContext = targetEntry.Context as TargetEventContext; Debug.Assert(targetContext != null); return(targetContext.NodeId == messageContext.NodeId && targetContext.ContextId == messageContext.ContextId && targetContext.ProjectId == messageContext.ProjectId && targetContext.TargetId == messageContext.TargetId); }); } // part of a project? else if (messageContext.ProjectId != null) { Debug.Assert(messageContext.TargetId == null); Debug.Assert(messageContext.TaskId == null); parentEntry = context.OpenProjectEntries.Find(projectEntry => { ProjectEventContext projectContext = projectEntry.Context as ProjectEventContext; Debug.Assert(projectContext != null); return(projectContext.NodeId == messageContext.NodeId && projectContext.ContextId == messageContext.ContextId && projectContext.ProjectId == messageContext.ProjectId); }); } // part of the build itself? else { parentEntry = context.RootEntry; } } Debug.Assert(parentEntry != null); parentEntry.AddChild(e); }