From patchwork Sat Aug 17 17:18:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yann E. MORIN" X-Patchwork-Id: 1148745 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=busybox.net (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=free.fr Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YrdOTlIY"; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 469n3K2lySz9sMr for ; Sun, 18 Aug 2019 03:18:53 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id A9F58862DE; Sat, 17 Aug 2019 17:18:51 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4qeTwopbyCB5; Sat, 17 Aug 2019 17:18:50 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id 6EA5D8634E; Sat, 17 Aug 2019 17:18:50 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id E4A181BF402 for ; Sat, 17 Aug 2019 17:18:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id DD93621532 for ; Sat, 17 Aug 2019 17:18:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id skz7q5kXOTSB for ; Sat, 17 Aug 2019 17:18:43 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by silver.osuosl.org (Postfix) with ESMTPS id D502A2151E for ; Sat, 17 Aug 2019 17:18:40 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id t16so4541265wra.6 for ; Sat, 17 Aug 2019 10:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+uD1LNUtYFCdVN4wkzYqnieoNvzkSl/Lv21J5JVQp84=; b=YrdOTlIYq9sR/6uqceeWVoORDkX/lA8G0u0tQQ2mjcXODNlJ8lXD3ScxxAgnxFfmLX lxj3mLJIfOckW4uqvGfAN/+PeDweZp6x3drmmJlEa6Q6T4ypNPxsbd6gZ3ocHqHzPzOY lTwe+nnYruWmjqaqa4+3fKc0Xwt4RheGczrCa54Qwm8zYCk9EegGBI15rI0oXd17GvkJ C0JrajYdG/UnAO7Dn9hMtnLK+wFfp5/qENK27tJMTfaHvXQu94yQgTU3iC/XhX+0shr6 OimZxMQtMyOTZF4qEGHmECcR+Qb5pGvIeKnav4/lCEhM9vwiMCwv6S6FsLbsqQQBwrXr Y0Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=+uD1LNUtYFCdVN4wkzYqnieoNvzkSl/Lv21J5JVQp84=; b=d1dr4R9jn45M8V0z6sBadyOU3m2qg9dmHob1FOpDLSCJBDLlrqdDJoc3tBj79Ar8Gu HtnPibflWirAs5Pm2XwVEmcVy936BrYvjZqIq5XUY8KjA7Ipl/OTnLHgkTcjjTinLqjE lXtznRbjW6oP0p7Vaj/wL6xekomJXuLvc9CKRGSEUtY40YopeFRSQWVADCsOLSeKt7+g FSExQOIHH/h/gPpNi3bMY5xAJMJUl6+PWeZZTVR+nhT5yA7g1DMIavRKTHLKnknXI5YS 4HPN3QzNdFgNOpy8XMrRLEGxZbwXVaeGP6Me0FbUIAKsXcbmTHonfqg5vFG/+DewCGq2 wb/g== X-Gm-Message-State: APjAAAWS96hjp8hD2vj578zG5/uJd8/YtFVtQRmOe2P4HvR7+jdyWgks L7M9N/eiuIdvhucYBhoX9IXt0GzD X-Google-Smtp-Source: APXvYqzRT4+IR0dDzWq21Y0X5g/rfqdEHOEkBJifpyJD+3ZonwNuZdK8YIYlyhSH6hkn0Ox2Q2TMHQ== X-Received: by 2002:adf:91c2:: with SMTP id 60mr18245127wri.334.1566062319180; Sat, 17 Aug 2019 10:18:39 -0700 (PDT) Received: from localhost.localdomain (ns304657.ip-46-105-103.eu. [46.105.103.66]) by smtp.gmail.com with ESMTPSA id w13sm20864877wre.44.2019.08.17.10.18.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 Aug 2019 10:18:38 -0700 (PDT) From: "Yann E. MORIN" To: buildroot@buildroot.org Date: Sat, 17 Aug 2019 19:18:26 +0200 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Buildroot] [PATCH 5/9] support/graph-size: display human-readable size X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Yann E. MORIN" , Thomas De Schampheleire Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Currently, we forcibly report sizes in multiple of Kilobytes. In some big configurations, the sizes of the system as a whole, as well as that of individual packages, may exceed megabytes, and when some artistic assets get used, even the giagbyte may get exceed. These big sizes are not easy to read when expressed in kilobytes. Additionally, some very small packages might have sizes below the kilobyte (and now we can specify the cut-off grouping size, they may get reported), and thus the size displayed for those would be 0 kB. Add a help function that can format a floating-point size into a string with all the appropriate formatting: - there are at least 3 meaningfull digits visible, i.e. we display "3.14" or "10.4" instead of just "3" or "10", but for big number we don't care about too many precision either, so we report "100" or "1000", not "100.42" or "1000.27"; - the proper SI prefix is appended, if needed. Signed-off-by: Yann E. MORIN Cc: Thomas De Schampheleire --- support/scripts/size-stats | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/support/scripts/size-stats b/support/scripts/size-stats index 82258e4606..eb09e0dc60 100755 --- a/support/scripts/size-stats +++ b/support/scripts/size-stats @@ -22,6 +22,7 @@ import os.path import argparse import csv import collections +import math try: import matplotlib @@ -127,6 +128,17 @@ def build_package_size(filesdict, builddir): # outputf: output file for the graph # def draw_graph(pkgsize, outputf): + def size2string(sz): + divider = 1000.0 + prefixes = ['', 'k', 'M', 'G', 'T'] + while sz > divider and len(prefixes) > 1: + prefixes = prefixes[1:] + sz = sz/divider + # precision is made so that there are always at least three meaningful + # digits displayed (e.g. '3.14' and '10.4', not just '3' and '10') + precision = int(2-math.floor(math.log10(sz))) if sz < 1000 else 0 + return '{:.{prec}f} {}B'.format(sz, prefixes[0], prec=precision) + total = sum(pkgsize.values()) labels = [] values = [] @@ -138,13 +150,13 @@ def draw_graph(pkgsize, outputf): elif p == "unknown": unknown_value = sz else: - labels.append("%s (%d kB)" % (p, sz / 1000.)) + labels.append("%s (%s)" % (p, size2string(sz))) values.append(sz) if unknown_value != 0: - labels.append("Unknown (%d kB)" % (unknown_value / 1000.)) + labels.append("Unknown (%s)" % (size2string(unknown_value))) values.append(unknown_value) if other_value != 0: - labels.append("Other (%d kB)" % (other_value / 1000.)) + labels.append("Other (%s)" % (size2string(other_value))) values.append(other_value) plt.figure() @@ -158,7 +170,7 @@ def draw_graph(pkgsize, outputf): plt.setp(texts, fontproperties=proptease) plt.suptitle("Filesystem size per package", fontsize=18, y=.97) - plt.title("Total filesystem size: %d kB" % (total / 1000.), fontsize=10, + plt.title("Total filesystem size: %s" % (size2string(total)), fontsize=10, y=.96) plt.savefig(outputf)