package org.gridkit.jvmtool.gcflow;

import java.util.Collection;

public interface GarbageCollectionSampler {

    public void report(String algoName, int eventsMissed, GcReport info);

    interface GcReport {

        public long getId();

        public boolean isYoungGC();

        public boolean isConcurrentGC();

        public long getCollectedSize();

        public long getPromotedSize();

        public long getTotalSizeBefore();

        public long getTotalSizeAfter();

        public Collection<String> getColletedPools();

        public Collection<String> getAllCollectedPools();

        public Collection<String> getAllMemoryPools();

        public long getSizeBefore(String pool);

        public long getSizeAfter(String pool);

        public long getSizeBefore(Collection<String> pools);

        public long getSizeAfter(Collection<String> pools);

        public long getTimeSincePreviousGC();

        public long getDuration();

        public long getJvmClockEndTime();

        public long getJvmClockStartTime();

        public long getWallClockEndTime();

        public long getWallClockStartTime();

        public Collection<String> getEdenPools();

        public Collection<String> getSurvivourPools();

        public Collection<String> getOldSpacePools();

        public Collection<String> getPermSpacePools();

    }
}
