File: diffs.md

package info (click to toggle)
chromium 145.0.7632.109-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,974,804 kB
  • sloc: cpp: 36,197,696; ansic: 7,602,761; javascript: 3,563,590; python: 1,649,324; xml: 838,427; asm: 717,087; pascal: 185,708; sh: 88,786; perl: 88,718; objc: 79,984; sql: 59,811; cs: 42,452; fortran: 24,101; makefile: 21,022; tcl: 15,277; php: 14,022; yacc: 9,066; ruby: 7,553; awk: 3,720; lisp: 3,233; lex: 1,328; ada: 727; jsp: 228; sed: 36
file content (47 lines) | stat: -rw-r--r-- 2,030 bytes parent folder | download | duplicates (13)
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
# SuperSize Diffs

Diffs are represented by a `DeltaSizeInfo`, where each `DeltaSymbol` contains a
reference to a `before` and `after` symbol.

For new symbols, `before` is None, and for removed symbols, `after` is None.

## Diff Algorithm

The diffing algorithm is optimized for the common case of many unchanged
symbols.

1. Create a map of `$DIFF_KEY` -> `symbol` for all "before" symbols.
2. For all "after" symbols, find matches using the map.
3. Repeat steps 1 and 2 for all remaining symbols using different `$DIFF_KEYs`
4. Treat all unmatches symbols as added or removed.

`DeltaSymbols` for symbols that have not changed are created when diffing, but
discarded when writing `.sizediff` files (see [file_format.md](file_format.md)).

The `$DIFF_KEYs` are:

1. `DIFF_KEY=(container, section, full_name, path, s.size_without_padding)`
   * Ensures identical symbols are matched.
2. `DIFF_KEY=(container, section, full_name, path)`
   * Ensures identical symbols that have changed in size are matched.
3. `DIFF_KEY=(container, section, name, path)`
   * Match up symbols with the same name, but differing function signatures.
4. `DIFF_KEY=(container, section, full_name)`
   * Match symbols that have changed paths.
   * Does not often match moved Java files, since package names tend to change.

## Diffs and Padding

Since symbol padding tends to fluctuate from build to build, changes to padding
is not considered. Padding is removed from all symbols when diffing and
per-section cumulative change in padding is shown by a symbol called
`Overhead: aggregate padding of diff'ed symbol`.

## Diffs and Aliases

No special treatment is made for symbols aliases. If the number of symbols in an
alias group changes, a diff will show a size change for all symbols in the
group. In the past there was an attempt to have diffs exclude showing changes to
the number of aliases in a group, but it never worked reliably and added a lot
of complexity. E.g., A symbol from one alias group changes to belong to a
different alias group.