[JSC][GTK][EFL] Allow run-jsc-benchmark to use WebKitTestRunner in EFL / GTK ports
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 May 2016 00:45:14 +0000 (00:45 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 May 2016 00:45:14 +0000 (00:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=158016

Reviewed by Darin Adler.

This patch easily allows run-jsc-benchmark to run WebKitTestRunner-based tests in GTK / EFL ports.
This change encourages us to run tests with the browser-heap in nix environments.
Two things are modified.

1. Add a fall-back to look up the library path in GTK / EFL / JSCOnly environment.

    In GTK / EFL / JSCOnly ports, the hierarchy of the build directory is slightly different from Apple port.
    For example, the jsc bin locate at "WebKitBuild/XXX/Release/bin/jsc" and the lib path is "WebKitBuild/XXX/Release/lib"
    while the one of Apple port is "WebKitBuild/XXX/Release/jsc" and "WebKitBuild/XXX/Release/lib".
    And based on this library path, we configure the required environment variables to run WebKitTestRunner in GTK / EFL ports.

2. Add --dependencies option to add dependent library paths.

    While Apple ports does not require any additional dependent library path, GTK and EFL ports require this path,
    typically WebKitBuild/DependenciesGTK and WebKitBuild/DependenciesEFL respectively. So we need to add such paths to LD_LIBRARY_PATH.
    Instead of adding platform options like --gtk / --efl, we add --dependencies option to add the additional dependent library paths.
    The platform options still require the build path to look up the dependent library directory. So we pass it directly through --dependencies.
    Multiple additional dependent library paths can be added by using --dependencies multiple times.

By using these change, we can run benchmarks that require WebKitTestRunner in GTK / EFL ports (If you would like to run them in a headless manner, you can use xvbuf.).
Example:
    `Tools/Scripts/run-jsc-benchmarks baseline:WebKitBuild/baseline/Release/bin/WebKitTestRunner patched:WebKitBuild/patched/Release/bin/WebKitTestRunner --dependencies WebKitBuild/DependenciesGTK/Root/lib --js-bench`

* Scripts/run-jsc-benchmarks:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@201365 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/run-jsc-benchmarks

index 27647fb..f9dbde1 100644 (file)
@@ -1,3 +1,35 @@
+2016-05-24  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [JSC][GTK][EFL] Allow run-jsc-benchmark to use WebKitTestRunner in EFL / GTK ports
+        https://bugs.webkit.org/show_bug.cgi?id=158016
+
+        Reviewed by Darin Adler.
+
+        This patch easily allows run-jsc-benchmark to run WebKitTestRunner-based tests in GTK / EFL ports.
+        This change encourages us to run tests with the browser-heap in nix environments.
+        Two things are modified.
+
+        1. Add a fall-back to look up the library path in GTK / EFL / JSCOnly environment.
+
+            In GTK / EFL / JSCOnly ports, the hierarchy of the build directory is slightly different from Apple port.
+            For example, the jsc bin locate at "WebKitBuild/XXX/Release/bin/jsc" and the lib path is "WebKitBuild/XXX/Release/lib"
+            while the one of Apple port is "WebKitBuild/XXX/Release/jsc" and "WebKitBuild/XXX/Release/lib".
+            And based on this library path, we configure the required environment variables to run WebKitTestRunner in GTK / EFL ports.
+
+        2. Add --dependencies option to add dependent library paths.
+
+            While Apple ports does not require any additional dependent library path, GTK and EFL ports require this path,
+            typically WebKitBuild/DependenciesGTK and WebKitBuild/DependenciesEFL respectively. So we need to add such paths to LD_LIBRARY_PATH.
+            Instead of adding platform options like --gtk / --efl, we add --dependencies option to add the additional dependent library paths.
+            The platform options still require the build path to look up the dependent library directory. So we pass it directly through --dependencies.
+            Multiple additional dependent library paths can be added by using --dependencies multiple times.
+
+        By using these change, we can run benchmarks that require WebKitTestRunner in GTK / EFL ports (If you would like to run them in a headless manner, you can use xvbuf.).
+        Example:
+            `Tools/Scripts/run-jsc-benchmarks baseline:WebKitBuild/baseline/Release/bin/WebKitTestRunner patched:WebKitBuild/patched/Release/bin/WebKitTestRunner --dependencies WebKitBuild/DependenciesGTK/Root/lib --js-bench`
+
+        * Scripts/run-jsc-benchmarks:
+
 2016-05-20  Keith Miller  <keith_miller@apple.com>
         We should have JSBench in PerformanceTests
         https://bugs.webkit.org/show_bug.cgi?id=157952
index 190e699..02041cf 100755 (executable)
@@ -233,6 +233,7 @@ $alsoLocal=false
 $sshOptions=[]
 $vms = []
 $environment = {}
+$dependencies = []
 $needToCopyVMs = false
 $dontCopyVMs = false
 $allDRT = true
@@ -348,6 +349,7 @@ def usage
   puts "                     be used for particular VMs and benchmarks."
   puts "--config <path>      Specify the path of the configuration file. Defaults to"
   puts "                     ~/.run-jsc-benchmarks"
+  puts "--dependencies       Additional dependent library paths."
   puts "--help or -h         Display this message."
   puts
   puts "Example:"
@@ -1292,6 +1294,10 @@ class VM
       @libPath, @relativeBinPath = [$~.pre_match+"/Release"], "./#{$1}"
     elsif @path =~ /\/Debug\/([a-zA-Z]+)$/
       @libPath, @relativeBinPath = [$~.pre_match+"/Debug"], "./#{$1}"
+    elsif @path =~ /\/Release\/bin\/([a-zA-Z]+)$/
+      @libPath, @relativeBinPath = [$~.pre_match+"/Release/lib"], "./#{$1}"
+    elsif @path =~ /\/Debug\/bin\/([a-zA-Z]+)$/
+      @libPath, @relativeBinPath = [$~.pre_match+"/Debug/lib"], "./#{$1}"
     elsif @path =~ /\/Contents\/Resources\/([a-zA-Z]+)$/
       @libPath = [$~.pre_match + "/Contents/Resources", $~.pre_match + "/Contents/Frameworks"]
     elsif @path =~ /\/JavaScriptCore.framework\/Resources\/([a-zA-Z]+)$/
@@ -1299,6 +1305,7 @@ class VM
     elsif @path =~ /(DumpRenderTree|webkitTestRunner|jsc)$/
       @libPath, @relativeBinPath = [$~.pre_match+"/"], "./#{$1}"
     end
+    @libPath += $dependencies
   end
   
   def canCopyIntoBenchPath
@@ -1388,6 +1395,14 @@ class VM
     }
     $script.puts "export DYLD_LIBRARY_PATH=#{Shellwords.shellescape(myLibPath.join(':').to_s)}"
     $script.puts "export DYLD_FRAMEWORK_PATH=#{Shellwords.shellescape(myLibPath.join(':').to_s)}"
+    $script.puts "export LD_LIBRARY_PATH=#{Shellwords.shellescape(myLibPath.join(':').to_s)}"
+
+    unless myLibPath.empty?
+        primaryLibPath = myLibPath.first
+        $script.puts "export TEST_RUNNER_TEST_PLUGIN_PATH=#{Shellwords.shellescape(Pathname.new(primaryLibPath).join('plugins').to_s)}"
+        $script.puts "export TEST_RUNNER_INJECTED_BUNDLE_FILENAME=#{Shellwords.shellescape(Pathname.new(primaryLibPath).join('libTestRunnerInjectedBundle.so').to_s)}"
+    end
+
     @extraEnv.each_pair {
       | key, val |
       $script.puts "export #{Shellwords.shellescape(key)}=#{Shellwords.shellescape(val)}"
@@ -2671,6 +2686,7 @@ begin
                  ['--vms', GetoptLong::REQUIRED_ARGUMENT],
                  ['--output-name', GetoptLong::REQUIRED_ARGUMENT],
                  ['--environment', GetoptLong::REQUIRED_ARGUMENT],
+                 ['--dependencies', GetoptLong::REQUIRED_ARGUMENT],
                  ['--config', GetoptLong::REQUIRED_ARGUMENT],
                  ['--help', '-h', GetoptLong::NO_ARGUMENT]).each {
     | opt, arg |
@@ -2804,6 +2820,8 @@ begin
       }
     when '--environment'
       $environment = JSON::parse(IO::read(arg))
+    when '--dependencies'
+      $dependencies.push(Pathname.new(arg).realpath)
     when '--config'
       $configPath = Pathname.new(arg)
     when '--help'