diff --git a/fix_json.py b/fix_json.py
index cf94dd6..4e54d31 100755
--- a/fix_json.py
+++ b/fix_json.py
@@ -24,45 +24,45 @@
 
 
 def _parse_arguments_internal(argv):
-  parser = argparse.ArgumentParser(description='Convert result to JSON'
-                                   'format')
-  parser.add_argument(
-      '-b', '--bench', help='Generate JSON format file for which benchmark.')
-  return parser.parse_args(argv)
+    parser = argparse.ArgumentParser(description='Convert result to JSON'
+                                     'format')
+    parser.add_argument(
+        '-b', '--bench', help='Generate JSON format file for which benchmark.')
+    return parser.parse_args(argv)
 
 def fix_json(bench):
-  # Set environment variable for crosperf
-  os.environ['PYTHONPATH'] = os.path.dirname(config.toolchain_utils)
+    # Set environment variable for crosperf
+    os.environ['PYTHONPATH'] = os.path.dirname(config.toolchain_utils)
 
-  logging.info('Generating Crosperf Report...')
-  json_path = os.path.join(config.bench_suite_dir, bench + '_refined')
-  crosperf_cmd = [
-      os.path.join(config.toolchain_utils, 'generate_report.py'), '--json',
-      '-i=' + os.path.join(config.bench_suite_dir, bench + '.json'),
-      '-o=' + json_path, '-f'
-  ]
+    logging.info('Generating Crosperf Report...')
+    json_path = os.path.join(config.bench_suite_dir, bench + '_refined')
+    crosperf_cmd = [
+        os.path.join(config.toolchain_utils, 'generate_report.py'), '--json',
+        '-i=' + os.path.join(config.bench_suite_dir, bench + '.json'),
+        '-o=' + json_path, '-f'
+    ]
 
-  # Run crosperf generate_report.py
-  logging.info('Command: %s', crosperf_cmd)
-  subprocess.call(crosperf_cmd)
+    # Run crosperf generate_report.py
+    logging.info('Command: %s', crosperf_cmd)
+    subprocess.call(crosperf_cmd)
 
-  json_path += '.json'
-  with open(json_path) as fout:
-    objs = json.load(fout)
-  for obj in objs:
-    obj['branch_name'] = 'aosp/master'
-    obj['build_id'] = 0
-  with open(json_path, 'w') as fout:
-    json.dump(objs, fout)
+    json_path += '.json'
+    with open(json_path) as fout:
+        objs = json.load(fout)
+    for obj in objs:
+        obj['branch_name'] = 'aosp/master'
+        obj['build_id'] = 0
+    with open(json_path, 'w') as fout:
+        json.dump(objs, fout)
 
-  logging.info('JSON file fixed successfully!')
+    logging.info('JSON file fixed successfully!')
 
 def main(argv):
-  arguments = _parse_arguments_internal(argv)
+    arguments = _parse_arguments_internal(argv)
 
-  bench = arguments.bench
+    bench = arguments.bench
 
-  fix_json(bench)
+    fix_json(bench)
 
 if __name__ == '__main__':
-  main(sys.argv[1:])
+    main(sys.argv[1:])
