LoginSignup
5
2

More than 3 years have passed since last update.

Chromiumの規模を確認する その1 全体像を把握する

Posted at

目的

Chromium は大規模ソフトウェアだと言われているが、実際にどのくらい巨大なのか?

結論

Chromiumのバージョン89 (Chromium M89)を対象に調査した結果
C, C++, Assembly, Java の4つの言語分で 1458万LOC 規模のソフトウェアであることがわかる
image.png

前提

  • git はシステムにインストール済み

cloc のセットアップ

Lines of Code を確認するために cloc を利用する

cloc-1.88 をダウンロード
~/work ディレクトリに展開する
~/work/cloc-1.88/cloc
を利用して確認を進める

$ cd ~/work/cloc-1.88/
$ ls 
cloc  Dockerfile  Dockerfile.build  LICENSE  README.md  release_notes-1.88.txt  sqlite_formatter  tests  Unix
$ ~/work/cloc-1.88/cloc --quiet ~/work/cloc-1.88/ | head

github.com/AlDanial/cloc v 1.88  T=0.75 s (686.8 files/s, 77031.0 lines/s)
----------------------------------------------------------------------------------------
Language                              files          blank        comment           code
----------------------------------------------------------------------------------------
Perl                                      8           1661           2828          25471
YAML                                    263             11            265           6373
Markdown                                  2            278             31           2649
ANTLR Grammar                             2            200             59           1012
R                                         3             95            312            698

ワークディレクトリの作成

$ mkdir ~/work
$ cd ~/work

~/work ディレクトリをワークディレクトリとして利用する

Chromium のソースコードを取得

$ time git clone https://chromium.googlesource.com/chromium/src.git
Cloning into 'src'...
remote: Sending approximately 24.26 GiB ...
remote: Counting objects: 382855, done
remote: Finding sources: 100% (2000/2000)
remote: Total 15358388 (delta 11470578), reused 15357784 (delta 11470578)
Receiving objects: 100% (15358388/15358388), 24.24 GiB | 16.21 MiB/s, done.
Resolving deltas: 100% (11470578/11470578), done.
Checking out files: 100% (350121/350121), done.

real    53m44.743s
user    69m10.111s
sys 12m31.795s

ニューロ光のマンション契約(2Gbpsベストエフォート)で一時間弱

Chromium のバージョン毎のタグ一覧を確認

$ cd ~/work/chromium/src/
$ git tag | sort  -V -r | awk  -F'.' '!colname[$1]++{print}'

最新の一覧だけ確認したければ

$ git tag | sort  -V -r | awk  -F'.' '!colname[$1]++{print}' | head

pre_blink_merge
89.0.4388.4
88.0.4324.91
87.0.4280.151
86.0.4240.261
85.0.4183.162
84.0.4147.142
83.0.4103.122
82.0.4085.28
81.0.4044.156

Chromium の Lines of Code (LOC) を確認

対象とするタグ

後で再現可能なように現時点での最新のタグ(89.0.4388.4)のソースを利用して確認する

$ git checkout 89.0.4388.4

ファイル使用量

LOC確認の前にファイル使用量を確認

