Skip to content

Commit

Permalink
Architecture: Directory structure: clean up formatting and add TODO
Browse files Browse the repository at this point in the history
  • Loading branch information
delan committed Apr 23, 2024
1 parent 63496e3 commit 5c17411
Showing 1 changed file with 57 additions and 98 deletions.
155 changes: 57 additions & 98 deletions src/architecture/directory-structure.md
Original file line number Diff line number Diff line change
@@ -1,105 +1,64 @@
<!-- TODO: needs copyediting -->

# Servo's directory structure:
* components
* bluetooth
* Implementation of the bluetooth thread.
* bluetooth_traits
* APIs to the bluetooth crate for crates that don't want to depend on the bluetooth crate for build speed reasons.
* canvas
* Implementation of painting threads for 2D and WebGL canvases.
* canvas_traits
* APIs to the canvas crate for crates that don't want to depend on the canvas crate for build speed reasons.
* compositing
* Integration with OS windowing/rendering and event loop.
* constellation
* Management of resources for a top-level browsing context (ie. tab).
* devtools
* In-process server to allow manipulating browser instances via a remote Firefox developer tools client.
* devtools_traits
* APIs to the devtools crate for crates that don't want to depend on the devtools crate for build speed reasons.
* gfx
* Draws the result of laying out a page, and sends the result to the compositor.
* gfx_traits
* APIs to the gfx crate for crates that don't want to depend on the gfx crate for build speed reasons.
* layout
* Converts page content into positioned, styled boxes and passes the result to the renderer.
* layout_thread
* Runs the threads for layout, communicates with the script thread, and calls into the layout crate to do the layout.
* msg
* Shared APIs for communicating between specific threads and crates.
* net
* Network protocol implementations, and state and resource management (caching, cookies, etc.).
* net_traits
* APIs to the net crate for crates that don't want to depend on the net crate for build speed reasons.
* plugins
* Syntax extensions, custom attributes, and lints.
* profile
* Memory and time profilers.
* profile_traits
* APIs to the profile crate for crates that don't want to depend on the profile crate for build speed reasons.
* script
* Implementation of the DOM (native Rust code and bindings to SpiderMonkey).
* script_layout_interface
* The API the script crate provides for the layout crate.
* script_traits
* APIs to the script crate for crates that don't want to depend on the script crate for build speed reasons.
* selectors
* CSS selector matching.
* servo
* Entry points for the servo application and libservo embedding library.
* style
* APIs for parsing CSS and interacting with stylesheets and styled elements.
* style_traits
* APIs to the style crate for crates that don't want to depend on the style crate for build speed reasons.
* util
* Assorted utility methods and types that are commonly used throughout the project.
* webdriver_server
* In-process server to allow manipulating browser instances via a WebDriver client.
* webgpu
* Implementation of threads for the WebGPU API.
* etc
* Useful tools and scripts for developers.
* mach
* A command-line tool to help with developer tasks.
* ports
* winit
* Embedding implementation for the `winit` windowing library.
* python
* servo
* Implementations of servo-specific mach commands.
* tidy
* Python package of code lints that are automatically run before merging changes.
* resources
* Files used at run time.
Need to be included somehow when distributing binary builds.
* support
* android
* Libraries that require special handling for building for Android platforms
* rust-task_info
* Library for obtaining information about memory usage for a process
* target
* debug
* Build artifacts generated by `./mach build --debug`.
* doc
* Documentation is generated here by the `rustdoc` tool when running `./mach doc`
* release
* Build artifacts generated by `./mach build --release`.
* tests
* dromaeo
* Harness for automatically running the Dromaeo testsuite.
* html
* Manual tests and experiments.
* jquery
* Harness for automatically running the jQuery testsuite.
* power
* Tools for measurement of power consumption.
* unit
* Unit tests using rustc’s built-in test harness.
* wpt
* W3C web-platform-tests and csswg-tests along with tools to run them and expected failures.
# Directory structure

