From e456beca117d58fd4a392f2570efa38148660552 Mon Sep 17 00:00:00 2001 From: "hyokeun.jeon" Date: Fri, 16 Apr 2021 11:06:24 +0900 Subject: [PATCH] New feature: Build Profiling Change-Id: Ic8618e43d0854ff4288d50bd864587f96b899c61 --- depanneur | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/depanneur b/depanneur index d1b156b..2c1dc45 100755 --- a/depanneur +++ b/depanneur @@ -195,6 +195,7 @@ my $reverse_on = 1; #enable reverse dependency my $export_only = 0; # only export, not building my $tarfile = 0; # generate tar file for dependence & reverse dependence xml file my $preordered_list = ""; # List of ordered packages to support user defined build order calculation +my $profiling = ""; # Reference profiling report location. If set reports will be generated GetOptions ( "repository=s" => \@repos, @@ -255,6 +256,7 @@ GetOptions ( "export-only" => \$export_only, "tarfile" => \$tarfile, "preordered-list=s" => \$preordered_list, + "profiling=s" => \$profiling, ); if ( $help ) { @@ -2389,9 +2391,9 @@ sub build_report info("build logs can be found in:\n $localrepo/$dist/$arch/logs"); info("build roots located in:\n $scratch_dir.*"); if (%errors || %expansion_errors || @export_errors || ($succeeded_packages == 0 && @skipped == 0)) { - exit 1; + return 1; } - + return 0; } #--------------------------------------------------------------------- @@ -2451,6 +2453,7 @@ sub update_pkgrdeps { } sub generate_depends_xmlfile() { + #if there is no dependence relation, skip! if (0 == scalar (keys %pkgdeps)) { @@ -2677,6 +2680,56 @@ sub dir_wanted { } } +sub prepare_preorder_list { + my @preview_orders = (); + my_system("rm -rf bsr_profiling_report"); + if ($preordered_list ne "") { + @preview_orders = split /[:,\s\/]+/, $preordered_list; + } + if ($profiling ne "" && `which bsr`) { + my $preview_command = "bsr reorder -j $profiling "; + if ($debug == 1) { + $preview_command = $preview_command . " --verbose "; + } + my_system($preview_command); + if (-f ".bsr.preview.yaml") { + my $preview_config = LoadFile(".bsr.preview.yaml"); + unlink ".bsr.preview.yaml"; + if ($preview_config && $preview_config->{preview} + && $preview_config->{preview}->{packages} + && @{$preview_config->{preview}->{packages}} > 0) { + foreach my $p (@{$preview_config->{preview}->{packages}}) { + if ( !(grep $_ eq $p, @preview_orders) ) { + push @preview_orders, $p; + } + } + } + } + } + if (@preview_orders) { + $preordered_list = join ",", @preview_orders; + } +} + +sub profiling_report { + if ($profiling eq "" || ! `which bsr`) { + return; + } + generate_depends(); + + my $report_command = "bsr report -a $arch --depsnumbersort -j $profiling "; + if ($debug == 1) { + $report_command = $report_command . " --verbose "; + } + my $dep_xml_file = "$depends_dir/$dist/$arch/$dist\_$arch\_pkgdepends.xml"; + if (-e $dep_xml_file) { + $report_command = $report_command . " -x \"$dep_xml_file\" "; + } + $report_command = $report_command . " -k \"$localrepo/$dist/$arch/logs\" "; + my_system($report_command); + my_system("mv bsr_profiling_report $localrepo/$dist/$arch/"); +} + # MAIN if ($depends) { info("start generate packages depends from: " . $package_path . " ($style)"); @@ -2852,6 +2905,8 @@ info("package dependency resolving ..."); update_pkgdeps($reverse_on); update_pkgddeps(); +prepare_preorder_list(); + my @bins = get_binary_list(); if (@bins) { my @tobuild = (); @@ -3168,8 +3223,7 @@ while (! $TERM) { while ((threads->list() > 0)) { sleep(1); } - update_repo(); -build_report(); - -exit 0 +my $build_status = build_report(); +profiling_report(); +exit $build_status -- 2.7.4