2011-09-09 13 views
21

Właśnie sprawdziłem źródło chromu, ale rozpaczliwie potrzebuję nauczyć się poruszać wokół tego potwora.Znaleźć sposób na kod źródłowy chromu

W jaki sposób mogę wyszukać fragmenty kodu, które implementują zachowanie/funkcje, które mnie interesują?

Załóżmy, że chcę zobaczyć, co dzieje się po wprowadzeniu adresu URL na pasku adresu. Jak znaleźć ten fragment kodu?

Lub, że chcę zobaczyć, co się stanie, gdy podczas analizowania HTML zostanie osiągnięty określony znacznik.

Mam przed sobą ogromną ilość kodu źródłowego i brak umiejętności nawigowania po nim. Jak mogę się nauczyć tej umiejętności?

+5

Jako punkt wyjścia, przeczytaj http://www.chromium.org/developers/how-tos/getting-around-the-chrome-source-code - który powinien dać ci lepszy ogląd tego, co widzisz w tym monstrualnym katalogu src /. (Naprawdę nie sądziłem, że to będzie dobry _answer_, ponieważ jest to tylko wskazówka ...) – maligree

+3

Przygotuj także [Jak znaleźć drogę do nowego kodu] (http://stackoverflow.com/ pytania/70124/how-do-you-find-your-way-around-a-new-codebase) – Justin

+1

grep jest twoim przyjacielem. lub znajdź główną i śledź. Poruszanie się po dużych bazach kodu nie jest banalne. – Chris

Odpowiedz

11

Moja rekomendacja dla rodzaju nurkowania jest, aby spojrzeć na źródło http://code.google.com/p/chromiumembedded/.

To rodzaj skondensowanej wersji Chrome i jeśli spojrzysz na pliki, z których konkretnie korzysta, zarówno te zawarte w drzewie źródłowym, jak i pliki w nim zawarte z repozytorium Chromium w ogóle. Baza kodu Chromium to ogromna ilość rzeczy, z których większość nie jest faktycznie w przeglądarce. Jest mnóstwo wciągniętego kodu z repozytoriów firm trzecich, które są następnie sprowadzane w procesie kompilacji lub implementacja Chromium znajduje się gdzieś indziej w drzewie, jest wiele projektów pobocznych, które (choć ciekawe i niesamowite zasoby dla szerokiej gamy rzeczy) uniemożliwi osiągnięcie celu, jakim jest dopracowanie implementacji przeglądarki i jej zgodności.

CEF jest świetny, ponieważ można zobaczyć kogoś, kto już wykonał proces łączenia wszystkich tych elementów, aby zbudować projekt o bardzo konkretnym zasięgu w widoku przeglądarki i nic więcej. Możesz zobaczyć, które części pochodzą przede wszystkim z webkita, możesz zobaczyć, skąd bierze się crossover z implementacjami Google, i dość łatwo widać, jak V8 jest wrzucony do miksu.

Mówię "łatwo" w kategoriach względnych, ponieważ wciąż mówimy o ogromnej ilości ogólnego kodu. CEF postawi Cię w centrum wymagań, ale te rzeczy wciąż przyciągają ogromną ilość różnych rzeczy z reszty drzewa. Kompilacja zajmuje mi około godziny na naprawdę dobrym komputerze z 12 gigami ram i 8 rdzeniami, a wygenerowane pliki zajmują około 6-10 gigabajtów w zależności.

Co najmniej, nie będzie żadnego szybkiego skoku w płytkim końcu, aby wybrać coś tu lub tam kawałek po kawałku. Przeglądarki są niewiarygodnie skomplikowanymi elementami inżynierii, ponieważ muszą podważyć tak dużą liczbę pojedynczych elementów funkcjonalności, a następnie połączyć je w wspólny kontekst.Możesz znaleźć jedną rzecz, której szukasz, ale okaże się, że jest to część biblioteki klas, która prawdopodobnie składa się z dziesiątek lub setek plików, które z kolei opierają się na setkach takich bibliotek, aby obsłużyć każde zadanie , żeby naprawdę coś zabrać, będziesz musiał poświęcić czas na więcej niż jakąkolwiek informację.

Edycja: oh również jako konkretny przykład.

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

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

„Chrome” drzewo w dużej mierze zawiera bezpośrednie implementacje (dużo rzeczy nie jest tam jednak większość z nich nawet, ale to początkowa punkt). To musi pokrywać się z ChromeOS (ChromeOS jest rodzajem przeglądarce chromu potrzebny do szalonej skrajności)

/chrom/przeglądarki http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/

dostaje do blisko miejsca, gdzie chcesz być. Zaczynasz widzieć konkretne odniesienia do rzeczy, które możesz dopasować do przeglądarki, takich jak karty i inne (ignorowanie gigantycznego słonia samej implementacji przeglądarki, która zajmuje większość przestrzeni umysłu we wszystkich tych rzeczach)

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

Przenosi do miejsca, w którym znajduje się większość kodu ui dla przeglądarki. Może to być mylące, gdy dochodzi do skrzyżowania lub kiedy migracja się powiedzie, tak jak w katalogu głównym src znajduje się "ui", który ma trochę zwrotnicy.

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

który ma zaskakująco niewielką ilość kodu w nim. Ale to właśnie dużo znajdziesz. Kod tutaj jest implementacją wielu klas, które są zbudowane gdzie indziej. W przypadku składnika GUI, który nie jest wyświetlany przez przeglądarkę internetową, najczęściej są one wyświetlane z powrotem do głównego elementu "ui" i rodzimych elementów widgetów, czyli tam, gdzie znaczna część aktualnego kodu obsługi zdarzeń jest, o ile dobrze pamiętam.

+0

Dziękujemy. Ty. Poważnie, świetna odpowiedź - wielkie dzięki. To, w połączeniu z tym, czego nauczyłem się czytając dokumenty wskazane przez maligree w jego komentarzach, brzmi jak wybuch. – ntl0ve

+0

To była trudna wiedza. Google nie promuje takiego dostępnego środowiska, które jest powszechne w kontekstach związanych z tworzeniem stron internetowych. Zostało to ostatnio skomentowane na stanowisku inżyniera Google'a (przypadkowo upublicznione). Jakość inżynierii jest fenomenalna w większości ich pracy, tak bardzo w Chrome. Zasadniczo jest to kod o wystarczająco wysokiej jakości, że ludzie, od których oczekują, że będą pracować nad nim, mogą efektywnie korzystać z niego bez większej dokumentacji. Chodzi o to, że ich grupa docelowa nie jest taka, która wymaga nauki. Jest to część kultury kultury ich firmy –

+0

i funkcja posiadania bardzo wysokiego poziomu wyjściowego oczekiwań ludzi zbliżających się do kodu. Ale to znaczy, że jest mnóstwo niesamowicie wysokiej jakości kodu open source, który jest jak ciemna materia. Jest tam, ale nie można się do niego zbliżyć bez wysokiego poziomu wiedzy specjalistycznej lub mnóstwa czasu, aby rzucić się w wir bańki, dzięki czemu zyskuje tylko garstka ludzi, którzy są w stanie wlać sporo czasu z niewielkim początkowym kierunkiem. –

1

Można spróbować ... może rzeczywiście prowadzić gdzieś zbyt :-)

http://aaronboodman-com-v1.blogspot.com/2010/10/wherein-i-help-you-get-good-job.html

Czytając fora dev może pomóc zbyt ...

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

także Ta sekcja zawiera wiele użytecznych dokumentów, takich jak przewodniki stylów itp.

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

Ostatni, ale nie najmniej, IRC jest twoim przyjacielem ...

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