Castanets is an evolutionary web browser for next generation networks (5G and beyond).
The proliferation of smart electronic devices and the advancement of high-speed wireless networks have been driving the exponential growth of web users and web applications. As specifications of the web technologies expand, the memory consumption and computing power requirements of the browsers are increasing significantly. However, the web browsers are becoming unsuitable for embedded devices and consumer electronics devices. Unlike PCs and smartphones, both computing capabilities and memory capacities are extremely limited in IoT-enabled devices. Recent Chromium, in general, consume more than 150MB of memories to view popular websites. When the number of tabs increases, the memory usages increase proportionally and turn out to be unacceptable for embedded devices.
Considering aforementioned aspects of browser overheads, we propose an in-home edge-distributed split web browser; Castanets. The split rendering processes run memory intensive component on the distributed in-home edge devices while the browser process runs GPU intensive and composites results on the screen.
If you are interested to join the project, don't hesitate to contact us!
For any inquiries or questions regarding Castanets, we will gladly reply!
castanets atsign samsung.com
Clone the depot_tools repository:
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Add depot_tools to the end of your PATH (you will probably want to put this in your ~/.bashrc or ~/.zshrc). Assuming you cloned depot_tools to /path/to/depot_tools:
$ export PATH="$PATH:/path/to/depot_tools"
Create a chromium directory for the checkout and change to it (you can call this whatever you like and put it wherever you like, as long as the full path has no spaces):
$ mkdir $PWD/castanets && cd $PWD/castanets
Download the code using the command below.
$ git clone https://github.com/Samsung/castanets src
If you did not specify the 'src' directory name at the end of the command, the source code would have been downloaded to the 'castanets' directory. In this case, change the directory name.
$ mv castanets src
Install additional build dependencies
$ build/install-build-deps.sh
We need a gclient configuration. To create a .gclient file, run:
$ build/create_gclient.sh
Once you've run install-build-deps at least once, you can now run the Chromium-specific sync, which will download additional binaries and other things you might need:
$ gclient sync --with_branch_head
Chromium uses Ninja as its main build tool along with a tool called GN to generate .ninja files. You can create any number of build directories with different configurations. To create a build directory, run:
$ gn gen out/Default
You set build arguments on a build directory by typing:
$ gn gen --args='enable_castanets=true enable_nacl=false' out/Default
Build castanets (the “chrome” target) with Ninja using the command:
$ ninja -C out/Default chrome
Start first chrome instance: Browser Process
$ out/Default/chrome <URL>
Start second chrome instance: Renderer Process
$ out/Default/chrome --type=renderer --server-address=127.0.0.1
Device A: Browser Process
$ out/Default/chrome <URL>
Device B: Renderer Process
$ out/Default/chrome --type=renderer --server-address=<IP ADDR>
For user conveniance, a binary version is shared to community via dockerhub repo.
Usage is straighforward once you installed docker on your system (on debian based OS):
sudo apt install docker-compose ; sudo addgroup $USER docker ; su -l $USER
Pull latest built image (or rebuild it from scratch):
docker pull rzrfreefr/castanets
Then we'll use docker-compose to setup network between 2 processes and then run the browser and renderer:
git clone --depth 1 https://github.com/tizenteam/Castanets ; cd Castanets
docker-compose --verbose up default # will dislay version to check your setup (Chromium 63.0.3239.1)
docker-compose up browser # will run browser, wait browser window to be displayed
docker-compose up renderer # to be run in other shell