
A source of latency when creating diff comments in large diffs is the work needed to reflow the diff DOM to make room for the new comment. This is particularly evident when adding comments to new files because the diff is built as an addition group representing the entire file, so the comment causes a reflow on every subsequent line. This change optimizes this process in three ways. * **Limit the size of ADD & REMOVE groups:** The diff processor will now break an add or a remove chunk into a series of smaller chunks of the same kind. This is controlled by the MAX_GROUP_SIZE constant. In this way the number of nodes that need to be reflowed when a comment is added to an add or remove group is limited to the number of subsequent lines in that group plus the subsequent number of groups. * **GPU optimize group in general:** Adds CSS properties to diff TBODY elements (which correspond to groups, for the most part) that trigger GPU acceleration when available. * **Apply `table-layout: fixed;`** This style speeds up table reflow in general. Change-Id: Ie0e3665b7752fec67f7123cfae70ae99e6f67521
PolyGerrit
Installing Node.js
# Debian/Ubuntu
sudo apt-get install nodejs-legacy
# OS X with Homebrew
brew install node
All other platforms: download from nodejs.org.
Optional: installing go
This is only required for running the run-server.sh
script for testing. See below.
# Debian/Ubuntu
sudo apt-get install golang
# OS X with Homebrew
brew install go
All other platforms: download from golang.org
Add [go] to your path
PATH=$PATH:/usr/local/go/bin
Local UI, Production Data
To test the local UI against gerrit-review.googlesource.com:
./polygerrit-ui/run-server.sh
Then visit http://localhost:8081
Local UI, Test Data
One-time setup:
- Install Buck for building Gerrit.
- Build Gerrit and set up a local test site. Docs here and here.
When your project is set up and works using the classic UI, run a test server that serves PolyGerrit:
buck build polygerrit && \
java -jar buck-out/gen/polygerrit/polygerrit.war daemon --polygerrit-dev \
-d ../gerrit_testsite --console-log --show-stack-trace
Running Tests
One-time setup:
# Debian/Ubuntu
sudo apt-get install npm
# OS X with Homebrew
brew install npm
# All platforms (including those above)
sudo npm install -g web-component-tester
Run all web tests:
buck test --no-results-cache --include web
The --no-results-cache
flag prevents flaky test failures from being
cached.
If you need to pass additional arguments to wct
:
WCT_ARGS='-p --some-flag="foo bar"' buck test --no-results-cache --include web
For interactively working on a single test file, do the following:
./polygerrit-ui/run-server.sh
Then visit http://localhost:8081/elements/foo/bar_test.html
Style guide
We follow the Google JavaScript Style Guide with a few exceptions. When in doubt, remain consistent with the code around you.