diff --git a/build/full_test.py b/build/full_test.py
new file mode 100755
index 0000000..b84686b
--- /dev/null
+++ b/build/full_test.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import shutil
+import subprocess
+import sys
+import timeit
+
+
+IS_WIN = sys.platform.startswith('win')
+
+
+def RemoveDir(d):
+  if os.path.isdir(d):
+    shutil.rmtree(d)
+
+
+def Trial(gn_path_to_use, save_out_dir=None):
+  bin_path = os.path.join('out', 'gntrial')
+  if not os.path.isdir(bin_path):
+    os.makedirs(bin_path)
+  gn_to_run = os.path.join(bin_path, 'gn' + ('.exe' if IS_WIN else ''))
+  shutil.copy2(gn_path_to_use, gn_to_run)
+  comp_dir = os.path.join('out', 'COMP')
+  subprocess.check_call([gn_to_run, 'gen', comp_dir, '-q', '--check'])
+  if save_out_dir:
+    RemoveDir(save_out_dir)
+    shutil.move(comp_dir, save_out_dir)
+
+
+def main():
+  if len(sys.argv) < 3 or len(sys.argv) > 4:
+    print 'Usage: full_test.py /chrome/tree/at/762a25542878 rel_gn_path [clean]'
+    return 1
+
+  if len(sys.argv) == 4:
+    RemoveDir('out')
+
+  subprocess.check_call([sys.executable, os.path.join('build', 'gen.py')])
+  subprocess.check_call(['ninja', '-C', 'out'])
+  #subprocess.check_call([os.path.join('out', 'gn_unittests')])
+  orig_dir = os.getcwd()
+
+  in_chrome_tree_gn = sys.argv[2]
+  our_gn = os.path.join(orig_dir, 'out', 'gn' + ('.exe' if IS_WIN else ''))
+
+  os.chdir(sys.argv[1])
+
+  # Check in-tree vs. ours. Uses:
+  # - Chromium tree at 762a25542878 in argv[1] (this can be off by a bit, but
+  #   is roughly when GN was moved out of the Chrome tree, so matches in case GN
+  #   semantics/ordering change after that.)
+  # - relative path to argv[1] built gn binary in argv[2]
+
+  # First, do a comparison to make sure the output between the two gn binaries
+  # actually matches.
+  print 'Confirming output matches...'
+  dir_a = os.path.join('out', 'a')
+  dir_b = os.path.join('out', 'b')
+  Trial(in_chrome_tree_gn, dir_a)
+  Trial(our_gn, dir_b)
+  subprocess.check_call(['diff', '-r', dir_a, dir_b])
+
+  # Then, some time trials.
+  TRIALS = 5
+  print 'Comparing performance... (takes a while)'
+  time_a = timeit.timeit('Trial("%s")' % in_chrome_tree_gn, number=TRIALS,
+                         setup='from __main__ import Trial')
+  time_b = timeit.timeit('Trial("%s")' % our_gn, number=TRIALS,
+                         setup='from __main__ import Trial')
+  print 'In-tree gn avg: %.3fs' % (time_a / TRIALS)
+  print 'Our gn avg: %.3fs' % (time_b / TRIALS)
+
+  return 0
+
+
+if __name__ == '__main__':
+    sys.exit(main())
