中文(较新) | 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 themojo
library in a single process;demo_mojo_multiple_process
: Demonstrate the use of themojo
library in multiple processes;demo_mojo_multiple_process_binding
: Demonstrate using the binding layer of themojo
library 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/gl
for GPU rendering;demo_viz_gui
: Demonstrate usingviz
to display the GUI interface;demo_viz_offscreen
: Demonstrate usingviz
for off-screen rendering;demo_viz_gui_gpu
: Demonstrate the use ofviz
for hardware accelerated rendering;demo_viz_layer
: Demonstrate the use ofviz
for interactive rendering;demo_viz_layer_offscreen
, demonstrate using VIZ'sCopyOutput
interface for off-screen rendering;demo_cc_gui
: Demonstrate usingcc
to display GUI interface;demo_cc_offscreen
: Demonstrate usingcc
for off-screen rendering;demo_views
: Demonstrate the use of//ui/views
to 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
src
directory; -
Execute the following command to clone the repository to the
src/demo
directory;git clone <address of current repository> demo
-
Find the
out/Default/args.gn
file 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 demo
to 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
.gclient
file; -
Open the
.gclient
file 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.gn
file 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 sync
synchronization code, which will pull thedemo
repository tosrc/demo
; -
Run
ninja -C out/Default demo
to 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/gl
module 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
cc
to 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
cc
for off-screen rendering;
- Add demo_viz_offscreen, demonstrate using
viz
for off-screen rendering; - Modify demo_viz to demo_viz_gui, the function is unchanged;
- Add demo_viz, demonstrate using
viz
module; - Add documentation for
viz
: viz
- Add demo_views, demonstrate using
//ui/views
to 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;