view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReplaceRootNodeAtBench.java @ 20:195c1a644550

benchmark add
author tatsuki
date Tue, 17 Mar 2015 15:37:19 +0900
parents
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;

public class ReplaceRootNodeAtBench {

  public static void main(String args[]) throws IOException, InterruptedException {
    System.out.println("Start");
    File addNewChildFile = new File("./time/addNewChildTime");
    PrintWriter apw = new PrintWriter(new BufferedWriter(new FileWriter(addNewChildFile)));
    File pushPopFile = new File("./time/pushPopTime");
    PrintWriter ppw = new PrintWriter(new BufferedWriter(new FileWriter(pushPopFile)));

    ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    long t1 = 0;
    long t2 = 0;

    for (int count = 0; count <= 40; count++) {

      System.out.println("count = " + count);
      Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor(new DefaultTraverser()));
      jungle.createNewTree("normalTree");
      JungleTree tree = jungle.getTreeByName("normalTree");
      JungleTreeEditor editor = tree.getTreeEditor();
      DefaultNodePath path = new DefaultNodePath();

      t1 = threadMXBean.getCurrentThreadCpuTime();
      for (int addCount = 0; addCount < 100 * count; addCount++) {
        Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, 0);
        if (either.isA()) {
          System.out.println("Error");
          System.exit(0);
        }
        editor = either.b();
        path = path.add(0);
      }

      editor.success();
      t2 = threadMXBean.getCurrentThreadCpuTime();
      System.out.println("NormalTime = " + (t2 - t1));
      apw.println(count * 100 + " " + (t2 - t1));


      jungle.createNewTree("push/popTree");
      JungleTree pushPopTree = jungle.getTreeByName("push/popTree");
      JungleTreeEditor pushPopEditor = pushPopTree.getTreeEditor();

      t1 = threadMXBean.getCurrentThreadCpuTime();
      for (int addCount = 0; addCount < count * 100; addCount++) {
        Either<Error, JungleTreeEditor> either = pushPopEditor.replaceNewRootNode();
        if (either.isA()) {
          System.out.println("Error");
          System.exit(0);
        }
        pushPopEditor = either.b();
      }
      pushPopEditor.success();
      t2 = threadMXBean.getCurrentThreadCpuTime();
      System.out.println("push/popTime = " + (t2 - t1));
      ppw.println(count * 100 + " " + (t2 - t1));


      // gc
      jungle = null;
      tree = null;
      editor = null;
      pushPopTree = null;
      pushPopEditor = null;
      System.gc();
      Thread.sleep(1000);
    }
    apw.close();
    ppw.close();
  }
}