中文(较新) | EN
This project is used to demonstrate how to use some basic mechanisms in chromium, including asynchronous multitasking, mojo, multi-process, etc.
Tip: If you are new to chromium, it is recommended to study these demos in order.
Demo list:
demo_exe: The simplest demo to demonstrate gn and create your own exe;demo_log: Demo log library;demo_tracing_console: Demonstrate using Trace to output to the console;demo_tasks: Demonstrate the use of thread pool ThreadPool;demo_messageloop: Demonstrate using the message loop MessageLoop;demo_mojo_single_process: Demonstrate the use of themojolibrary in a single process;demo_mojo_multiple_process: Demonstrate the use of themojolibrary in multiple processes;demo_mojo_multiple_process_binding: Demonstrate using the binding layer of themojolibrary in multiple processes;demo_services: Demonstrate the use of servcies and multi-process architecture based onmojo;demo_ipc: Demonstrate the use of IPC interface based onmojo;demo_memory: Demonstrate the use of SharedMemory;demo_tracing_perfetto: Demonstrate the output of Trace as Json format (used to interface with perfetto);demo_tracing_perfetto_content: Demonstrate how the content module is connected to perfetto;demo_resources: Demo resources related content, including grit, l10n, pak, etc.;demo_gl: Demonstrate using//ui/glfor GPU rendering;demo_viz_gui: Demonstrate usingvizto display the GUI interface;demo_viz_offscreen: Demonstrate usingvizfor off-screen rendering;demo_viz_gui_gpu: Demonstrate the use ofvizfor hardware accelerated rendering;demo_viz_layer: Demonstrate the use ofvizfor interactive rendering;demo_viz_layer_offscreen, demonstrate using VIZ'sCopyOutputinterface for off-screen rendering;demo_cc_gui: Demonstrate usingccto display GUI interface;demo_cc_offscreen: Demonstrate usingccfor off-screen rendering;demo_views: Demonstrate the use of//ui/viewsto create UI;demo_apk: Demonstrate the creation of Android applications, the use of base::android::* and JNI;demo_android_skia: Demonstrate the use of Skia for software rendering and hardware rendering on Android;demo_skia: Demonstrate the use of Skia for software rendering and hardware rendering on Linux;demo_x11: Demonstrate using X11 to create transparent windows;demo_x11_glx: Demonstrate the use of glx in a transparent window;demo_x11_egl: Demonstrate the use of egl in a transparent window;demo_shell: Demonstrate the use of content api to create a streamlined browser that supports Linux and Android;
Documents:
Public documents are in the docs directory, and other documents are in the corresponding directory of the code.
-
Enter chromium's
srcdirectory; -
Execute the following command to clone the repository to the
src/demodirectory;git clone <address of current repository> demo
-
Find the
out/Default/args.gnfile in your compilation output directory and add the following parameters:# add extra deps to gn root root_extra_deps = ["//demo"] # If you want to compile the demo of android platform, you need to add the following parameters target_os="android" target_cpu="arm64" # Other architectures can be selected as needed x86, x64, arm, mipsel
-
Run
ninja -C out/Default demoto generate all demo programs (see BUILD.gn for details);
-
Go to the root directory of the chromium project (the directory above the src) and find the
.gclientfile; -
Open the
.gclientfile and modify it according to the following settings:solutions = [ {"name": "src", "url": "https://chromium.googlesource.com/chromium/src.git", "deps_file": "DEPS", "managed": False, "custom_deps": { # let gclient pull demo project to'src/demo' dir "src/demo": "<address of current repository>", }, "custom_vars": {}, } ] ...
-
Find the
out/Default/args.gnfile in your compilation output directory and add the following parameters:# add extra deps to gn root root_extra_deps = ["//demo"] # If you want to compile the demo of android platform, you need to add the following parameters target_os="android" target_cpu="arm64" # Other architectures can be selected as needed x86, x64, arm, mipsel
-
Execute the
gclient syncsynchronization code, which will pull thedemorepository tosrc/demo; -
Run
ninja -C out/Default demoto generate all demo programs (see BUILD.gn for details);
- Improve the documentation of the process initialization part (docs/startup.md);
- Improve the documentation of the UI part (docs/ui.md);
- Improve the documentation of the content module (docs/content.md);
- Improve the documentation of demo_shell (demo_shell/README.md);
- Add demo to demonstrate how to create aar component;
- Add demo to demonstrate how to use aura to create UI interface;
- Add demo to demonstrate how to use PlatformWindow to create UI interface;
- Add demo to demonstrate how to implement off-screen rendering of web pages;
- Add a demo to demonstrate how to inject new JS objects into Blink;
- Add a demo to demonstrate the principle of
navigator.mediaDevices.getUserMedia(); - Add a demo to demonstrate the principle of
tab capture api;
- Add demo_gl, the demo uses the
//ui/glmodule to call GL for rendering;
- demo_viz_layer_offscreen supports off-screen rendering using the SkiaOutputDeviceOffscreen interface;
- Add demo_viz_layer_offscreen to demonstrate using VIZ's CopyOutput interface for off-screen rendering;
- Add demo_viz_layer, demonstrate the use of VIZ for handwriting writing, and support the use of command lines to switch between software and hardware rendering;
- Add demo_viz_gui_gpu to demonstrate the use of VIZ for hardware accelerated rendering and VIZ Client nesting;
- Add demo_x11_glx and demo_x11_egl;
- Add demo_x11 to demonstrate the use of X11 to create transparent windows;
- Update demo_skia, use software rendering by default, support transparent windows, GL rendering supports GL_RGB565 pixel format;
- Add demo_skia to demonstrate the software/hardware rendering using Skia in Linux;
- Update demo_android_skia, add multi-thread rendering and frame rate synchronization;
- Add demo_android_skia to demonstrate the use of Skia in Android for software/hardware rendering;
- Add demo_tracing_perfetto_content to demonstrate how the content module saves trace to a file, which can be used for chrome://tracing;
- Add demo_tracing documentation demo_tracing;
- Move demo_tracing to demo_tracing folder and rename it to demo_tracing_console, add Flush function;
- Add demo_tracing_perfetto to demonstrate the integration and use of trace and perfetto;
- Add demo_cc_gui to demonstrate using
ccto display GUI interface;
- Added TRACE.txt of demo_cc to help understand the runtime behavior of cc;
- Add demo_cc_offscreen, demonstrate the use of
ccfor off-screen rendering;
- Add demo_viz_offscreen, demonstrate using
vizfor off-screen rendering; - Modify demo_viz to demo_viz_gui, the function is unchanged;
- Add demo_viz, demonstrate using
vizmodule; - Add documentation for
viz: viz
- Add demo_views, demonstrate using
//ui/viewsto develop UI;
- demo_apk supports JNI to call instance method of C++ class;
- Add document: [browser startup process brief description] (./docs/startup.md)
- demo_apk supports JNI;
- Add document: demo_apk
- Add demo_tracing to demonstrate the use of trace;
- Add demo_apk to demonstrate how to use gn to create Android applications;
- Add demo_shell to demonstrate how to use the Content API to create a streamlined browser;
Add the following demo and related documents:
- demo_exe: the simplest demo, demonstrate gn and create your own exe;
- demo_log: demonstrate the use of log library;
- demo_tracing: demonstrate the use of Trace;
- demo_tasks: demonstrate the use of thread pool ThreadPool;
- demo_messageloop: demonstrate the use of message loop MessageLoop;
- demo_mojo_single_process: demonstrate the use of mojo library in a single process;
- demo_mojo_multiple_process: demonstrate the use of the mojo library in multiple processes;
- demo_mojo_multiple_process_binding: demonstrate the use of the binding layer of the mojo library in multiple processes;
- demo_services: demonstrate the use of mojo-based servcies and multi-process architecture;
- demo_ipc: demonstrate the use of mojo-based IPC interface;
- demo_memory: demonstrate the use of SharedMemory;