種別 サイズ
ソースコード 3.8Gbyte
gitリポジトリ 25Gbyte
$ du -sh ./ 
29G ./
$ du -sch ./* | grep total
3.8G    total
$ du -scmh ./.[^.]* | sort -rh
25G total
25G ./.git
20K ./.git-blame-ignore-revs
16K ./.gn
12K ./.vpython
12K ./.gitignore
4.0K    ./.yapfignore
4.0K    ./.vpython3
4.0K    ./.gitattributes
4.0K    ./.eslintrc.js
4.0K    ./.clang-tidy
4.0K    ./.clang-format

Lines of Code (LOC) を確認

cloc を使って LOC を測る

$ cd ~/work/chromium
$ time ~/work/cloc-1.88/cloc --timeout=60 --quiet --csv src/ | tail +2 > ../cloc_chromium.csv

real    7m48.491s
user    6m48.471s
sys 0m38.958s

$ cat ../cloc_chromium.csv | head
files,language,blank,comment,code,"github.com/AlDanial/cloc v 1.88  T=467.54 s (507.7 files/s, 76413.4 lines/s)"
47069,C++,1970819,1278644,10111955
81049,HTML,398626,80545,3620880
41008,C/C++ Header,823045,1048798,2722502
19048,JavaScript,412960,772606,2404686
10090,XML,130155,22365,2294151
3974,JSON,3635,0,1881341
7920,Java,202940,264064,1045148
5416,Python,180546,237202,729130
3748,Objective-C++,105525,74753,508202

全言語トータルで2700万LOCを超えている

files language blank comment code
47069 C++ 1970819 1278644 10111955
81049 HTML 398626 80545 3620880
41008 C/C++ Header 823045 1048798 2722502
19048 JavaScript 412960 772606 2404686
10090 XML 130155 22365 2294151
3974 JSON 3635 0 1881341
7920 Java 202940 264064 1045148
5416 Python 180546 237202 729130
3748 Objective-C++ 105525 74753 508202
1082 C 83319 103703 475527
188 Assembly 20562 8538 229407
3156 SVG 8907 12172 157712
1769 Markdown 42821 5 140597
225 C# 11340 16854 118294
2375 XHTML 3388 2916 113824
2301 IDL 14248 1 100310
1231 CSS 12690 5993 71603
127 Objective-C 8515 8123 56855
796 Protocol Buffers 14217 32043 54752
1164 Mojo 13325 34607 43445
425 reStructuredText 21435 15833 37497
684 YAML 2603 1732 27378
740 PHP 4170 9833 26776
392 Bourne Shell 4752 6581 22143
184 Perl 4111 5454 20371
57 JSON5 430 1617 16928
26 Windows Module Definition 75 76 12849
81 make 1884 1717 11639
153 diff 1407 6993 11333
19 DTD 2079 2387 9728
68 CMake 772 735 8528
40 Bazel 697 599 8057
33 m4 1034 427 7742
132 SQL 180 348 7526
32 Ruby 947 439 5830
122 INI 1156 2 3166
18 MSBuild script 34 33 2506
46 Bourne Again Shell 572 615 2313
79 XSLT 155 117 2224
16 Vuejs Component 168 186 1556
43 DOS Batch 323 94 1539
13 Maven 77 37 1501
1 TeX 2 11 1441
33 Jinja Template 121 25 1292
26 Windows Resource File 265 591 1237
20 Dockerfile 165 169 1225
3 Groovy 101 138 1126
16 Pascal 884 5060 1078
9 XSD 192 171 961
4 CoffeeScript 118 32 920
8 Swift 95 133 699
7 Go 83 61 683
5 JSX 112 60 677
1 WiX source 95 64 650
6 Starlark 105 122 646
7 Lisp 143 207 462
18 TypeScript 94 109 462
1 yacc 47 41 402
2 Elm 114 29 399
7 TOML 52 1 263
6 vim script 52 95 191
1 Gradle 33 35 177
2 Haxe 25 5 137
7 Sass 25 0 131
1 EJS 1 0 126
3 Dart 20 7 102
8 PowerShell 14 15 95
1 ANTLR Grammar 33 0 94
6 Mako 29 13 93
7 Handlebars 0 0 88
3 HLSL 8 9 63
1 SWIG 14 28 56
3 GLSL 17 32 48
1 TNSDL 16 0 48
1 awk 5 3 17
2 sed 11 20 17
1 Standard ML 1 0 9
1 Arduino Sketch 4 5 8
1 Gencat NLS 0 0 1
1 WebAssembly 0 0 1
237,370 SUM 4,513,740 4,067,078 27,145,576

C, C++, Java, Assembly に注目

HTMLやJavaScript等はテスト用途のコードが多い
ソフトウェアの実際の実装に利用されているであろう主要な4言語 (C, C++, Java, Assembly) だけに注目する
4言語のみで 1458万LOC 規模のソフトウェアである

language code
C++ 10,111,955
C/C++ Header 2,722,502
C 475,527
Java 1,045,148
Assembly 229,407
総計 14,584,539


image.png

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2