Index: ppapi/tools/pepper_hash_for_uma.cc |
diff --git a/ppapi/tools/pepper_hash_for_uma.cc b/ppapi/tools/pepper_hash_for_uma.cc |
index 6e38cfdd4b6483c7fe879cc50e17f4dd401a3037..7c006a89b79a094cb07eb1d99ef1d5ce4178c2cd 100644 |
--- a/ppapi/tools/pepper_hash_for_uma.cc |
+++ b/ppapi/tools/pepper_hash_for_uma.cc |
@@ -8,11 +8,21 @@ |
// |
// The hashing logic here must match the hashing logic at |
// ppapi/proxy/interface_list.cc. |
+// |
+// This utility can be used to generate a sorted list of hashes for all current |
+// PPB* interfaces by running a script to generate the interface names, e.g. |
+// $ grep -r "PPB_" ppapi/c | grep -o "\".*;[0-9]*\.[0-9]*\"" | tr '\n' ' ' |
+// and then invoking pepper_hash_for_uma on the list. The sorted output hashes |
+// can be compared to tools/metrics/histograms/histograms.xml to determine if |
+// any interfaces have been left out. |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
+#include <algorithm> |
+#include <vector> |
+ |
#include "base/hash.h" |
#include "base/macros.h" |
@@ -25,13 +35,19 @@ int main(int argc, char **argv) { |
argv[0]); |
return 1; |
} |
+ std::vector<std::pair<uint32, char*>> hashes; |
for (int i = 1; i < argc; i++) { |
uint32 data = base::Hash(argv[i], strlen(argv[i])); |
// Strip off the signed bit because UMA doesn't support negative values, |
// but takes a signed int as input. |
int hash = static_cast<int>(data & 0x7fffffff); |
- printf("<int value=\"%d\" label=\"%s\"/>\n", hash, argv[i]); |
+ hashes.push_back(std::make_pair(hash, argv[i])); |
} |
+ std::sort(hashes.begin(), hashes.end()); |
+ for (const auto& hash : hashes) { |
+ printf("<int value=\"%d\" label=\"%s\"/>\n", hash.first, hash.second); |
+ } |
+ |
return 0; |
} |