xref: /OK3568_Linux_fs/yocto/poky/meta/classes/buildstats-summary.bbclass (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# Summarize sstate usage at the end of the build
2*4882a593Smuzhiyunpython buildstats_summary () {
3*4882a593Smuzhiyun    import collections
4*4882a593Smuzhiyun    import os.path
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun    bsdir = e.data.expand("${BUILDSTATS_BASE}/${BUILDNAME}")
7*4882a593Smuzhiyun    if not os.path.exists(bsdir):
8*4882a593Smuzhiyun        return
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun    sstatetasks = (e.data.getVar('SSTATETASKS') or '').split()
11*4882a593Smuzhiyun    built = collections.defaultdict(lambda: [set(), set()])
12*4882a593Smuzhiyun    for pf in os.listdir(bsdir):
13*4882a593Smuzhiyun        taskdir = os.path.join(bsdir, pf)
14*4882a593Smuzhiyun        if not os.path.isdir(taskdir):
15*4882a593Smuzhiyun            continue
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun        tasks = os.listdir(taskdir)
18*4882a593Smuzhiyun        for t in sstatetasks:
19*4882a593Smuzhiyun            no_sstate, sstate = built[t]
20*4882a593Smuzhiyun            if t in tasks:
21*4882a593Smuzhiyun                no_sstate.add(pf)
22*4882a593Smuzhiyun            elif t + '_setscene' in tasks:
23*4882a593Smuzhiyun                sstate.add(pf)
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun    header_printed = False
26*4882a593Smuzhiyun    for t in sstatetasks:
27*4882a593Smuzhiyun        no_sstate, sstate = built[t]
28*4882a593Smuzhiyun        if no_sstate | sstate:
29*4882a593Smuzhiyun            if not header_printed:
30*4882a593Smuzhiyun                header_printed = True
31*4882a593Smuzhiyun                bb.note("Build completion summary:")
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun            sstate_count = len(sstate)
34*4882a593Smuzhiyun            no_sstate_count = len(no_sstate)
35*4882a593Smuzhiyun            total_count = sstate_count + no_sstate_count
36*4882a593Smuzhiyun            bb.note("  {0}: {1:.1f}% sstate reuse({2} setscene, {3} scratch)".format(
37*4882a593Smuzhiyun                t, round(100 * sstate_count / total_count, 1), sstate_count, no_sstate_count))
38*4882a593Smuzhiyun}
39*4882a593Smuzhiyunaddhandler buildstats_summary
40*4882a593Smuzhiyunbuildstats_summary[eventmask] = "bb.event.BuildCompleted"
41