You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2015/09/07 14:23:48 UTC

svn commit: r1701613 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/util/PerfLogger.java test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java

Author: mreutegg
Date: Mon Sep  7 12:23:48 2015
New Revision: 1701613

URL: http://svn.apache.org/r1701613
Log:
OAK-3361: Reduce PerfLogger isDebugEnabled overhead

Applied Joel Richard's patch.

Added:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PerfLogger.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PerfLogger.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PerfLogger.java?rev=1701613&r1=1701612&r2=1701613&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PerfLogger.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PerfLogger.java Mon Sep  7 12:23:48 2015
@@ -109,7 +109,7 @@ public final class PerfLogger {
      */
     public final void end(long start, long logAtDebugIfSlowerThanMs,
             String logMessagePrefix, Object arg1) {
-        if (!delegate.isDebugEnabled()) {
+        if (start < 0) {
             return;
         }
         end(start, logAtDebugIfSlowerThanMs, logMessagePrefix,
@@ -135,7 +135,7 @@ public final class PerfLogger {
      */
     public final void end(long start, long logAtDebugIfSlowerThanMs,
             String logMessagePrefix, Object arg1, Object arg2) {
-        if (!delegate.isDebugEnabled()) {
+        if (start < 0) {
             return;
         }
         end(start, logAtDebugIfSlowerThanMs, logMessagePrefix, new Object[] {
@@ -157,32 +157,25 @@ public final class PerfLogger {
      */
     public void end(long start, long logAtDebugIfSlowerThanMs,
             String logMessagePrefix, Object... arguments) {
-        if (!delegate.isDebugEnabled()) {
-            // if log level is not at least DEBUG, then return fast, no-op
+        if (start < 0) {
+            // if start is negative, we assume that start() returned -1 because the log level is above DEBUG
             return;
         }
 
-        if (start == -1) {
-            // start was never set
-            // -> then log at trace as we have no diff available
-            delegate.trace(logMessagePrefix + " [start not set]",
+        final long diff = System.currentTimeMillis() - start;
+        if (delegate.isTraceEnabled()) {
+            // if log level is TRACE, then always log - and do that on TRACE
+            // then:
+            delegate.trace(logMessagePrefix + " [took " + diff + "ms]",
+                    (Object[]) arguments);
+        } else if ((logAtDebugIfSlowerThanMs < 0)
+                || (diff > logAtDebugIfSlowerThanMs)) {
+            // otherwise (log level is DEBUG) only log if
+            // logDebugIfSlowerThanMs is set to -1 (or negative)
+            // OR the measured diff is larger than logDebugIfSlowerThanMs -
+            // and then do that on DEBUG:
+            delegate.debug(logMessagePrefix + " [took " + diff + "ms]",
                     (Object[]) arguments);
-        } else {
-            final long diff = System.currentTimeMillis() - start;
-            if (delegate.isTraceEnabled()) {
-                // if log level is TRACE, then always log - and do that on TRACE
-                // then:
-                delegate.trace(logMessagePrefix + " [took " + diff + "ms]",
-                        (Object[]) arguments);
-            } else if ((logAtDebugIfSlowerThanMs < 0)
-                    || (diff > logAtDebugIfSlowerThanMs)) {
-                // otherwise (log level is DEBUG) only log if
-                // logDebugIfSlowerThanMs is set to -1 (or negative)
-                // OR the measured diff is larger than logDebugIfSlowerThanMs -
-                // and then do that on DEBUG:
-                delegate.debug(logMessagePrefix + " [took " + diff + "ms]",
-                        (Object[]) arguments);
-            }
         }
     }
 

Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java?rev=1701613&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java Mon Sep  7 12:23:48 2015
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.util;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+public class PerfLoggerTest {
+
+    @Test
+    public void testEndDebug() {
+        Logger logger = Mockito.mock(Logger.class);
+        when(logger.isTraceEnabled()).thenReturn(false);
+        when(logger.isDebugEnabled()).thenReturn(true);
+
+        PerfLogger perfLogger = new PerfLogger(logger);
+        long start = perfLogger.start();
+        perfLogger.end(start, -1, "message", "argument");
+
+        verify(logger, atLeastOnce()).isTraceEnabled();
+        verify(logger, atLeastOnce()).isDebugEnabled();
+        verify(logger, times(1)).debug(anyString(), any(Object[].class));
+        verifyNoMoreInteractions(logger);
+    }
+
+    @Test
+    public void testEndSkipsIsDebugEnabled() {
+        Logger logger = Mockito.mock(Logger.class);
+        when(logger.isTraceEnabled()).thenReturn(false);
+        when(logger.isDebugEnabled()).thenReturn(false);
+
+        PerfLogger perfLogger = new PerfLogger(logger);
+        long start = perfLogger.start();
+        perfLogger.end(start, -1, "message", "argument");
+
+        verify(logger, never()).isTraceEnabled();
+        verify(logger, times(1)).isDebugEnabled();
+        verifyNoMoreInteractions(logger);
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native