Chromiumの規模を確認する その2：Blinkとv8


# 目的
[前回](https://qiita.com/rairaii/items/64bf445d29f00d9aa13a) はChromium全体について Line of Code (LOC) を用いて規模を確認した
今回は Chromium 内部をもう少し探っていく

# 結論
- Chromium のレンダリングエンジン blink は third_party ディレクトリに存在
- Chromium のJavaScriptエンジン v8 は Chromium のリポジトリとは別に管理
- Chromium は利用する多数のライブラリを専用に抱える。そのライブラリ群は Chromium のリポジトリとは別リポジトリで管理
- Blink, v8 それぞれの規模は下記の通り

|Component| LOC(C/C++/Assembly/Java) |
|:-:|:-:|
|blink|1,760,045|
|v8|1,483,480|

# chromium/src のディレクトリ毎のLOC
src 以下のファイルとディレクトリについてLOCを測る

```shell-session
$ cd ~/work/chromium/
$ time for d in src/*; \
do ~/work/cloc-1.88/cloc --quiet --csv --timeout=60 $d | \
   tail +3 | sed "s@^@$d,@"; \
done |  \
sed  1i"dir, files, language, blank, comment, code"  > ../cloc_chromium_src.csv

real	6m2.908s
user	5m46.510s
sys	0m16.376s

$ cat ../cloc_chromium_src.csv | head 
dir, files, language, blank, comment, code
src/android_webview,416,Java,11695,11418,64403
src/android_webview,175,C++,5058,2653,24321
src/android_webview,156,C/C++ Header,2299,1709,6700
src/android_webview,53,Markdown,1108,0,3808
src/android_webview,221,XML,151,289,3508
src/android_webview,16,Python,660,776,2402
src/android_webview,41,HTML,38,4,720
src/android_webview,1,JSON,0,0,271
src/android_webview,3,JavaScript,30,21,166
```

|	dir	|	LOC	|
|:--|--:|
|	src/third_party	|	10,670,497	|
|	src/chrome	|	5,350,427	|
|	src/components	|	2,370,634	|
|	src/content	|	1,141,190	|
|	src/ui	|	1,046,091	|
|	src/net	|	714,807	|
|	src/tools	|	667,950	|
|	src/ios	|	538,292	|
|	src/ash	|	509,143	|
|	src/media	|	439,579	|
|	src/chromeos	|	379,771	|
|	src/base	|	356,995	|
|	src/testing	|	351,565	|
|	src/gpu	|	312,811	|
|	src/extensions	|	278,730	|
|	src/services	|	269,956	|
|	src/cc	|	222,584	|
|	src/native_client_sdk	|	208,934	|
|	src/ppapi	|	162,051	|
|	src/remoting	|	161,515	|
|	src/device	|	157,469	|
|	src/chromecast	|	116,089	|
|	src/android_webview	|	106,476	|
|	src/mojo	|	94,043	|
|	src/sandbox	|	64,292	|
|	src/build	|	61,501	|
|	src/storage	|	56,590	|
|	src/docs	|	56,024	|
|	src/weblayer	|	55,395	|
|	src/google_apis	|	35,610	|
|	src/fuchsia	|	25,295	|
|	src/pdf	|	21,943	|
|	src/headless	|	17,238	|
|	src/ipc	|	15,733	|
|	src/printing	|	14,912	|
|	src/url	|	13,108	|
|	src/courgette	|	12,228	|
|	src/sql	|	9,704	|
|	src/dbus	|	9,599	|
|	src/skia	|	8,445	|
|	src/jingle	|	6,981	|
|	src/crypto	|	5,925	|
|	src/rlz	|	5,529	|
|	src/gin	|	5,478	|
|	src/PRESUBMIT.py	|	4,090	|
|	src/styleguide	|	3,463	|
|	src/PRESUBMIT_test.py	|	3,156	|
|	src/apps	|	2,423	|
|	src/cloud_print	|	1,963	|
|	src/buildtools	|	1,501	|
|	src/infra	|	1,413	|
|	src/google_update	|	1,138	|
|	src/codelabs	|	480	|
|	src/PRESUBMIT_test_mocks.py	|	162	|
|	src/CODE_OF_CONDUCT.md	|	68	|
|	src/build_overrides	|	23	|
|	src/README.md	|	13	|

# C, C++, Assembly, Java で確認
テスト用のHTMLやJavaScript等が多く含まれるため、今回も C, C++, Assembly, Java に絞って確認する
third_party, chrome が約350万LOCと以前巨大な規模ではあることが確認できる

|	dir	|	LOC	|
|:--|--:|
|	src/third_party	|	3,544,748	|
|	src/chrome	|	3,478,179	|
|	src/components	|	1,658,843	|
|	src/content	|	901,105	|
|	src/ui	|	697,196	|
|	src/net	|	532,119	|
|	src/media	|	422,926	|
|	src/ash	|	412,267	|
|	src/base	|	343,026	|
|	src/chromeos	|	314,487	|
|	src/gpu	|	293,099	|
|	src/services	|	258,855	|
|	src/extensions	|	236,711	|
|	src/cc	|	221,712	|
|	src/device	|	142,905	|
|	src/ppapi	|	136,546	|
|	src/remoting	|	127,667	|
|	src/chromecast	|	108,793	|
|	src/android_webview	|	95,424	|
|	src/native_client_sdk	|	83,531	|
|	src/mojo	|	73,801	|
|	src/ios	|	72,722	|
|	src/sandbox	|	61,725	|
|	src/storage	|	56,191	|
|	src/weblayer	|	52,430	|
|	src/tools	|	48,036	|
|	src/google_apis	|	33,970	|
|	src/fuchsia	|	24,214	|
|	src/pdf	|	21,926	|
|	src/ipc	|	15,665	|
|	src/printing	|	14,107	|
|	src/url	|	13,014	|
|	src/headless	|	12,060	|
|	src/courgette	|	11,623	|
|	src/sql	|	9,630	|
|	src/dbus	|	9,593	|
|	src/testing	|	7,266	|
|	src/jingle	|	6,981	|
|	src/skia	|	6,930	|
|	src/crypto	|	5,738	|
|	src/gin	|	5,461	|
|	src/rlz	|	5,257	|
|	src/apps	|	2,423	|
|	src/build	|	1,747	|
|	src/cloud_print	|	1,619	|
|	src/codelabs	|	241	|
|	src/buildtools	|	59	|

# third_party 内を確認する

```shell-session
$ time for d in src/third_party/*; \
do ~/work/cloc-1.88/cloc --quiet --csv --timeout=60 $d | \
   tail +3 | sed "s@^@$d,@"; \
done | \
sed  1i"dir, files, language, blank, comment, code"  > ../cloc_chromium_src_third_party.csv ; 

real	3m49.084s
user	3m34.197s
sys	0m15.386s
raiko@raikovm:~/work/chromium$ cat ../cloc_chromium_src_third_party.csv | head
dir, files, language, blank, comment, code
src/third_party/abseil-cpp,333,C++,15358,15320,93190
src/third_party/abseil-cpp,264,C/C++ Header,8936,27011,38682
src/third_party/abseil-cpp,7,Windows Module Definition,0,0,12565
src/third_party/abseil-cpp,27,CMake,439,563,6025
src/third_party/abseil-cpp,22,Bazel,451,355,5672
src/third_party/abseil-cpp,8,Pascal,334,1923,722
src/third_party/abseil-cpp,2,SQL,0,0,657
src/third_party/abseil-cpp,14,Bourne Shell,126,292,632
src/third_party/abseil-cpp,6,Python,144,161,552
```

Chromiumのレンダリングエンジンである blink が 176万LOC と半分近くを締めている

|	dir	|	LOC|
|:--|--:|
|	src/third_party/blink	|	1,760,045	|
|	src/third_party/protobuf	|	340,312	|
|	src/third_party/boringssl	|	227,051	|
|	src/third_party/libxml	|	153,944	|
|	src/third_party/abseil-cpp	|	131,872	|
|	src/third_party/crashpad	|	100,740	|
|	src/third_party/win_build_output	|	94,840	|
|	src/third_party/hunspell	|	72,325	|
|	src/third_party/libwebp	|	62,410	|
|	src/third_party/opus	|	54,366	|
|	src/third_party/tcmalloc	|	52,179	|
|	src/third_party/libaom	|	44,609	|
|	src/third_party/libvpx	|	39,354	|
|	src/third_party/wtl	|	39,242	|
|	src/third_party/libxslt	|	31,300	|
|	src/third_party/brotli	|	31,247	|
|	src/third_party/libpng	|	28,171	|
|	src/third_party/unrar	|	23,636	|
|	src/third_party/khronos	|	23,420	|
|	src/third_party/zlib	|	20,982	|
|	src/third_party/mesa_headers	|	15,729	|
|	src/third_party/webdriver	|	15,010	|
|	src/third_party/libusb	|	13,822	|
|	src/third_party/ots	|	12,164	|
|	src/third_party/fontconfig	|	10,973	|
|	src/third_party/lzma_sdk	|	10,362	|
|	src/third_party/android_crazy_linker	|	10,197	|
|	src/third_party/wds	|	9,895	|
|	src/third_party/shell-encryption	|	9,511	|
|	src/third_party/afl	|	8,446	|
|	src/third_party/weston	|	7,631	|
|	src/third_party/libjingle_xmpp	|	7,532	|
|	src/third_party/inspector_protocol	|	6,650	|
|	src/third_party/wayland	|	6,074	|
|	src/third_party/qcms	|	5,607	|
|	src/third_party/pffft	|	4,697	|
|	src/third_party/sqlite	|	4,166	|
|	src/third_party/fft2d	|	3,697	|
|	src/third_party/woff2	|	3,664	|
|	src/third_party/zxcvbn-cpp	|	3,589	|
|	src/third_party/ijar	|	3,523	|
|	src/third_party/libXNVCtrl	|	2,739	|
|	src/third_party/libaddressinput	|	2,718	|
|	src/third_party/leveldatabase	|	2,560	|
|	src/third_party/decklink	|	2,396	|
|	src/third_party/s2cellid	|	2,335	|
|	src/third_party/simplejson	|	2,318	|
|	src/third_party/private_membership	|	2,132	|
|	src/third_party/gvr-android-sdk	|	1,992	|
|	src/third_party/android_data_chart	|	1,628	|
|	src/third_party/liburlpattern	|	1,395	|
|	src/third_party/private-join-and-compute	|	1,323	|
|	src/third_party/libbrlapi	|	1,260	|
|	src/third_party/android_swipe_refresh	|	1,199	|
|	src/third_party/x11proto	|	1,150	|
|	src/third_party/android_deps	|	1,109	|
|	src/third_party/opencv	|	1,035	|
|	src/third_party/libsecret	|	1,010	|
|	src/third_party/google_trust_services	|	903	|
|	src/third_party/gif_player	|	807	|
|	src/third_party/modp_b64	|	640	|
|	src/third_party/webrtc_overrides	|	582	|
|	src/third_party/android_opengl	|	577	|
|	src/third_party/pycoverage	|	530	|
|	src/third_party/ocmock	|	503	|
|	src/third_party/rnnoise	|	481	|
|	src/third_party/one_euro_filter	|	346	|
|	src/third_party/microsoft_webauthn	|	314	|
|	src/third_party/android_media	|	271	|
|	src/third_party/libx11	|	260	|
|	src/third_party/grpc	|	243	|
|	src/third_party/bspatch	|	237	|
|	src/third_party/libudev	|	225	|
|	src/third_party/googletest	|	223	|
|	src/third_party/sudden_motion_sensor	|	207	|
|	src/third_party/ashmem	|	207	|
|	src/third_party/ukey2	|	203	|
|	src/third_party/libva_protected_content	|	196	|
|	src/third_party/markupsafe	|	178	|
|	src/third_party/speech-dispatcher	|	176	|
|	src/third_party/dav1d	|	172	|
|	src/third_party/minizip	|	159	|
|	src/third_party/apple_apsl	|	154	|
|	src/third_party/freetype	|	149	|
|	src/third_party/iccjpeg	|	147	|
|	src/third_party/robolectric	|	144	|
|	src/third_party/harfbuzz-ng	|	139	|
|	src/third_party/liblouis	|	122	|
|	src/third_party/breakpad	|	107	|
|	src/third_party/android_provider	|	100	|
|	src/third_party/gvr-android-keyboard	|	97	|
|	src/third_party/libprotobuf-mutator	|	83	|
|	src/third_party/snappy	|	66	|
|	src/third_party/lcov	|	61	|
|	src/third_party/jsoncpp	|	61	|
|	src/third_party/expat	|	56	|
|	src/third_party/mozilla	|	44	|
|	src/third_party/ced	|	33	|
|	src/third_party/v4l-utils	|	32	|
|	src/third_party/libxcb-keysyms	|	31	|
|	src/third_party/libsync	|	24	|
|	src/third_party/widevine	|	15	|
|	src/third_party/libphonenumber	|	7	|
|	src/third_party/r8	|	6	|
|	src/third_party/crc32c	|	0	|

# JavaScriptエンジン v8 はどこだ？
レンダリングエンジンの blink が176万LOCならば、JavaScriptエンジンの v8 はどの程度の規模なのか？
これまでの調査結果には v8 の名前がでてきていない。

v8 は Chromium とは別プロジェクト、別リポジトリで開発されているため、Chromiumのリポジトリには含まれていないのだ

v8のリポジトリとハッシュ値は src 直下の[DEPS](https://source.chromium.org/chromium/chromium/src/+/refs/tags/89.0.4388.4:DEPS)ファイルで確認できる

```shell-session
$ cd ~/work/chromium/src/
$ git show 89.0.4388.4:DEPS | grep v8
  'v8_revision': '8b42c4e7175e5d28c57d72dade99c52a144bec1f',
              'version': 'y8fIfH8Leo2cPm7iGCYnBxZpwOlgLv8rm2mlcmJlvGsC',
  'src/v8':
    Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
  'v8',
                '--bucket', 'v8-wasm-fuzzer',
                '-s', 'src/v8/test/fuzzer/wasm_corpus.tar.gz.sha1',

$ git show 89.0.4388.4:DEPS | grep chromium_git | grep https
  'chromium_git': 'https://chromium.googlesource.com',
```

上記から Chromium 89.0.4388.4 が利用している v8 リポジトリとリビジョンがわかる
v8のリポジトリをクローンしてLOCを調査する

```shell-session
$ cd ~/work/
$ git clone https://chromium.googlesource.com/v8/v8.git
Cloning into 'v8'...
remote: Sending approximately 751.83 MiB ...
remote: Counting objects: 7660, done
remote: Total 811720 (delta 655777), reused 811720 (delta 655777)
Receiving objects: 100% (811720/811720), 751.83 MiB | 17.33 MiB/s, done.
Resolving deltas: 100% (655777/655777), done.
Checking out files: 100% (12719/12719), done.

$ cd v8/
raiko@raikovm:~/work/v8$ ls
AUTHORS              COMMON_OWNERS  ENG_REVIEW_OWNERS  INTL_OWNERS         MIPS_OWNERS   S390_OWNERS  third_party
BUILD.gn             custom_deps    gni                LICENSE             OWNERS        samples      tools
build_overrides      DEPS           include            LICENSE.fdlibm      PPC_OWNERS    src          WATCHLISTS
CODE_OF_CONDUCT.md   DIR_METADATA   infra              LICENSE.strongtalk  PRESUBMIT.py  test
codereview.settings  docs           INFRA_OWNERS       LICENSE.v8          README.md     testing

$ git checkout 8b42c4e7175e5d28c57d72dade99c52a144bec1f
Checking out files: 100% (134/134), done.
Note: checking out '8b42c4e7175e5d28c57d72dade99c52a144bec1f'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 8b42c4e717 Version 8.9.270
$ git status
HEAD detached at 8b42c4e717
nothing to commit, working tree clean
$ cd ..
$ time ~/work/cloc-1.88/cloc --quiet --timeout=60 v8

github.com/AlDanial/cloc v 1.88  T=19.90 s (542.6 files/s, 136592.3 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
C++                                   1533         137484          93595        1227034
JavaScript                            7520          76782         110335         634044
C/C++ Header                          1326          55731          52482         254340
Python                                 216           7062           6997          29864
JSON                                    41              3              0          12634
TypeScript                              26            642            261           5396
HTML                                    28            430            108           4451
C                                       14            411            200           2051
Bourne Shell                            35            323            487           1400
CSS                                      5            246              5           1212
Markdown                                25            405              0           1194
Scheme                                   1             13             51            222
vim script                               3             28             30            143
WebAssembly                             12             15              0            105
R                                        1             12             22             79
Assembly                                 3             11             59             55
YAML                                     4              4             19             51
XML                                      1              8             16             44
DOS Batch                                2              4              3             29
make                                     1              4             27             15
Windows Module Definition                1              0              0              5
Bourne Again Shell                       1              2              3              3
---------------------------------------------------------------------------------------
SUM:                                 10799         279620         264700        2174371
---------------------------------------------------------------------------------------

real	0m20.109s
user	0m12.909s
sys	0m6.805s
```

C, C++, Assembly だけに絞ると約148万LOC
blink が v8 よりも若干規模が大きい状況だと確認できる

|Component| LOC(C/C++/Assembly/Java) |
|:-:|:-:|
|blink|1,760,045|
|v8|1,483,480|


# DEPS から Chromium リポジトリとは別に管理されているライブラリを確認する
v8 と同じように Chromium リポジトリとは別に管理されているライブラリが下記のように確認できる

これら全てを Chromium として LOC をカウントし始めると、どのライブラリまでが Chromium の一部だと扱われるべきで、どのライブラリは外部ライブラリとして扱われるべきなのか？という議論になってしまうだろう。
JavaScriptエンジンである v8 は Chromium の一部として扱うほうが Chromiumの規模を確認するには適切に思える。その他のライブラリはどう扱うべきだろうか？


```shell-session
$ grep -e _git DEPS | grep -e https
  'android_git': 'https://android.googlesource.com',
  'aomedia_git': 'https://aomedia.googlesource.com',
  'boringssl_git': 'https://boringssl.googlesource.com',
  'chromium_git': 'https://chromium.googlesource.com',
  'dawn_git': 'https://dawn.googlesource.com',
  'pdfium_git': 'https://pdfium.googlesource.com',
  'quiche_git': 'https://quiche.googlesource.com',
  'skia_git': 'https://skia.googlesource.com',
  'swiftshader_git': 'https://swiftshader.googlesource.com',
  'webrtc_git': 'https://webrtc.googlesource.com',

$ grep -e android_git \
 -e aomedia_git \
-e boringssl_git \
-e chromium_git \
-e dawn_git \
-e pdfium_git \
-e quiche_git \
-e skia_git \
-e swiftshader_git \
-e webrtc_git DEPS | cat -n
     1	  'android_git': 'https://android.googlesource.com',
     2	  'aomedia_git': 'https://aomedia.googlesource.com',
     3	  'boringssl_git': 'https://boringssl.googlesource.com',
     4	  'chromium_git': 'https://chromium.googlesource.com',
     5	  'dawn_git': 'https://dawn.googlesource.com',
     6	  'pdfium_git': 'https://pdfium.googlesource.com',
     7	  'quiche_git': 'https://quiche.googlesource.com',
     8	  'skia_git': 'https://skia.googlesource.com',
     9	  'swiftshader_git': 'https://swiftshader.googlesource.com',
    10	  'webrtc_git': 'https://webrtc.googlesource.com',
    11	    Var('chromium_git') + '/chromium/llvm-project/cfe/tools/clang-format.git@' +
    12	    Var('chromium_git') +
    13	    Var('chromium_git') +
    14	    Var('chromium_git') +
    15	    Var('chromium_git') + '/media_router.git' + '@' + 'd4389c097c61fa8c5aa5eb7c3ba34ee203dd62e3',
    16	      'url': Var('chromium_git') + '/chromium/deps/xz.git' + '@' + 'eecaf55632ca72e90eb2641376bce7cdbc7284f7',
    17	    Var('chromium_git') + '/chromium/canvas_bench.git' + '@' + 'a7b40ea5ae0239517d78845a5fc9b12976bfc732',
    18	    Var('chromium_git') + '/chromium/frame_rate/content.git' + '@' + 'c10272c88463efeef6bb19c9ec07c42bc8fe22b9',
    19	    Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248',
    20	      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + 'ff524fb646253b0cbc05aa6d0b327b6b3ddd0385',
    21	      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '891b1b683a7ed73f98f8064672a95ca77060df42',
    22	      'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git' + '@' + '91c532d921e1f37f7e0f213c534df16df6061ec1',
    23	      'url': Var('chromium_git') + '/external/github.com/google/GTXiLib.git' + '@' + '3e09baa61b2c13fe98029d53b1783f4ca9edaabf',
    24	      'url': Var('chromium_git') + '/external/github.com/facebook/fishhook.git' + '@' + '66315a9c251edfe92f669ae2deeac0d75374c948',
    25	      'url': Var('chromium_git') + '/external/github.com/swisspol/GCDWebServer.git' + '@' + '43555c66627f6ed44817855a0f6d465f559d30e0',
    26	      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '6cf2fb727b73cf7ac8ef0722b4de8afdfd1bdf9d',
    27	      'url': Var('chromium_git') + '/external/github.com/material-foundation/material-font-disk-loader-ios.git' + '@' + '93acc021e3034898716028822cb802a3a816be7e',
    28	      'url': Var('chromium_git') + '/external/github.com/material-foundation/material-internationalization-ios.git' + '@' + 'd8f32464ac97d5551c8db19de916170ae87cfa90',
    29	      'url': Var('chromium_git') + '/external/github.com/material-foundation/material-roboto-font-loader-ios.git' + '@' + '4aa51e906e5671c71d24e991f1f10d782a58409f',
    30	      'url': Var('chromium_git') + '/external/github.com/material-foundation/material-sprited-animation-view-ios.git' + '@' + '8af9adaa182044cf2920dfb620b863669e1aeb7c',
    31	      'url': Var('chromium_git') + '/external/github.com/material-foundation/material-text-accessibility-ios.git' + '@' + '499b45d1895b565096302a209c0c728df03b95d4',
    32	      'url': Var('chromium_git') + '/external/github.com/material-motion/motion-interchange-objc.git' + '@' + '8e25f1ca599543dc77e4016b588763dcba6cbac8',
    33	      'url': Var('chromium_git') + '/external/github.com/material-motion/motion-animator-objc.git' + '@' + '0581bc3dfacd34e40381e9cf45a15070b3868ba7',
    34	      'url': Var('chromium_git') + '/external/github.com/material-motion/motion-transitioning-objc.git' + '@' + '5bb0d577dd78472536480496ace115bc593ed0e1',
    35	      'url': Var('chromium_git') + '/external/github.com/hamcrest/OCHamcrest.git' + '@' + '92d9c14d13bb864255e65c09383564653896916b',
    36	      'url': Var('chromium_git') + '/external/github.com/WebKit/webkit.git' +
    37	    Var('chromium_git') + '/chromium/cdm.git' + '@' + 'fc5afac6847dc61addc1177103aa602e71a9ecac',
    38	      'url': Var('chromium_git') + '/native_client/src/native_client.git' + '@' + Var('nacl_revision'),
    39	    Var('quiche_git') + '/quiche.git' + '@' +  Var('quiche_revision'),
    40	    Var('chromium_git') + '/external/github.com/google/shaderc.git@' +
    41	      'url': Var('android_git') + '/platform/external/protobuf.git' + '@' + '7fca48d8ce97f7ba3ab8eea5c472f1ad3711762f',
    42	      'url': Var('chromium_git') + '/android_ndk.git' + '@' + '27c0a8d090c666a50e40fceb4ee5b40b1a2d3f87',
    43	      'url': Var('chromium_git') + '/external/gob/android/platform/frameworks/support/browser.git' + '@' + '65086eb5e52c16778fa7b4f157156d17b176fcb3',
    44	    Var('chromium_git') + '/angle/angle.git' + '@' +  Var('angle_revision'),
    45	    Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + '441e643915bea71a0234d85121109d2816f18984',
    46	    Var('dawn_git') + '/dawn.git' + '@' +  Var('dawn_revision'),
    47	    Var('dawn_git') + '/tint.git' + '@' +  Var('tint_revision'),
    48	    Var('chromium_git') + '/external/github.com/glfw/glfw.git@' +  '2de2589f910b1a85905f425be4d32f33cec092df',
    49	      'url': Var('chromium_git') + '/external/apache-portable-runtime.git' + '@' + 'c3f11fcd86b42922834cae91103cf068246c6bb6',
    50	    'url': Var('chromium_git') + '/external/github.com/google/benchmark.git' + '@' + 'ffe1342eb2faa7d2e7c35b4db2ccf99fab81ec20',
    51	    Var('boringssl_git') + '/boringssl.git' + '@' +  Var('boringssl_revision'),
    52	    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + 'e3d485f73f5836fdd6fb287ab96973c4f63175e1',
    53	    Var('chromium_git') + '/catapult.git' + '@' + Var('catapult_revision'),
    54	    Var('chromium_git') + '/external/github.com/google/compact_enc_det.git' + '@' + 'ba412eaaacd3186085babcd901679a48863c7dd5',
    55	      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'd46475f87758f99f2eb030682f32b69957d152c8',
    56	    Var('chromium_git') + '/external/github.com/google/cld_3.git' + '@' + '06f695f1c8ee530104416aab5dcf2d6a1414a56a',
    57	    Var('chromium_git') + '/external/colorama.git' + '@' + '799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8',
    58	    Var('chromium_git') + '/external/github.com/google/crc32c.git' + '@' + '5998f8451548244de8cde7fab387a550e7c4497d',
    59	      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '42f3f3cea40612784b38532b9e5d1a54a3d2174c',
    60	    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '9b5dd7ab8a98140a1b73b9dea29245605137cd09',
    61	    Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
    62	    Var('chromium_git') + '/chromium/dom-distiller/dist.git' + '@' + 'f339eb9463714c3d31657c8ee1bd53d1c7e5c555',
    63	    Var('chromium_git') + '/external/gitlab.com/libeigen/eigen.git' + '@' + '2ce2f5198929caab4b41a6ad1b9c93f67d8b9a69',
    64	    'url': Var('chromium_git') + '/external/github.com/googlefonts/emoji-metadata' + '@' + '9d8e5cfe52ee763b7dd91e33e5a50250efbf7135',
    65	    Var('chromium_git') + '/external/github.com/google/farmhash.git' + '@' + '816a4ae622e964763ca0862d9dbd19324a1eaf45',
    66	    Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '841aa72c9e153ae5f952e31e4b6406870555922d',
    67	    Var('chromium_git') + '/chromium/deps/flac.git' + '@' + 'af862024c8c8fa0ae07ced05e89013d881b00596',
    68	    Var('chromium_git') + '/external/github.com/google/flatbuffers.git' + '@' + '6df40a2471737b27271bdd9b900ab5f3aec746c7',
    69	      'url': Var('chromium_git') + '/external/fontconfig.git' + '@' + '452be8125f0e2a18a7dfef469e05d19374d36307',
    70	    Var('chromium_git') + '/external/github.com/Maratyszcza/FP16.git' + '@' + 'febbb1c163726b5db24bed55cc9dc42529068997',
    71	    Var('chromium_git') + '/external/github.com/google/gemmlowp.git' + '@' + 'fda83bdc38b118cc6b56753bd540caa49e570745',
    72	      'url': Var('chromium_git') + '/external/github.com/grpc/grpc.git' + '@' + '4ac9c6f755463a2321f84b0cb2d631e1828faedb',
    73	    Var('chromium_git') + '/chromium/src/third_party/freetype2.git' + '@' + Var('freetype_revision'),
    74	    Var('chromium_git') + '/external/github.com/freetype/freetype2-testing.git' + '@' + Var('freetype_testing_revision'),
    75	    Var('chromium_git') + '/external/github.com/harfbuzz/harfbuzz.git' + '@' + Var('harfbuzz_revision'),
    76	    Var('chromium_git') + '/external/github.com/google/emoji-segmenter.git' + '@' + Var('emoji_segmenter_revision'),
    77	    Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'a5ee0e00923c355ef3aad2b2829365a9fde84430',
    78	      'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'),
    79	    Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + Var('googletest_revision'),
    80	      'url': Var('chromium_git') + '/native_client/deps/third_party/gnu_binutils.git' + '@' + 'f4003433b61b25666565690caf3d7a7a1a4ec436',
    81	      'url': Var('chromium_git') + '/chromium/deps/gperf.git' + '@' + 'd892d79f64f9449770443fb06da49b5a1e5d33c1',
    82	      'url': Var('chromium_git') + '/external/github.com/googlevr/gvr-android-sdk.git' + '@' + '233e7fe922a543e0bc55382d64cacd047307d0e7',
    83	      'url': Var('chromium_git') + '/external/github.com/google-ar/arcore-android-sdk.git' + '@' + '54861e38cceb406021fc8ece495f82387376af62',
    84	    Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167',
    85	    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '899e18383fd732b47e6978db2b960a1b2a80179b',
    86	      'url': Var('chromium_git') + '/external/github.com/c2nes/javalang.git' + '@' + 'f98ffcb31d1daa57fbe5bd6def8ad7c3126d8242',
    87	    Var('chromium_git') + '/external/github.com/open-source-parsers/jsoncpp.git'
    88	      'url': Var('chromium_git') + '/external/junit.git' + '@' + '64155f8a9babcfcf4263cf4d08253a1556e75481',
    89	    Var('chromium_git') + '/external/leveldb.git' + '@' + 'c46e79c760125f9adb87a575d94034032637f8d0',
    90	    Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' + '@' +  Var('libfuzzer_revision'),
    91	    Var('chromium_git') + '/external/libaddressinput.git' + '@' + '390dfc08e3806a2125d08d4d8d034a24d587d77a',
    92	    Var('aomedia_git') + '/aom.git' + '@' +  '43927e4611e7c3062a67ebaca38a625faa9a39d6',
    93	    Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'),
    94	    Var('chromium_git') + '/external/github.com/google/nearby-connections.git' + '@' + Var('nearby_revision'),
    95	    Var('chromium_git') + '/external/github.com/google/securemessage.git' + '@' + Var('securemessage_revision'),
    96	    Var('chromium_git') + '/external/github.com/google/ukey2.git' + '@' + Var('ukey2_revision'),
    97	      'url': Var('chromium_git') + '/chromiumos/third_party/libdrm.git' + '@' + '0190f49a139e7069d7cad6a6890832831da1aa8b',
    98	    Var('chromium_git') + '/external/github.com/libexpat/libexpat.git' + '@' + Var('libexpat_revision'),
    99	      'url': Var('chromium_git') + '/chromiumos/platform2/libipp.git' + '@' + '6c45a4f3a05cb5dd700414fe4d94cf685159d3ce',
   100	    Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git' + '@' + '518d81558c797486e125e37cb529d65b560a6ea0',
   101	      'url': Var('chromium_git') + '/external/liblouis-github.git' + '@' + '03d7d72d983d47c17f7de95bbeae89fe33e41943',
   102	    Var('chromium_git') + '/external/libphonenumber.git' + '@' + '68eba9d6ee8b11fb58ece36b6c46d07965d7f7ff',
   103	    Var('chromium_git') + '/external/github.com/google/libprotobuf-mutator.git' + '@' +  Var('libprotobuf-mutator'),
   104	    Var('chromium_git') + '/chromium/deps/libsrtp.git' + '@' + '7990ca64c616b150a9cb4714601c4a3b0c84fe91',
   105	      'url': Var('chromium_git') + '/aosp/platform/system/core/libsync.git' + '@' + 'f4f4387b6bf2387efbcfd1453af4892e8982faf6',
   106	      'url': Var('chromium_git') + '/chromium/src/third_party/libunwindstack.git' + '@' + '11659d420a71e7323b379ea8781f07c6f384bc7e',
   107	    Var('chromium_git') + '/webm/libvpx.git' + '@' +  'b5d77a48d740e211a130c8e45d9353ef8c154a47',
   108	    Var('chromium_git') + '/webm/libwebm.git' + '@' + '51ca718c3adf0ddedacd7df25fe45f67dc5a9ce1',
   109	    Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '93b1b332cd60b56ab90aea14182755e379c28a80',  # from r1770
   110	      'url': Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'),
   111	      'url': Var('chromium_git') + '/linux-syscall-support.git' + '@' + Var('lss_revision'),
   112	      'url': Var('chromium_git') + '/external/github.com/google/material-design-icons.git' + '@' +
   113	      'url': Var('chromium_git') + '/native_client/deps/third_party/mingw-w64/mingw/bin.git' + '@' + '3cc8b140b883a9fe4986d12cfd46c16a093d3527',
   114	      'url': Var('chromium_git') + '/chromiumos/platform/minigbm.git' + '@' + 'bc4f023bfcc51cf9dcfcfec5bf4177b2e607dd68',
   115	      'url': Var('chromium_git') + '/external/github.com/nmoinvaz/minizip' + '@' + '1ff40343b55e738d941abb51c70eddb803db16e2',
   116	      'url': Var('chromium_git') + '/external/mockito/mockito.git' + '@' + '04a2a289a4222f80ad20717c25144981210d2eac',
   117	      'url': Var('chromium_git') + '/chromium/deps/nacl_sdk_binaries.git' + '@' + '759dfca03bdc774da7ecbf974f6e2b84f43699a5',
   118	      'url': Var('chromium_git') + '/chromium/deps/nasm.git' + '@' +
   119	    Var('chromium_git') + '/external/github.com/intel/ARM_NEON_2_x86_SSE.git' + '@' + '42b2bebacee25452e150095ef4480b3fa26e30f5',
   120	      'url': Var('chromium_git') + '/external/netty-tcnative.git' + '@' + '5b46a8ef4a39c39c576fcdaaf718b585d75df463',
   121	      'url': Var('chromium_git') + '/external/netty4.git' + '@' + 'cc4420b13bb4eeea5b1cf4f93b2755644cd3b120',
   122	    Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5',
   123	    Var('chromium_git') + '/openscreen' + '@' + '6051838253185d8478f5fa4d70c96ef6c0241f94',
   124	    'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '97cfe495bb7a3853266b646d1c79e169387f9c7a',
   125	    Var('pdfium_git') + '/pdfium.git' + '@' +  Var('pdfium_revision'),
   126	      'url': Var('chromium_git') + '/external/pefile.git' + '@' + '72c6ae42396cb913bcab63c15585dc3b5c3f92f1',
   127	    Var('android_git') + '/platform/external/perfetto.git' + '@' + '704a1aa4c802df97a8203e052b77db2eabdb317a',
   128	      'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
   129	      'url': Var('chromium_git') + '/chromiumos/third_party/pyelftools.git' + '@' + '19b3e610c86fcadb837d252c794cb5e8008826ae',
   130	    Var('chromium_git') + '/external/github.com/google/quic-trace.git' + '@' + '2dccbe8e996d43c6d93b69e4f6d024f015e8c488',
   131	    Var('chromium_git') + '/external/github.com/GoogleChromeLabs/pywebsocket3.git' + '@' + 'faf478a0453ceae78f2a3bc11c6c21e13362628f',
   132	    Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + 'c33d1680c7e9ab7edea02d7465a8db13e80b558d',
   133	      'url': Var('chromium_git') + '/external/github.com/kennethreitz/requests.git' + '@' + 'c7e0fc087ceeadb8b4c84a0953a422c474093d6d',
   134	    Var('chromium_git') + '/external/github.com/google/ruy.git' + '@' + '34ea9f4993955fa1ff4eb58e504421806b7f2e8f',
   135	    Var('skia_git') + '/skia.git' + '@' +  Var('skia_revision'),
   136	    Var('chromium_git') + '/external/smhasher.git' + '@' + 'e87738e57558e0ec472b2fc3a643b838e5b6e88f',
   137	    Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + 'ea368c2f07de5f31146a10214f27d15091b09771',
   138	    Var('chromium_git') + '/chromium/deps/sqlite.git' + '@' + '702a79c7d77331cbe2838c4b3c5fab529f75f7c2',
   139	    Var('swiftshader_git') + '/SwiftShader.git' + '@' +  Var('swiftshader_revision'),
   140	    'url': Var('chromium_git') + '/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git' + '@' + '90a76f78e73579ab6bc4f300953cec39b27d058b',
   141	    Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + 'fcc4b966f1265f466e82617020af93670141b009',
   142	      'url': Var('chromium_git') + '/external/github.com/google/turbine.git' + '@' + '3c31e67ae25b5e43713fd868e3a9b535ff6298af',
   143	      'url': Var('chromium_git') + '/chromium/third_party/ub-uiautomator.git' + '@' + '00270549ce3161ae72ceb24712618ea28b4f9434',
   144	    Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + 'a3c3ef666b7a5e4c93ebae5a7462add6f86f5cf2',
   145	  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e59ae1af7571c2994183768c2a36fff8b1854437',
   146	    Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '6c656df63da5995a932aafd45b32af1974e497d9',
   147	      'url': Var('chromium_git') + '/external/anongit.freedesktop.org/git/wayland/wayland.git' + '@' + 'eb1339edd398b9f5328816931e585db4229aa132',
   148	      'url': Var('chromium_git') + '/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git' + '@' + '684cd23ae31fafb9eda2a0cd15edb4e96de92259',
   149	      'url': Var('chromium_git') + '/external/github.com/01org/wds' + '@' + 'a488b169d724d6b4cfcd7037dbab1f1c2bf04f3b',
   150	    Var('chromium_git') + '/external/github.com/SeleniumHQ/selenium/py.git' + '@' + 'd0045ec570c1a77612db35d1e92f05e1d27b4d53',
   151	    Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '3e3f152617996e4a175fd0b597a1936824b371f3',
   152	    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '3c2fe3888658d82b47ca831d59a2e07579619c2d',
   153	    Var('webrtc_git') + '/src.git' + '@' + '1c5e63e5451374783aaf0259f5c23d3688a5b2ff',
   154	     Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
   155	    Var('skia_git') + '/external/github.com/google/wuffs.git' + '@' +  Var('wuffs_revision'),
   156	      'url': Var('chromium_git') + '/external/anongit.freedesktop.org/git/wayland/weston.git' + '@' + 'db905f467169f9f131c5ddc6038296f866d5daeb',
   157	      'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
   158	    Var('chromium_git') + '/chromium/deps/acid3.git' + '@' + '6be0a66a1ebd7ebc5abc1b2f405a945f6d871521',
   159	    Var('chromium_git') + '/infra/luci/client-py.git' + '@' +  Var('swarming_revision'),
   160	    Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
   161	      'url': Var('android_git') + '/platform/prebuilts/build-tools.git' + '@' + '5794e96eb8bae47bb48feee915d99583573b3887',
```