Chamelium automates external display testing across VGA, HDMI, and DisplayPort (DP), helping to identify graphics bugs and regressions in a reliable and scalable way. It can emulate user behavior across a wide range of scenarios, such as plugging in (or unplugging) an external monitor before or after suspending, waking, or rebooting a device. It also allows us to simulate all types of displays on the market, at various resolutions and refresh rates, including non-standard or flaky behavior.
Chamelium is the public name of the internal Google project Chameleon (similar to Chromium and Chrome). You may see references to the original codename throughout the documentation linked below.
Chamelium consists of 3 primary components:
Please direct any questions about Chamelium to email@example.com.
(Front side of the external display emulator board. On the left side there is one HDMI, two DP, and one VGA connector. On the right side there is the HSMC connector.)
(Back side of the external display emulator board)
You will need the following equipment to set up all the individual components in Chamelium:
The following equipment is optional:
Download tio.image.gz, gunzip it, and dd tio.image onto the micro-SD card from your Linux host.
# sudo dd if=tio.image of=/dev/sdx
Now insert the micro-SD card into the FPGA board.
First, attach the HSMC flex cable to connect the two boards.
Optionally, if you’d like a more compact setup, you can stack the FPGA on top of the external display emulator board and secure them into place per the diagram below:
Note that the longer nuts should be placed in between the two boards, with the shorter nuts on the bottom.
# minicom -D /dev/ttyUSB0 -o -w -s
The IP address will change at each reboot, as the MAC address of the board is not fixed. You can fix it by running the following commands in uboot (change XX to hex numbers of your choice):
> setenv ethaddr 0A:XX:XX:XX:XX:XX
# export BOARD=[name of your DUT’s board, viewable at chrome://version]
# ./setup_board --board $BOARD
# ./build_packages --board=$BOARD
# ./build_image --board=$BOARD test
# cros flash usb:// ../build/images/[...]/chromiumos_test_image.bin
# cd ~/trunk/src/scripts
# ./setup_board --board arm-generic
# export CHAMELIUM_IP=[IP address of the FPGA board]
# export DUT_IP=[IP address of the DUT]
# cd ~/trunk/src/platform/chameleon
# export TEST_NAME=[name of the test you’d like to run]
# cd ~/trunk/src/scripts
# test_that --board=$BOARD --args "chameleon_host=$CHAMELIUM_IP" $DUT_IP $TEST_NAME
For additional instructions on how to modify tests or the FPGA image, please refer to the documentation below.