1 // Copyright (c) 2014 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 // 5 // This is a utility executable used for generating hashes for pepper 6 // interfaces for inclusion in tools/metrics/histograms/histograms.xml. Every 7 // interface-version pair must have a corresponding entry in the enum there. 8 // 9 // The hashing logic here must match the hashing logic at 10 // ppapi/proxy/interface_list.cc. 11 12 #include <stdio.h> 13 #include <stdlib.h> 14 #include <string.h> 15 16 #include "base/hash.h" 17 #include "base/macros.h" 18 19 int main(int argc, char **argv) { 20 if (argc < 2) { 21 fprintf(stderr, "Usage: %s <interface1> <interface2> <...>\n", argv[0]); 22 fprintf(stderr, "\n"); 23 fprintf(stderr, "Prints hashes for interface names.\n"); 24 fprintf(stderr, "Example: %s \"PPB_Var;1.1\" \"PPB_FileIO;1.2\"\n", 25 argv[0]); 26 return 1; 27 } 28 for (int i = 1; i < argc; i++) { 29 uint32 data = base::Hash(argv[i], strlen(argv[i])); 30 31 // Strip off the signed bit because UMA doesn't support negative values, 32 // but takes a signed int as input. 33 int hash = static_cast<int>(data & 0x7fffffff); 34 printf("<int value=\"%d\" label=\"%s\"/>\n", hash, argv[i]); 35 } 36 return 0; 37 } 38