com.google.monitoring.runtime.instrumentation
Class ConstructorInstrumenter

java.lang.Object
  extended by com.google.monitoring.runtime.instrumentation.ConstructorInstrumenter
All Implemented Interfaces:
ClassFileTransformer

public class ConstructorInstrumenter
extends Object
implements ClassFileTransformer

Instruments bytecode by inserting a specified call in the constructor of a given class. This class is intended to be loaded by a javaagent; end-users will want to add ConstructorCallbacks by invoking instrumentClass(Class, ConstructorCallback).

Author:
Jeremy Manson

Method Summary
static byte[] instrument(byte[] originalBytes, Class<?> classBeingRedefined)
          Given the bytes representing a class, add invocations of the ConstructorCallback method to the constructor.
static void instrumentClass(Class<?> c, ConstructorCallback<?> sampler)
          Ensures that the given sampler will be invoked every time a constructor for class c is invoked.
static void invokeSamplers(Object o)
          Bytecode is rewritten to invoke this method; it calls the sampler for the given class.
 byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
          
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

instrumentClass

public static void instrumentClass(Class<?> c,
                                   ConstructorCallback<?> sampler)
                            throws UnmodifiableClassException
Ensures that the given sampler will be invoked every time a constructor for class c is invoked.

Parameters:
c - The class to be tracked
sampler - the code to be invoked when an instance of c is constructed
Throws:
UnmodifiableClassException

transform

public byte[] transform(ClassLoader loader,
                        String className,
                        Class<?> classBeingRedefined,
                        ProtectionDomain protectionDomain,
                        byte[] classfileBuffer)

Specified by:
transform in interface ClassFileTransformer

instrument

public static byte[] instrument(byte[] originalBytes,
                                Class<?> classBeingRedefined)
Given the bytes representing a class, add invocations of the ConstructorCallback method to the constructor.

Parameters:
originalBytes - the original byte[] code.
Returns:
the instrumented byte[] code.

invokeSamplers

public static void invokeSamplers(Object o)
Bytecode is rewritten to invoke this method; it calls the sampler for the given class. Note that, unless the javaagent command line argument "subclassesAlso" is specified, it won't do anything if o is a subclass of the class that was supposed to be tracked.



Copyright © 2015. All Rights Reserved.