summaryrefslogtreecommitdiff
path: root/doc/developers/performance.dot
blob: 96e962018efce912a51177e575dd44fa71f48e4e (plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* ESTIMATES ARE VERY ROUGH APPROXIMATIONS */
strict digraph performance {
  rankdir=LR
  /* completed node list */
  node[color="green"];
  add_analysis[label="Work required analysis for add"];
  annotate_analysis[label="Work required analysis for annotate"];
  branch_analysis[label="Work required analysis for branch"];
  bundle_analysis[label="Work required analysis for creating a bundle"];
  commit_analysis[label="Work required analysis for commit"];
  fetch_analysis[label="Work required analysis for push/pull"];
  gc_analysis[label="Work required analysis for gc"];
  missing_analysis[label="Work required analysis for missing"];
  revert_analysis[label="Work required analysis for revert"];
  revert_path_analysis[label="Work required analysis for revert of selected paths"];
  status_analysis[label="Work required analysis for status"];
  uncommit_analysis[label="Work required analysis for uncommit"];
  wt_disk_order[label="Working Tree disk ordering\n6-8 weeks"];
  iter_merge[label="iter_changes based merge\n2 days"];
  diff_analysis[label="Work required analysis for diff"];

  /* uncompleted node list - add new tasks here */
  node[color="blue"];
  log_analysis[label="Work required analysis for log"];
  log_path_analysis[label="Work required analysis for log of selected paths."];
  diff_path_analysis[label="Work required analysis for diff of selected paths"];
  merge_analysis[label="Work required analysis for merge"];
  update_analysis[label="Work required analysis for update"];
  cbranch_analysis[label="Work required analysis for cbranch"];

  add_api_stack[label="Targeted API stack for add"];
  branch_api_stack[label="Targeted API stack for branch"];
  bundle_api_stack[label="Targeted API stack for creating a bundle"];
  annotate_api_stack[label="Targeted API stack for annotate"];
  status_api_stack[label="Targeted API stack for status"];
  commit_api_stack[label="Targeted API stack for commit"];
  fetch_api_stack[label="Targeted API stack for push/pull"];
  log_api_stack[label="Targeted API stack for log"];
  log_path_api_stack[label="Targeted API stack for log of selected paths."];
  diff_api_stack[label="Targeted API stack for diff"];
  gc_api_stack[label="Targeted API stack for gc"];
  revert_api_stack[label="Targeted API stack for revert"];
  revert_path_api_stack[label="Targeted API stack for revert of selected paths"];
  merge_api_stack[label="Targeted API stack for merge"];
  uncommit_api_stack[label="Targeted API stack for uncommit"];
  missing_api_stack[label="Targeted API stack for missing"];
  update_api_stack[label="Targeted API stack for update"];
  cbranch_api_stack[label="Targeted API stack for cbranch"];

  data_collation[label="Stream API for inserting/obtaining revision data.\n1 month"];
  repository_stacking[label="Repository stacking API\n2 months"];
  new_container[label="New container format\n2 weeks"]
  xdelta[label="Xdelta sanity/learning\n2 weeks"];
  xdelta_imp[label="Xdelta implementation\n1 week"];
  q_splitting[label="Question radix directory splitting\n2 weeks"];
  i_splitting[label="Inventory storage changed to answer what-changed quickly\n6-8 weeks"]
  per_file_graph[label="Provide an API for per-file\n graph data rather than\n physical storage coupled knits api.\n1 days"];
  deprecate_versionedfile_api[label="Deprecate the public API for access to physical knit storage."];
  anno_cache[label="Annotations become a cache:\n logically separate data\n2 weeks"]
  anno_regen[label="Annotation regeneration\n"];
  anno_kinds[label="Different styles of annotation"];
  memory_copies[label="Stop requiring full memory copies of files"];
  repo_disk_order[label="Repository disk ordering\n1 month"];
  pack_repository[label="Pack based repository format"];
  graph_api[label="Network-efficient revision-graph API\n3 week"];
  validators[label="Build new validators for revisions and trees."];

  /* under discussion/optional */
  node[color="yellow"];
  hash_names[label="Use hashes as names for some objects\n(to reduce tracking metadata and ease interoperability."];
  gdfo_api[label="GDFO API\n1 day"];
  gdfo_cache[label="GDFO Cache\n1 week"];
  gdfo_usage[label="GDFO Usage\n3 days"];

  /* dependencies */
  gc_analysis -> gc_api_stack;
  gdfo_api -> gdfo_cache;
  gdfo_api -> gdfo_usage;
  xdelta -> xdelta_imp;
  q_splitting -> i_splitting;
  per_file_graph -> deprecate_versionedfile_api;
  anno_regen -> anno_kinds;
  anno_cache -> anno_regen;
  add_analysis -> add_api_stack;
  annotate_analysis -> annotate_api_stack -> anno_cache;
  annotate_api_stack -> per_file_graph -> graph_api;
  annotate_api_stack -> memory_copies;
  annotate_api_stack -> hash_names;
  branch_analysis -> branch_api_stack -> repository_stacking;
  branch_api_stack -> memory_copies;
  bundle_analysis -> bundle_api_stack -> data_collation;
  bundle_api_stack -> repository_stacking;
  bundle_api_stack -> validators;
  bundle_api_stack -> graph_api;
  bundle_api_stack -> memory_copies;
  bundle_api_stack -> new_container;
  bundle_analysis -> hash_names;
  cbranch_analysis -> cbranch_api_stack;
  commit_analysis -> commit_api_stack -> data_collation;
  commit_api_stack -> per_file_graph;
  commit_api_stack -> validators;
  commit_api_stack -> memory_copies;
  commit_api_stack -> hash_names;
  diff_analysis -> diff_api_stack;
  diff_api_stack -> memory_copies;
  diff_path_analysis -> diff_api_stack -> i_splitting;
  diff_api_stack -> hash_names;
  fetch_analysis -> fetch_api_stack -> data_collation;
  fetch_api_stack -> repository_stacking;
  fetch_api_stack -> graph_api;
  fetch_api_stack -> memory_copies;
  fetch_api_stack -> hash_names;
  repository_stacking -> graph_api;
  hash_names -> i_splitting;
  log_analysis -> log_api_stack -> i_splitting;
  log_path_analysis -> log_path_api_stack;
  log_path_api_stack -> per_file_graph;
  merge_analysis -> merge_api_stack -> iter_merge -> i_splitting;
  merge_api_stack -> memory_copies;
  missing_analysis -> missing_api_stack -> repository_stacking;
 missing_api_stack -> graph_api;
  new_container -> pack_repository;
  pack_repository -> xdelta_imp;
  pack_repository -> repo_disk_order;
  per_file_graph -> hash_names;
  repository_stacking -> pack_repository;
  repository_stacking -> new_container;
  revert_analysis -> revert_api_stack -> data_collation;
  revert_path_analysis -> revert_path_api_stack;
  revert_api_stack -> memory_copies;
  status_analysis -> status_api_stack;
  status_api_stack -> memory_copies;
  uncommit_analysis -> uncommit_api_stack -> data_collation;
  uncommit_api_stack -> graph_api;
  update_analysis -> update_api_stack;
  update_api_stack -> memory_copies;
}