File: YGBenchmark.test.js

package info (click to toggle)
node-yarnpkg 4.1.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 24,752 kB
  • sloc: javascript: 38,953; ansic: 26,035; cpp: 7,247; sh: 2,829; makefile: 724; perl: 493
file content (109 lines) | stat: -rw-r--r-- 3,149 bytes parent folder | download
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
/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

const ITERATIONS = 2000;

YGBENCHMARK("Stack with flex", () => {
  const root = Yoga.Node.create();
  root.setWidth(100);
  root.setHeight(100);

  const measureCounter = getMeasureCounter(Yoga);

  for (let i = 0; i < ITERATIONS; i++) {
    const child = Yoga.Node.create();
    child.setMeasureFunc(measureCounter.inc);
    child.setFlex(1);
    root.insertChild(child, 0);
  }

  root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
  root.freeRecursive();
});

YGBENCHMARK("Align stretch in undefined axis", () => {
  const root = Yoga.Node.create();

  const measureCounter = getMeasureCounter(Yoga);

  for (let i = 0; i < ITERATIONS; i++) {
    const child = Yoga.Node.create();
    child.setMeasureFunc(measureCounter.inc);
    child.setHeight(20);
    root.insertChild(child, 0);
  }

  root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
  root.freeRecursive();
});

YGBENCHMARK("Nested flex", () => {
  const root = Yoga.Node.create();

  const measureCounter = getMeasureCounter(Yoga);

  const iterations = Math.pow(ITERATIONS, 1 / 2);

  for (let i = 0; i < iterations; i++) {
    const child = Yoga.Node.create();
    child.setFlex(1);
    root.insertChild(child, 0);

    for (let ii = 0; ii < iterations; ii++) {
      const grandChild = Yoga.Node.create();
      grandChild.setMeasureFunc(measureCounter.inc);
      grandChild.setFlex(1);
      child.insertChild(grandChild, 0);
    }
  }

  root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
  root.freeRecursive();
});

YGBENCHMARK("Huge nested layout", () => {
  const root = Yoga.Node.create();

  const iterations = Math.pow(ITERATIONS, 1 / 4);

  for (let i = 0; i < iterations; i++) {
    const child = Yoga.Node.create();
    child.setFlexGrow(1);
    child.setWidth(10);
    child.setHeight(10);
    root.insertChild(child, 0);

    for (let ii = 0; ii < iterations; ii++) {
      const grandChild = Yoga.Node.create();
      grandChild.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
      grandChild.setFlexGrow(1);
      grandChild.setWidth(10);
      grandChild.setHeight(10);
      child.insertChild(grandChild, 0);

      for (let iii = 0; iii < iterations; iii++) {
        const grandGrandChild = Yoga.Node.create();
        grandGrandChild.setFlexGrow(1);
        grandGrandChild.setWidth(10);
        grandGrandChild.setHeight(10);
        grandChild.insertChild(grandGrandChild, 0);

        for (let iiii = 0; iiii < iterations; iiii++) {
          const grandGrandGrandChild = Yoga.Node.create();
          grandGrandGrandChild.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
          grandGrandGrandChild.setFlexGrow(1);
          grandGrandGrandChild.setWidth(10);
          grandGrandGrandChild.setHeight(10);
          grandGrandChild.insertChild(grandGrandGrandChild, 0);
        }
      }
    }
  }

  root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
  root.freeRecursive();
});