// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;

import com.android.tools.r8.naming.ProguardMapReader;
import com.android.tools.r8.utils.Timing;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;

/**
 * Benchmark for testing speed of parsing Proguard mapping files.
 */
public class ReadProguardMap {

  private static final String DEFAULT_MAP_FILE_NAME = "third_party/gmscore/v5/proguard.map";

  final Timing timing = new Timing("ReadProguardMap");

  private void readProguardMapFile(String fileName) {
    try {
      System.out.println("  - reading " + fileName);
      timing.begin("Reading " + fileName);
      ProguardMapReader.mapperFromFile(Paths.get(fileName));
      timing.end();
    } catch (IOException e) {
      System.err.print("Failed to parse Proguard mapping file: " + e.getMessage());
    }
  }

  public static void main(String[] args) {
    new ReadProguardMap().run(args);
  }

  private void run(String[] args) {
    System.out.println("ReadProguardMap benchmark.");
    if (args.length == 0) {
      readProguardMapFile(DEFAULT_MAP_FILE_NAME);
    } else {
      Arrays.asList(args).forEach((String name) -> readProguardMapFile(name));
    }
    timing.report();
  }
}
