Coverage Report - org.apache.giraph.utils.YourKitProfiler
 
Classes in this File Line Coverage Branch Coverage Complexity
YourKitProfiler
0%
0/26
0%
0/6
5
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 package org.apache.giraph.utils;
 20  
 
 21  
 import org.apache.log4j.Logger;
 22  
 
 23  
 import com.yourkit.api.Controller;
 24  
 import com.yourkit.api.ProfilingModes;
 25  
 
 26  
 /**
 27  
  * Helper for YourKit profiling from within the code.
 28  
  *
 29  
  * See the following for information about usage:
 30  
  *  - http://www.yourkit.com/docs/95/help/api.jsp
 31  
  *  - http://www.yourkit.com/docs/95/api/index.html
 32  
  *
 33  
  * This class is a simple helper around the API mentioned above
 34  
  * followed by any amount of snapshotX calls and finally
 35  
  * {@link YourKitContext#stop()}.
 36  
  * See also {@link YourKitContext}.
 37  
  *
 38  
  * As of 05/2013 YourKit is not publishing their API jars to Maven, but their
 39  
  * license allows us to do it, so we have setup a repository to do this.
 40  
  * See https://github.com/facebook/sonatype-yourkit for more info.
 41  
  */
 42  
 public class YourKitProfiler {
 43  
   /** Logger */
 44  0
   private static final Logger LOG = Logger.getLogger(YourKitProfiler.class);
 45  
   /** Record every ALLOCATION_RECORDING_INTERVAL'th allocation */
 46  
   private static final int ALLOCATION_RECORDING_INTERVAL = 1000;
 47  
 
 48  
   /** Don't construct, allow inheritance */
 49  0
   protected YourKitProfiler() { }
 50  
 
 51  
   /**
 52  
    * Create a YourKit controller and do some or all of
 53  
    * {@link Controller#enableExceptionTelemetry()}
 54  
    * {@link Controller#startCPUProfiling(long, String, String)}
 55  
    * {@link Controller#startAllocationRecording(boolean, int, boolean,
 56  
    * int, boolean, boolean)}
 57  
    * based on boolean config options passed as method parameters
 58  
    *
 59  
    * @param enableStackTelemetry      enable stack telementry
 60  
    * @param enableCPUProfilling       enable CPU profilling
 61  
    * @param enableAllocationRecording enable allocation recording
 62  
    *
 63  
    * @return profiler context, or null if controller cannot be created
 64  
    */
 65  
   public static YourKitContext startProfile(boolean enableStackTelemetry,
 66  
                                             boolean enableCPUProfilling,
 67  
                                             boolean enableAllocationRecording) {
 68  
     Controller controller;
 69  
     try {
 70  0
       controller = new Controller();
 71  
       // CHECKSTYLE: stop IllegalCatch
 72  0
     } catch (Exception e) {
 73  
       // CHECKSTYLE: resume IllegalCatch
 74  0
       LOG.info("Failed to set up YourKit controller", e);
 75  0
       return null;
 76  0
     }
 77  
 
 78  
     try {
 79  0
       if (enableStackTelemetry) {
 80  0
         controller.enableStackTelemetry();
 81  0
         LOG.info("Enabled Yourkit stack telemetry");
 82  
       }
 83  
       // CHECKSTYLE: stop IllegalCatch
 84  0
     } catch (Exception e) {
 85  
       // CHECKSTYLE: resume IllegalCatch
 86  0
       LOG.info("Failed to enable YourKit stack telemetry", e);
 87  0
     }
 88  
 
 89  
     try {
 90  0
       if (enableCPUProfilling) {
 91  0
         controller.startCPUProfiling(ProfilingModes.CPU_SAMPLING,
 92  
           Controller.DEFAULT_FILTERS, Controller.DEFAULT_WALLTIME_SPEC);
 93  0
         LOG.info("Started YourKit CPU profiling");
 94  
       }
 95  
       // CHECKSTYLE: stop IllegalCatch
 96  0
     } catch (Exception e) {
 97  
       // CHECKSTYLE: resume IllegalCatch
 98  0
       LOG.info("Failed to start YourKit CPU profiling", e);
 99  0
     }
 100  
 
 101  
     try {
 102  0
       if (enableAllocationRecording) {
 103  0
         controller.startAllocationRecording(true, ALLOCATION_RECORDING_INTERVAL,
 104  
             false, -1, true, false);
 105  0
         LOG.info("Started YourKit allocation recording");
 106  
       }
 107  
       // CHECKSTYLE: stop IllegalCatch
 108  0
     } catch (Exception e) {
 109  
       // CHECKSTYLE: resume IllegalCatch
 110  0
       LOG.info("Failed to start YourKit allocation recording", e);
 111  0
     }
 112  
 
 113  0
     return new YourKitContext(controller);
 114  
   }
 115  
 }