| #!/usr/bin/python |
| # |
| # Find the top 100 functions that are repeated in multiple .o files, so we can out-of-line those |
| # |
| # |
| |
| import subprocess |
| from collections import defaultdict |
| |
| # the odd bash construction here is because some of the .o files returned |
| # by find are not object files and I don't want xargs to stop when it hits |
| # an error |
| a = subprocess.Popen( |
| ( |
| "find instdir/program/ -name *.so | " |
| "xargs echo nm --radix=d --size-sort --demangle | bash" |
| ), |
| stdout=subprocess.PIPE, shell=True) |
| |
| # xargs sh -c "somecommand || true" |
| |
| nameDict = defaultdict(int) |
| with a.stdout as txt: |
| for line in txt: |
| line = line.strip() |
| idx1 = line.find(" ") |
| idx2 = line.find(" ", idx1 + 1) |
| name = line[idx2:] |
| nameDict[name] += 1 |
| |
| sizeDict = defaultdict(set) |
| for k, v in nameDict.iteritems(): |
| sizeDict[v].add(k) |
| |
| cnt = 0 |
| for k in sorted(list(sizeDict), reverse=True): |
| print(k) |
| for v in sizeDict[k]: |
| print(v) |
| cnt += 1 |
| if cnt > 100: |
| break |
| |
| # first = sorted(list(sizeDict))[-1] |
| # print first |
| |
| |
| # include/vcl/ITiledRenderable.hxx |
| # why is gaLOKPointerMap declared inside this header? |