New feature: Build Profiling 78/256978/2 accepted/tizen/devbase/tools/20210508.011543 accepted/tizen/devbase/tools/20210513.020749 submit/trunk/20210507.104530 submit/trunk/20210508.154130
authorhyokeun.jeon <hyokeun.jeon@samsung.com>
Fri, 16 Apr 2021 02:06:24 +0000 (11:06 +0900)
committerhyokeun.jeon <hyokeun.jeon@samsung.com>
Fri, 16 Apr 2021 02:19:41 +0000 (11:19 +0900)
Change-Id: Ic8618e43d0854ff4288d50bd864587f96b899c61

depanneur

index d1b156bf5ac997915879561399b3f1d3c9bf8363..2c1dc45d4e5c398bdc8efedfc1f6284552acd39e 100755 (executable)
--- 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