1 /*
   2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package jdk.vm.ci.hotspot;
  24 
  25 import jdk.vm.ci.hotspot.EmptyEventProvider.EmptyCompilationEvent;
  26 import jdk.vm.ci.hotspot.EmptyEventProvider.EmptyCompilerFailureEvent;
  27 
  28 /**
  29  * Service-provider class for logging compiler related events.
  30  */
  31 public interface EventProvider {
  32 
  33     /**
  34      * Creates and returns an empty implementation for {@link EventProvider}. This implementation
  35      * can be used when no logging is requested.
  36      */
  37     static EventProvider createEmptyEventProvider() {
  38         return new EmptyEventProvider();
  39     }
  40 
  41     /**
  42      * Creates and returns an empty implementation for {@link CompilationEvent}.
  43      */
  44     static CompilationEvent createEmptyCompilationEvent() {
  45         return new EmptyCompilationEvent();
  46     }
  47 
  48     /**
  49      * Creates and returns an empty implementation for {@link CompilationEvent}.
  50      */
  51     static CompilerFailureEvent createEmptyCompilerFailureEvent() {
  52         return new EmptyCompilerFailureEvent();
  53     }
  54 
  55     /**
  56      * An instant event is an event that is not considered to have taken any time.
  57      */
  58     public interface InstantEvent {
  59         /**
  60          * Commits the event.
  61          */
  62         void commit();
  63 
  64         /**
  65          * Determines if this particular event instance would be committed to the data stream right
  66          * now if application called {@link #commit()}. This in turn depends on whether the event is
  67          * enabled and possible other factors.
  68          *
  69          * @return if this event would be committed on a call to {@link #commit()}.
  70          */
  71         boolean shouldWrite();
  72     }
  73 
  74     /**
  75      * Timed events describe an operation that somehow consumes time.
  76      */
  77     public interface TimedEvent extends InstantEvent {
  78         /**
  79          * Starts the timing for this event.
  80          */
  81         void begin();
  82 
  83         /**
  84          * Ends the timing period for this event.
  85          */
  86         void end();
  87     }
  88 
  89     /**
  90      * Creates a new {@link CompilationEvent}.
  91      *
  92      * @return a compilation event
  93      */
  94     CompilationEvent newCompilationEvent();
  95 
  96     /**
  97      * A compilation event.
  98      */
  99     public interface CompilationEvent extends TimedEvent {
 100         void setMethod(String method);
 101 
 102         void setCompileId(int compileId);
 103 
 104         void setCompileLevel(int compileLevel);
 105 
 106         void setSucceeded(boolean succeeded);
 107 
 108         void setIsOsr(boolean isOsr);
 109 
 110         void setCodeSize(int codeSize);
 111 
 112         void setInlinedBytes(int inlinedBytes);
 113     }
 114 
 115     /**
 116      * Creates a new {@link CompilerFailureEvent}.
 117      *
 118      * @return a compiler failure event
 119      */
 120     CompilerFailureEvent newCompilerFailureEvent();
 121 
 122     /**
 123      * A compiler failure event.
 124      */
 125     public interface CompilerFailureEvent extends InstantEvent {
 126         void setCompileId(int compileId);
 127 
 128         void setMessage(String message);
 129     }
 130 }