Ah, that would be fine!
On Monday, 22 February 2016, Matt Sicker <[email protected]> wrote:
> Syntax-wise, you can use either @PerformanceSensitive("foo") or
> @PerformanceSensitive({"foo", "bar"})
>
> On 21 February 2016 at 22:23, Matt Sicker <[email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>
>> I can change it for the former (you need to use a string array, though),
>> the latter is only possible in Java 1.8+.
>>
>> On 21 February 2016 at 22:22, Remko Popma <[email protected]
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>>
>>> Can an annotation have multiple values?
>>> @PerformanceSensitive("AllocationFree", "CriticalPath")
>>>
>>> Or can a method be annotated with the same annotation appear multiple
>>> times?
>>> Both @PerformanceSensitive("AllocationFree")
>>> and @PerformanceSensitive("CriticalPath")?
>>>
>>>
>>> On Monday, 22 February 2016, Remko Popma <[email protected]
>>> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>>>
>>>> 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
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> 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
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>>
>>
>>
>> --
>> Matt Sicker <[email protected]
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>>
>>
>
>
>
> --
> Matt Sicker <[email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>>
>