perf_test.cc 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "testing/perf/perf_test.h"
  5. #include <stdio.h>
  6. #include "base/strings/string_number_conversions.h"
  7. #include "base/strings/stringprintf.h"
  8. namespace {
  9. std::string ResultsToString(const std::string& measurement,
  10. const std::string& modifier,
  11. const std::string& trace,
  12. const std::string& values,
  13. const std::string& prefix,
  14. const std::string& suffix,
  15. const std::string& units,
  16. bool important) {
  17. // <*>RESULT <graph_name>: <trace_name>= <value> <units>
  18. // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units>
  19. // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units>
  20. return base::StringPrintf("%sRESULT %s%s: %s= %s%s%s %s\n",
  21. important ? "*" : "", measurement.c_str(), modifier.c_str(),
  22. trace.c_str(), prefix.c_str(), values.c_str(), suffix.c_str(),
  23. units.c_str());
  24. }
  25. void PrintResultsImpl(const std::string& measurement,
  26. const std::string& modifier,
  27. const std::string& trace,
  28. const std::string& values,
  29. const std::string& prefix,
  30. const std::string& suffix,
  31. const std::string& units,
  32. bool important) {
  33. fflush(stdout);
  34. printf("%s", ResultsToString(measurement, modifier, trace, values,
  35. prefix, suffix, units, important).c_str());
  36. fflush(stdout);
  37. }
  38. } // namespace
  39. namespace perf_test {
  40. void PrintResult(const std::string& measurement,
  41. const std::string& modifier,
  42. const std::string& trace,
  43. size_t value,
  44. const std::string& units,
  45. bool important) {
  46. PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value),
  47. std::string(), std::string(), units, important);
  48. }
  49. void PrintResult(const std::string& measurement,
  50. const std::string& modifier,
  51. const std::string& trace,
  52. double value,
  53. const std::string& units,
  54. bool important) {
  55. PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value),
  56. std::string(), std::string(), units, important);
  57. }
  58. void AppendResult(std::string& output,
  59. const std::string& measurement,
  60. const std::string& modifier,
  61. const std::string& trace,
  62. size_t value,
  63. const std::string& units,
  64. bool important) {
  65. output +=
  66. ResultsToString(measurement, modifier, trace, base::NumberToString(value),
  67. std::string(), std::string(), units, important);
  68. }
  69. void PrintResult(const std::string& measurement,
  70. const std::string& modifier,
  71. const std::string& trace,
  72. const std::string& value,
  73. const std::string& units,
  74. bool important) {
  75. PrintResultsImpl(measurement,
  76. modifier,
  77. trace,
  78. value,
  79. std::string(),
  80. std::string(),
  81. units,
  82. important);
  83. }
  84. void AppendResult(std::string& output,
  85. const std::string& measurement,
  86. const std::string& modifier,
  87. const std::string& trace,
  88. const std::string& value,
  89. const std::string& units,
  90. bool important) {
  91. output += ResultsToString(measurement,
  92. modifier,
  93. trace,
  94. value,
  95. std::string(),
  96. std::string(),
  97. units,
  98. important);
  99. }
  100. void PrintResultMeanAndError(const std::string& measurement,
  101. const std::string& modifier,
  102. const std::string& trace,
  103. const std::string& mean_and_error,
  104. const std::string& units,
  105. bool important) {
  106. PrintResultsImpl(measurement, modifier, trace, mean_and_error,
  107. "{", "}", units, important);
  108. }
  109. void AppendResultMeanAndError(std::string& output,
  110. const std::string& measurement,
  111. const std::string& modifier,
  112. const std::string& trace,
  113. const std::string& mean_and_error,
  114. const std::string& units,
  115. bool important) {
  116. output += ResultsToString(measurement, modifier, trace, mean_and_error,
  117. "{", "}", units, important);
  118. }
  119. void PrintResultList(const std::string& measurement,
  120. const std::string& modifier,
  121. const std::string& trace,
  122. const std::string& values,
  123. const std::string& units,
  124. bool important) {
  125. PrintResultsImpl(measurement, modifier, trace, values,
  126. "[", "]", units, important);
  127. }
  128. void AppendResultList(std::string& output,
  129. const std::string& measurement,
  130. const std::string& modifier,
  131. const std::string& trace,
  132. const std::string& values,
  133. const std::string& units,
  134. bool important) {
  135. output += ResultsToString(measurement, modifier, trace, values,
  136. "[", "]", units, important);
  137. }
  138. void PrintSystemCommitCharge(const std::string& test_name,
  139. size_t charge,
  140. bool important) {
  141. PrintSystemCommitCharge(stdout, test_name, charge, important);
  142. }
  143. void PrintSystemCommitCharge(FILE* target,
  144. const std::string& test_name,
  145. size_t charge,
  146. bool important) {
  147. fprintf(target, "%s", SystemCommitChargeToString(test_name, charge,
  148. important).c_str());
  149. }
  150. std::string SystemCommitChargeToString(const std::string& test_name,
  151. size_t charge,
  152. bool important) {
  153. std::string trace_name(test_name);
  154. std::string output;
  155. AppendResult(output,
  156. "commit_charge",
  157. std::string(),
  158. "cc" + trace_name,
  159. charge,
  160. "kb",
  161. important);
  162. return output;
  163. }
  164. } // namespace perf_test