1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53

cc / animation / images / new-animation.png.dot [blame]

// 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 = ""];
  }
}