RakNetStatistics.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /*
  2. * Copyright (c) 2014, Oculus VR, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. *
  9. */
  10. /// \file
  11. ///
  12. #include "RakNetStatistics.h"
  13. #include <stdio.h> // sprintf
  14. #include "GetTime.h"
  15. #include "RakString.h"
  16. using namespace RakNet;
  17. // Verbosity level currently supports 0 (low), 1 (medium), 2 (high)
  18. // Buffer must be hold enough to hold the output string. See the source to get an idea of how many bytes will be output
  19. void RAK_DLL_EXPORT RakNet::StatisticsToString( RakNetStatistics *s, char *buffer, int verbosityLevel )
  20. {
  21. if ( s == 0 )
  22. {
  23. sprintf( buffer, "stats is a NULL pointer in statsToString\n" );
  24. return ;
  25. }
  26. if (verbosityLevel==0)
  27. {
  28. sprintf(buffer,
  29. "Bytes per second sent %" PRINTF_64_BIT_MODIFIER "u\n"
  30. "Bytes per second received %" PRINTF_64_BIT_MODIFIER "u\n"
  31. "Current packetloss %.1f%%\n",
  32. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_SENT],
  33. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
  34. s->packetlossLastSecond*100.0f
  35. );
  36. }
  37. else if (verbosityLevel==1)
  38. {
  39. sprintf(buffer,
  40. "Actual bytes per second sent %" PRINTF_64_BIT_MODIFIER "u\n"
  41. "Actual bytes per second received %" PRINTF_64_BIT_MODIFIER "u\n"
  42. "Message bytes per second pushed %" PRINTF_64_BIT_MODIFIER "u\n"
  43. "Total actual bytes sent %" PRINTF_64_BIT_MODIFIER "u\n"
  44. "Total actual bytes received %" PRINTF_64_BIT_MODIFIER "u\n"
  45. "Total message bytes pushed %" PRINTF_64_BIT_MODIFIER "u\n"
  46. "Current packetloss %.1f%%\n"
  47. "Average packetloss %.1f%%\n"
  48. "Elapsed connection time in seconds %" PRINTF_64_BIT_MODIFIER "u\n",
  49. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_SENT],
  50. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
  51. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_PUSHED],
  52. (long long unsigned int) s->runningTotal[ACTUAL_BYTES_SENT],
  53. (long long unsigned int) s->runningTotal[ACTUAL_BYTES_RECEIVED],
  54. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_PUSHED],
  55. s->packetlossLastSecond*100.0f,
  56. s->packetlossTotal*100.0f,
  57. (long long unsigned int) (uint64_t)((RakNet::GetTimeUS()-s->connectionStartTime)/1000000)
  58. );
  59. if (s->BPSLimitByCongestionControl!=0)
  60. {
  61. char buff2[128];
  62. sprintf(buff2,
  63. "Send capacity %" PRINTF_64_BIT_MODIFIER "u bytes per second (%.0f%%)\n",
  64. (long long unsigned int) s->BPSLimitByCongestionControl,
  65. 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByCongestionControl
  66. );
  67. strcat(buffer,buff2);
  68. }
  69. if (s->BPSLimitByOutgoingBandwidthLimit!=0)
  70. {
  71. char buff2[128];
  72. sprintf(buff2,
  73. "Send limit %" PRINTF_64_BIT_MODIFIER "u (%.0f%%)\n",
  74. (long long unsigned int) s->BPSLimitByOutgoingBandwidthLimit,
  75. 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByOutgoingBandwidthLimit
  76. );
  77. strcat(buffer,buff2);
  78. }
  79. }
  80. else
  81. {
  82. sprintf(buffer,
  83. "Actual bytes per second sent %" PRINTF_64_BIT_MODIFIER "u\n"
  84. "Actual bytes per second received %" PRINTF_64_BIT_MODIFIER "u\n"
  85. "Message bytes per second sent %" PRINTF_64_BIT_MODIFIER "u\n"
  86. "Message bytes per second resent %" PRINTF_64_BIT_MODIFIER "u\n"
  87. "Message bytes per second pushed %" PRINTF_64_BIT_MODIFIER "u\n"
  88. "Message bytes per second returned %" PRINTF_64_BIT_MODIFIER "u\n"
  89. "Message bytes per second ignored %" PRINTF_64_BIT_MODIFIER "u\n"
  90. "Total bytes sent %" PRINTF_64_BIT_MODIFIER "u\n"
  91. "Total bytes received %" PRINTF_64_BIT_MODIFIER "u\n"
  92. "Total message bytes sent %" PRINTF_64_BIT_MODIFIER "u\n"
  93. "Total message bytes resent %" PRINTF_64_BIT_MODIFIER "u\n"
  94. "Total message bytes pushed %" PRINTF_64_BIT_MODIFIER "u\n"
  95. "Total message bytes returned %" PRINTF_64_BIT_MODIFIER "u\n"
  96. "Total message bytes ignored %" PRINTF_64_BIT_MODIFIER "u\n"
  97. "Messages in send buffer, by priority %i,%i,%i,%i\n"
  98. "Bytes in send buffer, by priority %i,%i,%i,%i\n"
  99. "Messages in resend buffer %i\n"
  100. "Bytes in resend buffer %" PRINTF_64_BIT_MODIFIER "u\n"
  101. "Current packetloss %.1f%%\n"
  102. "Average packetloss %.1f%%\n"
  103. "Elapsed connection time in seconds %" PRINTF_64_BIT_MODIFIER "u\n",
  104. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_SENT],
  105. (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
  106. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_SENT],
  107. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_RESENT],
  108. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_PUSHED],
  109. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_RECEIVED_PROCESSED],
  110. (long long unsigned int) s->valueOverLastSecond[USER_MESSAGE_BYTES_RECEIVED_IGNORED],
  111. (long long unsigned int) s->runningTotal[ACTUAL_BYTES_SENT],
  112. (long long unsigned int) s->runningTotal[ACTUAL_BYTES_RECEIVED],
  113. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_SENT],
  114. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_RESENT],
  115. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_PUSHED],
  116. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_RECEIVED_PROCESSED],
  117. (long long unsigned int) s->runningTotal[USER_MESSAGE_BYTES_RECEIVED_IGNORED],
  118. s->messageInSendBuffer[IMMEDIATE_PRIORITY],s->messageInSendBuffer[HIGH_PRIORITY],s->messageInSendBuffer[MEDIUM_PRIORITY],s->messageInSendBuffer[LOW_PRIORITY],
  119. (unsigned int) s->bytesInSendBuffer[IMMEDIATE_PRIORITY],(unsigned int) s->bytesInSendBuffer[HIGH_PRIORITY],(unsigned int) s->bytesInSendBuffer[MEDIUM_PRIORITY],(unsigned int) s->bytesInSendBuffer[LOW_PRIORITY],
  120. s->messagesInResendBuffer,
  121. (long long unsigned int) s->bytesInResendBuffer,
  122. s->packetlossLastSecond*100.0f,
  123. s->packetlossTotal*100.0f,
  124. (long long unsigned int) (uint64_t)((RakNet::GetTimeUS()-s->connectionStartTime)/1000000)
  125. );
  126. if (s->BPSLimitByCongestionControl!=0)
  127. {
  128. char buff2[128];
  129. sprintf(buff2,
  130. "Send capacity %" PRINTF_64_BIT_MODIFIER "u bytes per second (%.0f%%)\n",
  131. (long long unsigned int) s->BPSLimitByCongestionControl,
  132. 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByCongestionControl
  133. );
  134. strcat(buffer,buff2);
  135. }
  136. if (s->BPSLimitByOutgoingBandwidthLimit!=0)
  137. {
  138. char buff2[128];
  139. sprintf(buff2,
  140. "Send limit %" PRINTF_64_BIT_MODIFIER "u (%.0f%%)\n",
  141. (long long unsigned int) s->BPSLimitByOutgoingBandwidthLimit,
  142. 100.0f * s->valueOverLastSecond[ACTUAL_BYTES_SENT] / s->BPSLimitByOutgoingBandwidthLimit
  143. );
  144. strcat(buffer,buff2);
  145. }
  146. }
  147. }
粤ICP备19079148号