diff --git a/.travis.yml b/.travis.yml
index 8d0ebb7ba97cd2d459a31de0e6c658a652a38f57..7aae45cf470b3da56cc79a2bdde72a649bbc7439 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,43 +1,38 @@
 language: dart
 sudo: required
 
-# We require PhantomJS 2.x, which is only available on Trusty.
-dist: trusty
-
 dart:
  - dev
 
 env: FORCE_TEST_EXIT=true
 
-# Content shell needs these fonts.
 addons:
-  apt:
-    packages:
-    - ttf-kochi-mincho
-    - ttf-kochi-gothic
-    - ttf-dejavu
-    - ttf-indic-fonts
-    - fonts-tlwg-garuda
-
-before_install:
-  - mkdir -p bin
-  - export PATH="$PATH:`pwd`/bin/"
-  - ln -s `which chromium-browser` bin/google-chrome
-
-dart_task:
- - dartfmt
- - dartanalyzer
- # Split the tests into five shards to help parallelize them across Travis workers.
- - test: --preset travis --total-shards 5 --shard-index 0
- - test: --preset travis --total-shards 5 --shard-index 1
- - test: --preset travis --total-shards 5 --shard-index 2
- - test: --preset travis --total-shards 5 --shard-index 3
- - test: --preset travis --total-shards 5 --shard-index 4
+  chrome: stable
+
+
+jobs:
+  include:
+    - stage: analyze_and_format
+      script: tool/dartfmt_and_analyze.sh
+    - stage: unit_test
+      script: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 0
+    - stage: unit_test
+      script: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 1
+    - stage: unit_test
+      script: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 2
+    - stage: unit_test
+      script: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 3
+    - stage: unit_test
+      script: xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 4
 
 # Only building master means that we don't run two builds for each pull request.
 branches:
   only: [master, /feature\..*/]
 
+stages:
+  - analyze_and_format
+  - unit_test
+
 cache:
  directories:
    - $HOME/.pub-cache
diff --git a/tool/dartfmt_and_analyze.sh b/tool/dartfmt_and_analyze.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5caf3ae9cf967dc94899e3b6a254d8db8ffe3810
--- /dev/null
+++ b/tool/dartfmt_and_analyze.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+pub get || exit $
+
+EXIT_CODE=0
+dartfmt -n --set-exit-if-changed . || EXIT_CODE=$?
+dartanalyzer . || EXIT_CODE=$?
+
+exit $EXIT_CODE