1 package jdk.jfr.event.runtime;
   2 
   3 import java.nio.ByteBuffer;
   4 import java.util.List;
   5 
   6 import jdk.internal.misc.VM;
   7 
   8 import jdk.jfr.Recording;
   9 import jdk.jfr.consumer.RecordedEvent;
  10 import jdk.test.lib.Asserts;
  11 import jdk.test.lib.jfr.EventNames;
  12 import jdk.test.lib.jfr.Events;
  13 
  14 /**
  15  * @test
  16  * @key jfr
  17  * @requires vm.hasJFR
  18  * @library /test/lib
  19  * @modules java.base/jdk.internal.misc
  20  * @run main/othervm -XX:MaxDirectMemorySize=128m jdk.jfr.event.runtime.TestDirectMemoryStatisticsEvent
  21  */
  22 public class TestDirectMemoryStatisticsEvent {
  23 
  24     private static final String EVENT_PATH = EventNames.DirectMemoryStatistics;
  25 
  26     public static void main(String[] args) throws Throwable {
  27         Recording recording = new Recording();
  28         recording.enable(EVENT_PATH);
  29         recording.start();
  30         int rounds = 16;
  31         int size = 1 * 1024 * 1024; // 1M
  32         for (int i = 0; i < rounds; i++) {
  33             ByteBuffer.allocateDirect(size);
  34         }
  35         recording.stop();
  36 
  37         List<RecordedEvent> events = Events.fromRecording(recording);
  38         Events.hasEvents(events);
  39 
  40         long count = 0;
  41         long totalCapacity = 0;
  42         long memoryUsed = 0;
  43 
  44         for (RecordedEvent event : events) {
  45             System.out.println(event);
  46             Asserts.assertTrue(Events.isEventType(event, EVENT_PATH), "Wrong event type");
  47             count = Math.max(count, Events.assertField(event, "count").getValue());
  48             totalCapacity = Math.max(count, Events.assertField(event, "totalCapacity").getValue());
  49             memoryUsed = Math.max(count, Events.assertField(event, "memoryUsed").getValue());
  50             Asserts.assertEquals(VM.maxDirectMemory(), Events.assertField(event, "limit").getValue());
  51         }
  52 
  53         Asserts.assertGreaterThanOrEqual(count, (long)rounds, "Too few count in statistics event");
  54         Asserts.assertGreaterThanOrEqual(totalCapacity, (long)(rounds * size), "Too few totalCapacity in statistics event");
  55         Asserts.assertGreaterThanOrEqual(memoryUsed, totalCapacity, "Too few memoryUsed in statistics event");
  56     }
  57 }