- **components**
- **bluetooth** — Implementation of the bluetooth thread.
- **bluetooth_traits** — APIs to the bluetooth crate for crates that don't want to depend on the bluetooth crate for build speed reasons.
- **canvas** — Implementation of painting threads for 2D and WebGL canvases.
- **canvas_traits** — APIs to the canvas crate for crates that don't want to depend on the canvas crate for build speed reasons.
- **compositing** — Integration with OS windowing/rendering and event loop.
- **constellation** — Management of resources for a top-level browsing context (ie. tab).
- **devtools** — In-process server to allow manipulating browser instances via a remote Firefox developer tools client.
- **devtools_traits** — APIs to the devtools crate for crates that don't want to depend on the devtools crate for build speed reasons.
- **gfx** — Draws the result of laying out a page, and sends the result to the compositor.
- **gfx_traits** — APIs to the gfx crate for crates that don't want to depend on the gfx crate for build speed reasons.
- **layout** — Converts page content into positioned, styled boxes and passes the result to the renderer.
- **layout_thread** — Runs the threads for layout, communicates with the script thread, and calls into the layout crate to do the layout.
- **msg** — Shared APIs for communicating between specific threads and crates.
- **net** — Network protocol implementations, and state and resource management (caching, cookies, etc.).
- **net_traits** — APIs to the net crate for crates that don't want to depend on the net crate for build speed reasons.
- **plugins** — Syntax extensions, custom attributes, and lints.
- **profile** — Memory and time profilers.
- **profile_traits** — APIs to the profile crate for crates that don't want to depend on the profile crate for build speed reasons.
- **script** — Implementation of the DOM (native Rust code and bindings to SpiderMonkey).
- **script_layout_interface** — The API the script crate provides for the layout crate.
- **script_traits** — APIs to the script crate for crates that don't want to depend on the script crate for build speed reasons.
- **selectors** — CSS selector matching.
- **servo** — Entry points for the servo application and libservo embedding library.
- **style** — APIs for parsing CSS and interacting with stylesheets and styled elements.
- **style_traits** — APIs to the style crate for crates that don't want to depend on the style crate for build speed reasons.
- **util** — Assorted utility methods and types that are commonly used throughout the project.
- **webdriver_server** — In-process server to allow manipulating browser instances via a WebDriver client.
- **webgpu** — Implementation of threads for the WebGPU API.
- **etc** — Useful tools and scripts for developers.
- **mach** — A command-line tool to help with developer tasks.
- **ports**
- **winit** — Embedding implementation for the `winit` windowing library.
- **python**
- **servo** — Implementations of servo-specific mach commands.
- **tidy** — Python package of code lints that are automatically run before merging changes.
- **resources** — Files used at run time.
Need to be included somehow when distributing binary builds.
- **support**
- **android** — Libraries that require special handling for building for Android platforms
- **rust-task_info** — Library for obtaining information about memory usage for a process
- **target**
- **debug** — Build artifacts generated by `./mach build --debug`.
- **doc** — Documentation is generated here by the `rustdoc` tool when running `./mach doc`
- **release** — Build artifacts generated by `./mach build --release`.
- **tests**
- **dromaeo** — Harness for automatically running the Dromaeo testsuite.
- **html** — Manual tests and experiments.
- **jquery** — Harness for automatically running the jQuery testsuite.
- **power** — Tools for measurement of power consumption.
- **unit** — Unit tests using rustc’s built-in test harness.
- **wpt** — W3C web-platform-tests and csswg-tests along with tools to run them and expected failures.

*TODO: Update foo_traits and ports/winit.*

# Major dependencies

* <https://github.com/servo/rust-mozjs>, <https://github.com/servo/mozjs>: bindings to SpiderMonkey
* <https://github.com/hyperium/hyper>: an HTTP implementation
* <https://github.com/servo/html5ever>: an HTML5 parser
Expand Down

0 comments on commit 5c17411

Please sign in to comment.