// dot -Tpng cc/animation/images/new-animation.png.dot > cc/animation/images/new-animation.png
// When making modifications run the above command to regenerate the diagram.

digraph G {
  label = "Starting a new composited animation";

  subgraph cluster_main {
    label = "Main thread";

    subgraph cluster_blink {
      node [style=filled];
      ScheduleVisualUpdate
      UpdateLifecycle -> RunPaintLifecyclePhase -> UpdateAnimations -> PreCommit -> CreateCompositorAnimation -> AttachCompositorTimeline;
      RunPaintLifecyclePhase -> PushPaintArtifactToCompositor;
      label = "third_party/blink/";
    }

    subgraph cluster_cc_main {
      node [style=filled];
      AttachAnimation -> SetAnimationTimeline -> RegisterKeyframeEffect;
      RegisterElement -> UpdateKeyframeEffectsTickingState;
      BeginMainFrame -> RequestMainFrameUpdate -> UpdateLifecycle;
      label = "cc/";
    }
    color=red;
  }

  subgraph cluster_impl {
    label = "Compositor thread";

    subgraph cluster_cc_impl {
      node [style=filled];
      ScheduledActionCommit -> FinishCommitOnImplThread -> PushPropertiesTo -> PushAttachedAnimationsToImplThread;
      ScheduledActionCommit -> CommitComplete -> ActivateAnimations;
      label = "cc/";
    }
    color=blue
  }

  ScheduleVisualUpdate -> BeginMainFrame [style=dashed];
  AttachCompositorTimeline -> AttachAnimation;
  PushPaintArtifactToCompositor -> RegisterElement;
  BeginMainFrame -> ScheduledActionCommit [style=dashed];

  subgraph cluster_legend {
    label = "Legend";
    node [shape=plaintext];
    sync -> L1;
    async -> L2 [style=dashed];
    L1 [label = ""];
    L2 [label = ""];
  }
}
