Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. package org.spongepowered.benchmark;
  2.  
  3. import com.google.inject.Inject;
  4. import org.slf4j.Logger;
  5. import org.spongepowered.api.GameState;
  6. import org.spongepowered.api.Sponge;
  7. import org.spongepowered.api.command.CommandResult;
  8. import org.spongepowered.api.command.spec.CommandSpec;
  9. import org.spongepowered.api.event.Listener;
  10. import org.spongepowered.api.event.SpongeEventFactory;
  11. import org.spongepowered.api.event.cause.Cause;
  12. import org.spongepowered.api.event.cause.NamedCause;
  13. import org.spongepowered.api.event.game.state.GameInitializationEvent;
  14. import org.spongepowered.api.event.game.state.GameStoppedEvent;
  15. import org.spongepowered.api.plugin.Plugin;
  16.  
  17. @Plugin(id = "benchmarks")
  18. public class BenchmarkPlugin {
  19.  
  20. private static final int WARMUP_ITERATIONS = 5;
  21. private static final int WARMUP_COUNT = 1000;
  22.  
  23. private static final int BENCHMARK_ITERATIONS = 20;
  24. private static final int BENCHMARK_COUNT = 10000;
  25.  
  26. private static final Cause scause = Cause.of(NamedCause.of("dummy", BenchmarkPlugin.class));
  27. private static int event_count = 0;
  28.  
  29. private static Logger slog;
  30.  
  31. @Inject private Logger logger;
  32.  
  33. @Listener
  34. public void onStart(GameInitializationEvent event) {
  35. slog = this.logger;
  36. Sponge.getCommandManager().register(this, CommandSpec.builder().executor((src, args) -> {
  37. run_benchmarks();
  38. return CommandResult.success();
  39. }).build(), "benchmark");
  40. }
  41.  
  42. @Listener
  43. public void listener1(GameStoppedEvent event) {
  44. event_count++;
  45. }
  46.  
  47. @Listener
  48. public void listener2(GameStoppedEvent event) {
  49. event_count++;
  50. }
  51.  
  52. @Listener
  53. public void listener3(GameStoppedEvent event) {
  54. event_count++;
  55. }
  56.  
  57. @Listener
  58. public void listener4(GameStoppedEvent event) {
  59. event_count++;
  60. }
  61.  
  62. @Listener
  63. public void listener5(GameStoppedEvent event) {
  64. event_count++;
  65. }
  66.  
  67. private static void run_benchmarks() {
  68. slog.info("Starting event system benchmarks");
  69.  
  70. slog.info("Running " + WARMUP_ITERATIONS + " warmup iterations of " + WARMUP_COUNT + " cycles each");
  71. event_count = 0;
  72. long start = System.nanoTime();
  73. for(int i = 0; i < WARMUP_ITERATIONS; i++) {
  74. for(int e = 0; e < WARMUP_COUNT; e++) {
  75. throw_event();
  76. }
  77. }
  78. if(event_count != WARMUP_COUNT * WARMUP_ITERATIONS * 5) {
  79. slog.error("Incorrect event count " + event_count + " (Expected " + (WARMUP_COUNT * WARMUP_ITERATIONS * 5) + ")");
  80. return;
  81. }
  82. event_count = 0;
  83. long delta = System.nanoTime() - start;
  84. slog.info("Warmup cycles took " + (delta / 1000000f) + "ms");
  85.  
  86. slog.info("================================================================================");
  87. slog.info("Running " + BENCHMARK_ITERATIONS + " benchmarking iterations of " + BENCHMARK_COUNT + " cycles each");
  88. long[] times = new long[BENCHMARK_ITERATIONS];
  89. long total_time = 0;
  90. int expected_count = BENCHMARK_COUNT * 5;
  91. for(int i = 0; i < BENCHMARK_ITERATIONS; i++) {
  92. start = System.nanoTime();
  93. for(int e = 0; e < BENCHMARK_COUNT; e++) {
  94. throw_event();
  95. }
  96. delta = System.nanoTime() - start;
  97. if(event_count != expected_count) {
  98. slog.error("Incorrect event count " + event_count + " (Expected " + expected_count + ")");
  99. return;
  100. }
  101. event_count = 0;
  102. total_time += delta;
  103. times[i] = delta;
  104. slog.info(" Iteration " + i + ": " + (delta / 1000000f) + "ms");
  105. }
  106. slog.info("================================================================================");
  107. slog.info("Total Time: " + (total_time / 1000000f) + "ms");
  108. slog.info("Mean Time: " + ((total_time / (double) BENCHMARK_ITERATIONS) / 1000000f) + "ms");
  109. }
  110.  
  111. private static void throw_event() {
  112. Sponge.getEventManager().post(SpongeEventFactory.createGameStoppedServerEvent(scause, GameState.GAME_STOPPED));
  113. }
  114.  
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement