I like @PerformanceSensitive very much!
I can then see specific variations like
@PerformanceSensitive("InlineSize")
@PerformanceSensitive("AllocationFree")
Sent from my iPhone
> On 2016/02/22, at 12:48, Gary Gregory <[email protected]> wrote:
>
> Well, a method can be on the critical path and not have been hand-optimized
> either because it is already as fast as can be or we have not gotten around
> to it (which make you want to have a @NeedsOptimization, rabbit hole
> warning!). So we could have both. Some methods would be @CriticalPath, and
> some both @CriticalPath and @HandOptimized. But you would not have just
> @HandOptimized or if you did it would imply @CriticalPath. which is a bit too
> clever ....
>
> Gary
>
>> On Sun, Feb 21, 2016 at 7:43 PM, Matt Sicker <[email protected]> wrote:
>> Those both sound better, but I can't decide on which.
>>
>>> On 21 February 2016 at 21:32, Gary Gregory <[email protected]> wrote:
>>> I wonder if @CriticalPath or @HandOptimized would convey better what we are
>>> trying to express?
>>>
>>> Gary
>>>
>>>
>>> ---------- Forwarded message ----------
>>> From: <[email protected]>
>>> Date: Sun, Feb 21, 2016 at 7:02 PM
>>> Subject: logging-log4j2 git commit: Add PerformanceSensitive annotation.
>>> To: [email protected]
>>>
>>>
>>> Repository: logging-log4j2
>>> Updated Branches:
>>> refs/heads/master f884234a8 -> 4aa7df826
>>>
>>>
>>> Add PerformanceSensitive annotation.
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>> Commit:
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4aa7df82
>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4aa7df82
>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4aa7df82
>>>
>>> Branch: refs/heads/master
>>> Commit: 4aa7df826de7e359ac3bde98597fe5ca6e4b5901
>>> Parents: f884234
>>> Author: Matt Sicker <[email protected]>
>>> Authored: Sun Feb 21 21:02:51 2016 -0600
>>> Committer: Matt Sicker <[email protected]>
>>> Committed: Sun Feb 21 21:02:51 2016 -0600
>>>
>>> ----------------------------------------------------------------------
>>> .../log4j/util/PerformanceSensitive.java | 29 ++++++++++++++++++++
>>> .../logging/log4j/util/ReflectionUtil.java | 5 ++++
>>> .../log4j/core/config/AppenderControl.java | 4 +++
>>> .../core/config/AppenderControlArraySet.java | 8 ++++--
>>> 4 files changed, 43 insertions(+), 3 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>
>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>> new file mode 100644
>>> index 0000000..3fbb058
>>> --- /dev/null
>>> +++
>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>> @@ -0,0 +1,29 @@
>>> +/*
>>> + * 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.logging.log4j.util;
>>> +
>>> +/**
>>> + * Indicates that a particular annotated construct was written with
>>> certain performance constraints in mind that
>>> + * should be considered when modifying or testing.
>>> + *
>>> + * @since 2.6
>>> + */
>>> +public @interface PerformanceSensitive {
>>> + /** Description of why this is written the way it is. */
>>> + String value() default "";
>>> +}
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>> index 6e7ce4a..dec2350 100644
>>> ---
>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>> +++
>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>> @@ -117,6 +117,7 @@ public final class ReflectionUtil {
>>> // (MS) I believe this would work without any modifications elsewhere,
>>> but I could be wrong
>>>
>>> // migrated from ReflectiveCallerClassUtility
>>> + @PerformanceSensitive
>>> public static Class<?> getCallerClass(final int depth) {
>>> if (depth < 0) {
>>> throw new IndexOutOfBoundsException(Integer.toString(depth));
>>> @@ -193,11 +194,13 @@ public final class ReflectionUtil {
>>> }
>>>
>>> // migrated from ClassLoaderContextSelector
>>> + @PerformanceSensitive
>>> public static Class<?> getCallerClass(final String fqcn) {
>>> return getCallerClass(fqcn, Strings.EMPTY);
>>> }
>>>
>>> // migrated from Log4jLoggerFactory
>>> + @PerformanceSensitive
>>> public static Class<?> getCallerClass(final String fqcn, final String
>>> pkg) {
>>> if (supportsFastReflection()) {
>>> boolean next = false;
>>> @@ -227,6 +230,7 @@ public final class ReflectionUtil {
>>> }
>>>
>>> // added for use in LoggerAdapter implementations mainly
>>> + @PerformanceSensitive
>>> public static Class<?> getCallerClass(final Class<?> anchor) {
>>> if (supportsFastReflection()) {
>>> boolean next = false;
>>> @@ -270,6 +274,7 @@ public final class ReflectionUtil {
>>> }
>>>
>>> // migrated from ThrowableProxy
>>> + @PerformanceSensitive
>>> public static Stack<Class<?>> getCurrentStackTrace() {
>>> // benchmarks show that using the SecurityManager is much faster
>>> than looping through getCallerClass(int)
>>> if (SECURITY_MANAGER != null) {
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>> index f65011d..175c9e1 100644
>>> ---
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>> +++
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>> @@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.LogEvent;
>>> import org.apache.logging.log4j.core.appender.AppenderLoggingException;
>>> import org.apache.logging.log4j.core.filter.AbstractFilterable;
>>> import org.apache.logging.log4j.core.filter.Filterable;
>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>>
>>> /**
>>> * Wraps an {@link Appender} with details an appender implementation
>>> shouldn't need to know about.
>>> @@ -88,14 +89,17 @@ public class AppenderControl extends AbstractFilterable
>>> {
>>> return isFilteredByAppenderControl(event) ||
>>> isFilteredByLevel(event) || isRecursiveCall();
>>> }
>>>
>>> + @PerformanceSensitive
>>> private boolean isFilteredByAppenderControl(final LogEvent event) {
>>> return getFilter() != null && Filter.Result.DENY ==
>>> getFilter().filter(event);
>>> }
>>>
>>> + @PerformanceSensitive
>>> private boolean isFilteredByLevel(final LogEvent event) {
>>> return level != null && intLevel < event.getLevel().intLevel();
>>> }
>>>
>>> + @PerformanceSensitive
>>> private boolean isRecursiveCall() {
>>> if (recursive.get() != null) {
>>> appenderErrorHandlerMessage("Recursive call to appender ");
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>> index 78a42b3..d30ce32 100644
>>> ---
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>> +++
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>> @@ -16,17 +16,19 @@
>>> */
>>> package org.apache.logging.log4j.core.config;
>>>
>>> -import org.apache.logging.log4j.core.Appender;
>>> -
>>> import java.util.Arrays;
>>> import java.util.HashMap;
>>> import java.util.Map;
>>> import java.util.Objects;
>>> import java.util.concurrent.atomic.AtomicReference;
>>>
>>> +import org.apache.logging.log4j.core.Appender;
>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>> +
>>> /**
>>> * Data structure with similar semantics to CopyOnWriteArraySet, but
>>> giving direct access to the underlying array.
>>> */
>>> +@PerformanceSensitive
>>> public class AppenderControlArraySet {
>>> private final AtomicReference<AppenderControl[]> appenderArray = new
>>> AtomicReference<>(new AppenderControl[0]);
>>>
>>> @@ -117,4 +119,4 @@ public class AppenderControlArraySet {
>>> public AppenderControl[] get() {
>>> return appenderArray.get();
>>> }
>>> -}
>>> \ No newline at end of file
>>> +}
>>>
>>>
>>>
>>>
>>> --
>>> E-Mail: [email protected] | [email protected]
>>> Java Persistence with Hibernate, Second Edition
>>> JUnit in Action, Second Edition
>>> Spring Batch in Action
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>
>>
>>
>> --
>> Matt Sicker <[email protected]>
>
>
>
> --
> E-Mail: [email protected] | [email protected]
> Java Persistence with Hibernate, Second Edition
> JUnit in Action, Second Edition
> Spring Batch in Action
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory