summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-02-20 07:38:28 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-02-20 07:38:28 -0800
commit4d23ccc023c8b98eb97a7cce820aa80bff2f3522 (patch)
tree9d28fb439d1c7d37ec01058072c0542e8d6fa763 /tools
parent41977d7cd2f0676a1b135a0991545721d6dce3ef (diff)
downloadbuild-4d23ccc023c8b98eb97a7cce820aa80bff2f3522.zip
build-4d23ccc023c8b98eb97a7cce820aa80bff2f3522.tar.gz
build-4d23ccc023c8b98eb97a7cce820aa80bff2f3522.tar.bz2
auto import from //branches/cupcake/...@132569
Diffstat (limited to 'tools')
-rwxr-xr-xtools/check_builds.sh67
-rwxr-xr-xtools/compare_fileslist.py106
-rwxr-xr-xtools/fileslist.py41
3 files changed, 214 insertions, 0 deletions
diff --git a/tools/check_builds.sh b/tools/check_builds.sh
new file mode 100755
index 0000000..14dfec6
--- /dev/null
+++ b/tools/check_builds.sh
@@ -0,0 +1,67 @@
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Usage:
+#
+# Source this file into your environment. Then:
+#
+# $ golden_builds sdk-sdk generic-eng generic-userdebug dream-eng
+#
+# will build a set of combos. This might take a while. Then you can
+# go make changes, and run:
+#
+# $ check_builds sdk-sdk generic-eng generic-userdebug dream-eng
+#
+# Go get dinner, and when you get back, there will be a file
+# test-builds/sizes.html that has a pretty chart of which files are
+# in which tree, and how big they are. In that chart, cells for files
+# that are missing are red, and rows where the file sizes are not all
+# the same will be blue.
+#
+
+TEST_BUILD_DIR=test-builds
+
+function do_builds
+{
+ PREFIX=$1
+ shift
+ while [ -n "$1" ]
+ do
+ rm -rf $TEST_BUILD_DIR/$PREFIX-$1
+ make -j6 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1
+ if [ $? -ne 0 ] ; then
+ echo FAILED
+ return
+ fi
+ shift
+ done
+}
+
+function golden_builds
+{
+ rm -rf $TEST_BUILD_DIR/golden-* $TEST_BUILD_DIR/dist-*
+ do_builds golden "$@"
+}
+
+function check_builds
+{
+ rm -rf $TEST_BUILD_DIR/dist-*
+ do_builds dist "$@"
+ build/tools/compare_fileslist.py \
+ $TEST_BUILD_DIR/golden-*/installed-files.txt \
+ $TEST_BUILD_DIR/dist-*/installed-files.txt \
+ > $TEST_BUILD_DIR/sizes.html
+}
+
diff --git a/tools/compare_fileslist.py b/tools/compare_fileslist.py
new file mode 100755
index 0000000..1f507d8
--- /dev/null
+++ b/tools/compare_fileslist.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import cgi, os, string, sys
+
+def IsDifferent(row):
+ val = None
+ for v in row:
+ if v:
+ if not val:
+ val = v
+ else:
+ if val != v:
+ return True
+ return False
+
+def main(argv):
+ inputs = argv[1:]
+ data = {}
+ index = 0
+ for input in inputs:
+ f = file(input, "r")
+ lines = f.readlines()
+ f.close()
+ lines = map(string.split, lines)
+ lines = map(lambda (x,y): (y,int(x)), lines)
+ for fn,sz in lines:
+ if not data.has_key(fn):
+ data[fn] = {}
+ data[fn][index] = sz
+ index = index + 1
+ rows = []
+ for fn,sizes in data.iteritems():
+ row = [fn]
+ for i in range(0,index):
+ if sizes.has_key(i):
+ row.append(sizes[i])
+ else:
+ row.append(None)
+ rows.append(row)
+ rows = sorted(rows, key=lambda x: x[0])
+ print """<html>
+ <head>
+ <style type="text/css">
+ .fn, .sz, .z, .d {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+ .sz, .z, .d {
+ text-align: right;
+ }
+ .fn {
+ background-color: #ffffdd;
+ }
+ .sz {
+ background-color: #ffffcc;
+ }
+ .z {
+ background-color: #ffcccc;
+ }
+ .d {
+ background-color: #99ccff;
+ }
+ </style>
+ </head>
+ <body>
+ """
+ print "<table>"
+ print "<tr>"
+ for input in inputs:
+ combo = input.split(os.path.sep)[1]
+ print " <td class='fn'>%s</td>" % cgi.escape(combo)
+ print "</tr>"
+
+ for row in rows:
+ print "<tr>"
+ for sz in row[1:]:
+ if not sz:
+ print " <td class='z'>&nbsp;</td>"
+ elif IsDifferent(row[1:]):
+ print " <td class='d'>%d</td>" % sz
+ else:
+ print " <td class='sz'>%d</td>" % sz
+ print " <td class='fn'>%s</td>" % cgi.escape(row[0])
+ print "</tr>"
+ print "</table>"
+ print "</body></html>"
+
+if __name__ == '__main__':
+ main(sys.argv)
+
+
diff --git a/tools/fileslist.py b/tools/fileslist.py
new file mode 100755
index 0000000..ae105e6
--- /dev/null
+++ b/tools/fileslist.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import os, sys
+
+def main(argv):
+ output = []
+ roots = argv[1:]
+ for root in roots:
+ base = len(root[:root.rfind(os.path.sep)])
+ for dir, dirs, files in os.walk(root):
+ relative = dir[base:]
+ for f in files:
+ try:
+ row = (
+ os.path.getsize(os.path.sep.join((dir, f))),
+ os.path.sep.join((relative, f)),
+ )
+ output.append(row)
+ except os.error:
+ pass
+ for row in output:
+ print "%12d %s" % row
+
+if __name__ == '__main__':
+ main(sys.argv)
+