/*********************************************************************************** * Copyright (c) 2013. Nickolay Gerilovich. Russia. * Some Rights Reserved. ************************************************************************************/ package com.github.nickvl.xspring.core.log.aop.benchmark; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.junit.Assert.assertEquals; /** * Tests of logger performance. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("AOPLoggerPerformanceITCase-context.xml") @DirtiesContext public class AOPLoggerPerformanceITCase { private static final int REPS = 100000; @Autowired private LoggableService loggableService; private void testLogClearMethod() throws Exception { int accum = 0; long start = System.nanoTime(); for (int i = 0; i < REPS; i++) { accum += loggableService.logClearMethod("a", i); } long end = System.nanoTime(); out(start, end, accum, "no logging"); } private void testLogManualMethod() throws Exception { int accum = 0; long start = System.nanoTime(); for (int i = 0; i < REPS; i++) { accum += loggableService.logManualMethod("a", i); } long end = System.nanoTime(); out(start, end, accum, "direct logging"); } private void testAopLogMethod() throws Exception { int accum = 0; long start = System.nanoTime(); for (int i = 0; i < REPS; i++) { accum += loggableService.aopLogMethod("a", i); } long end = System.nanoTime(); out(start, end, accum, "aop logging"); } @Test public void testSpeed() throws Exception { // warming up assertEquals(32, loggableService.logClearMethod("a", 31)); assertEquals(33, loggableService.logManualMethod("b", 32)); assertEquals(34, loggableService.aopLogMethod("c", 33)); System.out.println("Service invocation benchmark (" + this.getClass().getSimpleName() + "):"); testLogClearMethod(); testLogManualMethod(); testAopLogMethod(); } private void out(long start, long end, int accum, String msg) { long executionTime = (end - start) / REPS; System.out.println("\t" + executionTime + " ns takes a method when " + msg + " is used"); } }