public void printStatistics(GraalTruffleRuntime rt) {
    long endTime = System.nanoTime();
    rt.log("Truffle compilation statistics:");
    printStatistic(rt, "Compilations", compilations);
    printStatistic(rt, "  Success", success);
    printStatistic(rt, "  Failed", failures);
    printStatistic(rt, "  Interrupted", compilations - (success + failures));
    printStatistic(rt, "Invalidated", invalidations);
    printStatistic(rt, "Queues", queues);
    printStatistic(rt, "Dequeues", dequeues);
    printStatistic(rt, "Splits", splits);
    printStatistic(rt, "Compilation Accuracy", 1.0 - invalidations / (double) compilations);
    printStatistic(rt, "Queue Accuracy", 1.0 - dequeues / (double) queues);
    printStatistic(
        rt,
        "Compilation Utilization",
        compilationTime.getSum() / (double) (endTime - firstCompilation));
    printStatistic(rt, "Remaining Compilation Queue", rt.getCompilationQueueSize());
    printStatistic(rt, "Times defered until compilation", deferCompilations);

    printStatisticTime(rt, "Time to queue", timeToQueue);
    printStatisticTime(rt, "Time to compilation", timeToCompilation);

    printStatisticTime(rt, "Compilation time", compilationTime);
    printStatisticTime(rt, "  Truffle Tier", compilationTimeTruffleTier);
    printStatisticTime(rt, "  Graal Tier", compilationTimeGraalTier);
    printStatisticTime(rt, "  Code Installation", compilationTimeCodeInstallation);

    printStatistic(rt, "Truffle node count", nodeCount);
    printStatistic(rt, "  Trivial", nodeCountTrivial);
    printStatistic(rt, "  Non Trivial", nodeCountNonTrivial);
    printStatistic(rt, "    Monomorphic", nodeCountMonomorphic);
    printStatistic(rt, "    Polymorphic", nodeCountPolymorphic);
    printStatistic(rt, "    Megamorphic", nodeCountMegamorphic);
    printStatistic(rt, "Truffle call count", callCount);
    printStatistic(rt, "  Indirect", callCountIndirect);
    printStatistic(rt, "  Direct", callCountDirect);
    printStatistic(rt, "    Dispatched", callCountDirectDispatched);
    printStatistic(rt, "    Inlined", callCountDirectInlined);
    printStatistic(rt, "    ----------");
    printStatistic(rt, "    Cloned", callCountDirectCloned);
    printStatistic(rt, "    Not Cloned", callCountDirectNotCloned);
    printStatistic(rt, "Truffle loops", loopCount);
    printStatistic(rt, "Graal node count");
    printStatistic(rt, "  After Truffle Tier", truffleTierNodeCount);
    printStatistic(rt, "  After Graal Tier", graalTierNodeCount);

    printStatistic(rt, "Graal comilation result");
    printStatistic(rt, "  Code size", compilationResultCodeSize);
    printStatistic(rt, "  Total frame size", compilationResultTotalFrameSize);
    printStatistic(rt, "  Exception handlers", compilationResultExceptionHandlers);
    printStatistic(rt, "  Infopoints", compilationResultInfopoints);
    compilationResultInfopointStatistics.printStatistics(rt, identity());
    printStatistic(rt, "  Marks", compilationResultMarks);
    printStatistic(rt, "  Data references", compilationResultDataPatches);

    if (TruffleCompilerOptions.TruffleCompilationStatisticDetails.getValue()) {
      printStatistic(rt, "Truffle nodes");
      nodeStatistics.printStatistics(rt, Class::getSimpleName);
      printStatistic(rt, "Graal nodes after Truffle tier");
      truffleTierNodeStatistics.printStatistics(rt, Class::getSimpleName);
      printStatistic(rt, "Graal nodes after Graal tier");
      graalTierNodeStatistics.printStatistics(rt, Class::getSimpleName);
    }
  }