On a Haswell Xeon 3.2GHz machine, iteration on each include_path costs ~12.5ms.
And the total time we can save at best is (0.0125s * n_patches * 
n_include_paths)

On 8/30/19 10:39 AM, Zhaolong Zhang wrote:
strip_common_prefix() is the hot path that executes on every input file.
This patch sorts and uniqs the $include_paths by length descreasingly.
And with the sorted $include_paths, the for-loop inside strip_common_prefix
can break earlier, thus kernel_metadata task can be sped up by multiple times.

Signed-off-by: Zhaolong Zhang <[email protected]>
---
  tools/spp | 12 ++++++++++++
  1 file changed, 12 insertions(+)

diff --git a/tools/spp b/tools/spp
index 1150ff3..cba52bb 100755
--- a/tools/spp
+++ b/tools/spp
@@ -125,6 +125,7 @@ strip_common_prefix()
        if [ $this_len -lt $out_len ]; then
            relocated_name=$t
            out_len=$this_len
+           break
        fi
        # add a trailing slash to get corner cases where one may
        # have been added or not dropped
@@ -133,6 +134,7 @@ strip_common_prefix()
        if [ $this_len -lt $out_len ]; then
            relocated_name=$t
            out_len=$this_len
+           break
        fi
      done
@@ -297,6 +299,16 @@ infiles=$@ processed_files="" +# this function also removes duplicated lines by `sort -u`
+sort_by_len_dec()
+{
+        for i in $@; do
+                echo $i
+        done | sort -u | awk '{ print length($0) " " $0; }' | sort -nr | cut 
-d ' ' -f 2-
+}
+
+include_paths=$(sort_by_len_dec $include_paths)
+
  ##
  ## create variables for use in scripts
  ##

--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to