Поиск пути к исходному коду Chromium - PullRequest
22 голосов
/ 09 сентября 2011

Я только что проверил источник хрома, но мне отчаянно нужно научиться ориентироваться в этом монстре.

Как мне искать части кода, которые реализуют интересующее меня поведение / функции?

Допустим, я хочу увидеть, что происходит после ввода URL-адреса в адресную строку.Как мне найти этот кусок кода?

Или, что я хочу посмотреть, что произойдет, когда при разборе HTML будет достигнут определенный тег.

Передо мной огромное количествоисходный код, и нет навыков навигации по нему.Как мне выучить этот навык?

Ответы [ 2 ]

11 голосов
/ 12 октября 2011

Моя рекомендация для погружения - посмотреть на источник для http://code.google.com/p/chromiumembedded/.

Это своего рода сжатая версия Chrome, и если вы посмотрите на файлы, которые он специально использует, либо включенные в его исходное дерево, либо файлы, включенные в него из репозитория Chromium в целом. Кодовая база Chromium - это огромное количество вещей, большинство из которых на самом деле отсутствует в браузере Есть тонна извлеченного кода из сторонних репозиториев, которые затем сводятся в процессе сборки, или реализация Chromium находится где-то еще в дереве, есть много побочных проектов, которые (хотя и интересны и являются потрясающим ресурсом для широкого круга вещи) помешает вам достичь своей цели - отточить реализацию браузера и то, как это сочетается.

CEF великолепен, потому что вы можете видеть кого-то, кто уже выполнил процесс объединения всего этого вместе, чтобы создать проект, специально предназначенный для просмотра в браузере и ничего больше. Вы можете легко увидеть, какие части в основном получены из webkit, вы можете увидеть, где кроссовер входит в реализации Google, и вы можете довольно легко увидеть, как V8 добавляется в смесь.

Я говорю «легко» в относительном выражении, потому что мы все еще говорим огромное количество кода в целом. CEF поместит вас в центр требований, но этот материал все еще тянет огромное количество различных вещей из остальной части дерева. Компиляция занимает около часа на действительно хорошем компьютере с 12 гигабайтами оперативной памяти и 8 ядрами, а сгенерированные файлы занимают примерно 6-10 гигабайт в зависимости.

По крайней мере, не будет никакого быстрого прыжка в мелкий конец, чтобы выбрать что-то здесь или там по частям. Браузеры являются невероятно сложными частями разработки обязательно, потому что они должны объединить такое огромное количество отдельных частей функциональности, а затем объединить их в общий контекст. Вы можете найти одну вещь, которую вы ищете, но вы обнаружите, что она является частью библиотеки классов, которая, вероятно, состоит из десятков или сотен файлов, которая, в свою очередь, использует еще сотню этих библиотек для выполнения каждой задачи. таким образом, чтобы действительно что-то убрать, вам придется потратить время на то, чтобы получить гораздо больше информации, чем любая другая информация.

Редактировать: о, также как ваш конкретный пример.

src является корнем http://src.chromium.org/viewvc/chrome/trunk/src

/ хром http://src.chromium.org/viewvc/chrome/trunk/src/chrome

Дерево "chrome" в основном содержит прямые реализации (хотя много чего там нет, большая часть даже, но это отправная точка). Это частично совпадает с Chromeos (Chromeos - это своего рода браузер Chromium, доведенный до безумного экстрима)

/ chrome / browser http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/

Заставляет вас приблизиться к тому месту, где вы хотите быть. Вы начинаете видеть конкретные ссылки на вещи, которые вы можете сопоставить с браузером, такие как вкладки и еще много чего (игнорируя гигантского слона самой реализации самого браузера, который занимает все пространство ума во всем этом)

/ chrome / browser / ui http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/

Приводит вас туда, где большая часть кода пользовательского интерфейса для браузера. Это может сбивать с толку, когда происходит пересечение или когда что-то переносится, например, в корневом каталоге src есть «пользовательский интерфейс», в котором есть какое-то пересечение.

И наконец http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/omnibox/

Который содержит на удивление небольшое количество кода. Но это то, что вы найдете много. Код здесь представляет собой реализацию ряда классов, созданных в других местах. Для графического компонента, не относящегося к веб-интерфейсу, вы обнаружите, что он в основном указывает на корневой «пользовательский интерфейс» и на нативные элементы виджетов, где находится основная часть кода обработки событий, если я правильно помню.

1 голос
/ 14 сентября 2011

Вы можете попробовать это ... это может на самом деле тоже куда-то привести: -)

http://aaronboodman -com-v1.blogspot.com / 2010/10 /, где-я-помощь-вы-получить хорошее-job.html

Чтение через форумы разработчиков тоже может помочь ...

http://groups.google.com/a/chromium.org/group/chromium-dev/topics

Также в этом разделе есть много полезных документов, таких как руководства по стилю и т. Д.

http://dev.chromium.org/developers/contributing-code

И последнее, но не менее важное: IRC - твой друг ...

http://dev.chromium.org/developers/irc

...