<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[259811] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/259811">259811</a></dd>
<dt>Author</dt> <dd>jbedard@apple.com</dd>
<dt>Date</dt> <dd>2020-04-09 12:00:37 -0700 (Thu, 09 Apr 2020)</dd>
</dl>

<h3>Log Message</h3>
<pre>Buildbot: Force crash log submission after each test run
https://bugs.webkit.org/show_bug.cgi?id=210202
<rdar://problem/60508929>

Reviewed by Aakash Jain and Alexey Proskuryakov.

* BuildSlaveSupport/build.webkit.org-config/factories.py:
(TestFactory.__init__): Add steps triggering crash uploads and waiting for crash
collection to quiesce.
* BuildSlaveSupport/build.webkit.org-config/steps.py:
(TriggerCrashCollection): Add step to trigger crash collection.
(WaitForCrashCollection): Add step to wait for for crash collection process to quiesce.
* BuildSlaveSupport/build.webkit.org-config/steps.py:
(BuildStepsConstructorTest): Update Apple testing steps to include crash log collection.
* BuildSlaveSupport/ews-build/factories.py:
(TestFactory):
(TestFactory.__init__): Add willTriggerCrashLogSubmission variable.
(iOSTestsFactory):
(macOSWK1Factory):
(macOSWK2Factory):
* BuildSlaveSupport/ews-build/factories_unittest.py:
(TestLayoutTestsFactory.test_macos_wk1_release_factory):
(TestLayoutTestsFactory.test_macos_wk1_debug_factory):
(TestLayoutTestsFactory.test_macos_wk2_factory):
(TestLayoutTestsFactory.test_ios_wk2_factory):
* BuildSlaveSupport/ews-build/steps.py:
(TriggerCrashLogSubmission):
(WaitForCrashCollection):
* BuildSlaveSupport/trigger-crash-collection: Added.
* BuildSlaveSupport/wait-for-crash-collection: Added.
(pid_for_name): Given a process name, return the PID for that process.
(cpu_percentage): Return float representing the current CPU usage of the provided PID.
(main):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsBuildSlaveSupportbuildwebkitorgconfigfactoriespy">trunk/Tools/BuildSlaveSupport/build.webkit.org-config/factories.py</a></li>
<li><a href="#trunkToolsBuildSlaveSupportbuildwebkitorgconfigstepspy">trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps.py</a></li>
<li><a href="#trunkToolsBuildSlaveSupportbuildwebkitorgconfigsteps_unittestpy">trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps_unittest.py</a></li>
<li><a href="#trunkToolsBuildSlaveSupportewsbuildfactoriespy">trunk/Tools/BuildSlaveSupport/ews-build/factories.py</a></li>
<li><a href="#trunkToolsBuildSlaveSupportewsbuildfactories_unittestpy">trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py</a></li>
<li><a href="#trunkToolsBuildSlaveSupportewsbuildstepspy">trunk/Tools/BuildSlaveSupport/ews-build/steps.py</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsBuildSlaveSupporttriggercrashlogsubmission">trunk/Tools/BuildSlaveSupport/trigger-crash-log-submission</a></li>
<li><a href="#trunkToolsBuildSlaveSupportwaitforcrashcollection">trunk/Tools/BuildSlaveSupport/wait-for-crash-collection</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsBuildSlaveSupportbuildwebkitorgconfigfactoriespy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/factories.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/factories.py       2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/factories.py  2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -84,6 +84,9 @@
</span><span class="cx">         if platform == 'wincairo':
</span><span class="cx">             self.addStep(InstallWinCairoDependencies())
</span><span class="cx"> 
</span><ins>+        if platform.startswith('mac') or platform.startswith('ios-simulator'):
+            self.addStep(WaitForCrashCollection())
+
</ins><span class="cx">         if self.JSCTestClass:
</span><span class="cx">             self.addStep(self.JSCTestClass())
</span><span class="cx">         if self.LayoutTestClass:
</span><span class="lines">@@ -101,6 +104,10 @@
</span><span class="cx">         self.addStep(RunBuiltinsTests())
</span><span class="cx">         if not platform.startswith('win'):
</span><span class="cx">             self.addStep(RunDashboardTests())
</span><ins>+
+        if platform.startswith('mac') or platform.startswith('ios-simulator'):
+            self.addStep(TriggerCrashLogSubmission())
+
</ins><span class="cx">         if self.LayoutTestClass:
</span><span class="cx">             self.addStep(ArchiveTestResults())
</span><span class="cx">             self.addStep(UploadTestResults())
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupportbuildwebkitorgconfigstepspy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps.py   2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps.py      2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-# Copyright (C) 2017 Apple Inc. All rights reserved.
</del><ins>+# Copyright (C) 2017-2020 Apple Inc. All rights reserved.
</ins><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="cx"> # modification, are permitted provided that the following conditions
</span><span class="lines">@@ -140,6 +140,20 @@
</span><span class="cx">     command = ["python", "./Tools/BuildSlaveSupport/kill-old-processes", "buildbot"]
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class TriggerCrashLogSubmission(shell.Compile):
+    name = "trigger-crash-log-submission"
+    description = ["triggering crash log submission"]
+    descriptionDone = ["triggered crash log submission"]
+    command = ["python", "./Tools/BuildSlaveSupport/trigger-crash-log-submission"]
+
+
+class WaitForCrashCollection(shell.Compile):
+    name = "wait-for-crash-collection"
+    description = ["waiting for crash collection to quiesce"]
+    descriptionDone = ["crash collection has quiesced"]
+    command = ["python", "./Tools/BuildSlaveSupport/wait-for-crash-collection", "--timeout", str(5 * 60)]
+
+
</ins><span class="cx"> class CleanBuildIfScheduled(shell.Compile):
</span><span class="cx">     name = "delete WebKitBuild directory"
</span><span class="cx">     description = ["deleting WebKitBuild directory"]
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupportbuildwebkitorgconfigsteps_unittestpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps_unittest.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps_unittest.py  2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/steps_unittest.py     2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -528,35 +528,35 @@
</span><span class="cx">     'Apple-Catalina-Debug-Build': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><span class="cx">     'Apple-Catalina-Debug-JSC-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'jscore-test'],
</span><span class="cx">     'Apple-Catalina-Debug-Test262-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'test262-test'],
</span><del>-    'Apple-Catalina-Debug-WK1-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple-Catalina-Debug-WK2-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple-Catalina-Debug-WK2-WebGL-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple-Catalina-Debug-WK2-GPUProcess-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple-Catalina-Debug-WK1-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple-Catalina-Debug-WK2-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple-Catalina-Debug-WK2-WebGL-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple-Catalina-Debug-WK2-GPUProcess-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx">     'Apple-Catalina-LLINT-CLoop-BuildAndTest': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'webkit-jsc-cloop-test'],
</span><span class="cx">     'Apple-Catalina-Release-Build': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><span class="cx">     'Apple-Catalina-Release-JSC-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'jscore-test'],
</span><span class="cx">     'Apple-Catalina-Release-Test262-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'test262-test'],
</span><del>-    'Apple-Catalina-Release-WK1-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple-Catalina-Release-WK2-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple-Catalina-Release-WK1-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple-Catalina-Release-WK2-Tests': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx">     'Apple-Catalina-Release-WK2-Perf': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'perf-test'],
</span><span class="cx"> 
</span><span class="cx">     'Apple Mojave Debug (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><del>-    'Apple Mojave Debug WK1 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple Mojave Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple Mojave Debug WK1 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple Mojave Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx">     'Apple Mojave Release (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><del>-    'Apple Mojave Release WK1 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple Mojave Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple Mojave Release WK1 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple Mojave Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx">     'Apple Mojave Release (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><span class="cx"> 
</span><span class="cx">     'Apple iOS 13 Release (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit'],
</span><span class="cx">     'Apple iOS 13 Simulator Release (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><del>-    'Apple iOS 13 Simulator Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple iOS 13 Simulator Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx"> 
</span><span class="cx">     'Apple iOS 13 Simulator Debug (Build)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
</span><del>-    'Apple iOS 13 Simulator Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple iOS 13 Simulator Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx"> 
</span><del>-    'Apple iPadOS 13 Simulator Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
-    'Apple iPadOS 13 Simulator Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'MasterShellCommand'],
</del><ins>+    'Apple iPadOS 13 Simulator Release WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
+    'Apple iPadOS 13 Simulator Debug WK2 (Tests)': ['configure build', 'svn', 'kill old processes', 'delete WebKitBuild directory', 'delete stale build files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'MasterShellCommand'],
</ins><span class="cx"> 
</span><span class="cx">     'JSCOnly Linux ARMv7 Thumb2 Release': ['configure build', 'svn', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'jscore-test'],
</span><span class="cx">     'JSCOnly Linux ARMv7 Thumb2 SoftFP Release': ['configure build', 'svn', 'delete WebKitBuild directory', 'delete stale build files', 'compile-webkit', 'jscore-test'],
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupportewsbuildfactoriespy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/ews-build/factories.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/ews-build/factories.py     2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/ews-build/factories.py        2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -29,9 +29,9 @@
</span><span class="cx">                    DownloadBuiltProduct, ExtractBuiltProduct, FindModifiedChangeLogs, InstallGtkDependencies,
</span><span class="cx">                    InstallWpeDependencies, KillOldProcesses, PrintConfiguration, PushCommitToWebKitRepo,
</span><span class="cx">                    RunAPITests, RunBindingsTests, RunBuildWebKitOrgUnitTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests,
</span><del>-                   RunResultsdbpyTests, RunJavaScriptCoreTests, RunWebKit1Tests, RunWebKitPerlTests,
-                   RunWebKitPyPython2Tests, RunWebKitPyPython3Tests, RunWebKitTests, SetBuildSummary, UpdateWorkingDirectory,
-                   ValidatePatch, ValidateChangeLogAndReviewer, ValidateCommiterAndReviewer)
</del><ins>+                   RunResultsdbpyTests, RunJavaScriptCoreTests, RunWebKit1Tests, RunWebKitPerlTests, RunWebKitPyPython2Tests,
+                   RunWebKitPyPython3Tests, RunWebKitTests, SetBuildSummary, TriggerCrashLogSubmission, UpdateWorkingDirectory,
+                   ValidatePatch, ValidateChangeLogAndReviewer, ValidateCommiterAndReviewer, WaitForCrashCollection)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class Factory(factory.BuildFactory):
</span><span class="lines">@@ -106,6 +106,7 @@
</span><span class="cx"> class TestFactory(Factory):
</span><span class="cx">     LayoutTestClass = None
</span><span class="cx">     APITestClass = None
</span><ins>+    willTriggerCrashLogSubmission = False
</ins><span class="cx"> 
</span><span class="cx">     def getProduct(self):
</span><span class="cx">         self.addStep(DownloadBuiltProduct())
</span><span class="lines">@@ -116,12 +117,17 @@
</span><span class="cx">         if platform == 'gtk':
</span><span class="cx">             self.addStep(InstallGtkDependencies())
</span><span class="cx">         self.getProduct()
</span><ins>+        if self.willTriggerCrashLogSubmission:
+            self.addStep(WaitForCrashCollection())
</ins><span class="cx">         self.addStep(KillOldProcesses())
</span><span class="cx">         if self.LayoutTestClass:
</span><span class="cx">             self.addStep(self.LayoutTestClass())
</span><del>-            self.addStep(SetBuildSummary())
</del><span class="cx">         if self.APITestClass:
</span><span class="cx">             self.addStep(self.APITestClass())
</span><ins>+        if self.willTriggerCrashLogSubmission:
+            self.addStep(TriggerCrashLogSubmission())
+        if self.LayoutTestClass:
+            self.addStep(SetBuildSummary())
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class JSCTestsFactory(Factory):
</span><span class="lines">@@ -143,6 +149,7 @@
</span><span class="cx"> 
</span><span class="cx"> class iOSTestsFactory(TestFactory):
</span><span class="cx">     LayoutTestClass = RunWebKitTests
</span><ins>+    willTriggerCrashLogSubmission = True
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class macOSBuildFactory(BuildFactory):
</span><span class="lines">@@ -151,6 +158,7 @@
</span><span class="cx"> 
</span><span class="cx"> class macOSWK1Factory(TestFactory):
</span><span class="cx">     LayoutTestClass = RunWebKit1Tests
</span><ins>+    willTriggerCrashLogSubmission = True
</ins><span class="cx"> 
</span><span class="cx">     def __init__(self, platform, configuration=None, architectures=None, additionalArguments=None, checkRelevance=False, **kwargs):
</span><span class="cx">         super(macOSWK1Factory, self).__init__(platform=platform, configuration=configuration, architectures=architectures, additionalArguments=additionalArguments, checkRelevance=True, **kwargs)
</span><span class="lines">@@ -158,6 +166,7 @@
</span><span class="cx"> 
</span><span class="cx"> class macOSWK2Factory(TestFactory):
</span><span class="cx">     LayoutTestClass = RunWebKitTests
</span><ins>+    willTriggerCrashLogSubmission = True
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class WindowsFactory(Factory):
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupportewsbuildfactories_unittestpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py    2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py       2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -216,8 +216,10 @@
</span><span class="cx">             _BuildStepFactory(steps.ApplyPatch),
</span><span class="cx">             _BuildStepFactory(steps.DownloadBuiltProduct),
</span><span class="cx">             _BuildStepFactory(steps.ExtractBuiltProduct),
</span><ins>+            _BuildStepFactory(steps.WaitForCrashCollection),
</ins><span class="cx">             _BuildStepFactory(steps.KillOldProcesses),
</span><span class="cx">             _BuildStepFactory(steps.RunWebKit1Tests),
</span><ins>+            _BuildStepFactory(steps.TriggerCrashLogSubmission),
</ins><span class="cx">             _BuildStepFactory(steps.SetBuildSummary),
</span><span class="cx">         ])
</span><span class="cx"> 
</span><span class="lines">@@ -233,8 +235,10 @@
</span><span class="cx">             _BuildStepFactory(steps.ApplyPatch),
</span><span class="cx">             _BuildStepFactory(steps.DownloadBuiltProduct),
</span><span class="cx">             _BuildStepFactory(steps.ExtractBuiltProduct),
</span><ins>+            _BuildStepFactory(steps.WaitForCrashCollection),
</ins><span class="cx">             _BuildStepFactory(steps.KillOldProcesses),
</span><span class="cx">             _BuildStepFactory(steps.RunWebKit1Tests),
</span><ins>+            _BuildStepFactory(steps.TriggerCrashLogSubmission),
</ins><span class="cx">             _BuildStepFactory(steps.SetBuildSummary),
</span><span class="cx">         ])
</span><span class="cx"> 
</span><span class="lines">@@ -249,8 +253,10 @@
</span><span class="cx">             _BuildStepFactory(steps.ApplyPatch),
</span><span class="cx">             _BuildStepFactory(steps.DownloadBuiltProduct),
</span><span class="cx">             _BuildStepFactory(steps.ExtractBuiltProduct),
</span><ins>+            _BuildStepFactory(steps.WaitForCrashCollection),
</ins><span class="cx">             _BuildStepFactory(steps.KillOldProcesses),
</span><span class="cx">             _BuildStepFactory(steps.RunWebKitTests),
</span><ins>+            _BuildStepFactory(steps.TriggerCrashLogSubmission),
</ins><span class="cx">             _BuildStepFactory(steps.SetBuildSummary),
</span><span class="cx">         ])
</span><span class="cx"> 
</span><span class="lines">@@ -265,8 +271,10 @@
</span><span class="cx">             _BuildStepFactory(steps.ApplyPatch),
</span><span class="cx">             _BuildStepFactory(steps.DownloadBuiltProduct),
</span><span class="cx">             _BuildStepFactory(steps.ExtractBuiltProduct),
</span><ins>+            _BuildStepFactory(steps.WaitForCrashCollection),
</ins><span class="cx">             _BuildStepFactory(steps.KillOldProcesses),
</span><span class="cx">             _BuildStepFactory(steps.RunWebKitTests),
</span><ins>+            _BuildStepFactory(steps.TriggerCrashLogSubmission),
</ins><span class="cx">             _BuildStepFactory(steps.SetBuildSummary),
</span><span class="cx">         ])
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupportewsbuildstepspy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/BuildSlaveSupport/ews-build/steps.py (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/ews-build/steps.py 2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/BuildSlaveSupport/ews-build/steps.py    2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -1633,6 +1633,36 @@
</span><span class="cx">         return shell.Compile.getResultSummary(self)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class TriggerCrashLogSubmission(shell.Compile):
+    name = 'trigger-crash-log-submission'
+    description = ['triggering crash log submission']
+    descriptionDone = ['Triggered crash log submission']
+    command = ['python', 'Tools/BuildSlaveSupport/trigger-crash-log-submission']
+
+    def __init__(self, **kwargs):
+        super(TriggerCrashLogSubmission, self).__init__(timeout=60, logEnviron=False, **kwargs)
+
+    def getResultSummary(self):
+        if self.results in [FAILURE, EXCEPTION]:
+            return {u'step': u'Failed to trigger crash log submission'}
+        return shell.Compile.getResultSummary(self)
+
+
+class WaitForCrashCollection(shell.Compile):
+    name = 'wait for crash collection'
+    description = ['waiting-for-crash-collection-to-quiesce']
+    descriptionDone = ['Crash collection has quiesced']
+    command = ['python', 'Tools/BuildSlaveSupport/wait-for-crash-collection', '--timeout', str(5 * 60)]
+
+    def __init__(self, **kwargs):
+        super(WaitForCrashCollection, self).__init__(timeout=6 * 60, logEnviron=False, **kwargs)
+
+    def getResultSummary(self):
+        if self.results in [FAILURE, EXCEPTION]:
+            return {u'step': u'Crash log collection process still running'}
+        return shell.Compile.getResultSummary(self)
+
+
</ins><span class="cx"> class RunWebKitTests(shell.Test):
</span><span class="cx">     name = 'layout-tests'
</span><span class="cx">     description = ['layout-tests running']
</span></span></pre></div>
<a id="trunkToolsBuildSlaveSupporttriggercrashlogsubmission"></a>
<div class="addfile"><h4>Added: trunk/Tools/BuildSlaveSupport/trigger-crash-log-submission (0 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/trigger-crash-log-submission                               (rev 0)
+++ trunk/Tools/BuildSlaveSupport/trigger-crash-log-submission  2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+#!/usr/bin/env python
+# Copyright (C) 2020 Apple Inc.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import subprocess
+import sys
+import time
+
+WAIT_SECONDS = 3
+
+
+def main():
+    if sys.platform != 'darwin':
+        print("No crash log submission available for platform '{}'".format(sys.platform))
+        return 0
+
+    # Workaround for <rdar://problem/60507877>.
+    if subprocess.call(['/usr/bin/killall', '-9', 'diagnostics_agent']):
+        print('Failed to kill diagnostics_agent')
+        return 1
+    print('Killed diagnostics_agent')
+
+    time.sleep(WAIT_SECONDS)
+    if subprocess.call(['/usr/bin/notifyutil', '-p', 'com.apple.crashreporter.debug.submit.now']):
+        print('Failed to trigger crash log submission')
+        return 1
+    print('Triggered crash log submission')
+
+    return 0
+
+
+if __name__ == '__main__':
+    sys.exit(main())
</ins><span class="cx">Property changes on: trunk/Tools/BuildSlaveSupport/trigger-crash-log-submission
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<ins>+*
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkToolsBuildSlaveSupportwaitforcrashcollection"></a>
<div class="addfile"><h4>Added: trunk/Tools/BuildSlaveSupport/wait-for-crash-collection (0 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/BuildSlaveSupport/wait-for-crash-collection                          (rev 0)
+++ trunk/Tools/BuildSlaveSupport/wait-for-crash-collection     2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -0,0 +1,89 @@
</span><ins>+#!/usr/bin/env python
+# Copyright (C) 2020 Apple Inc.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import argparse
+import subprocess
+import sys
+import time
+
+
+SUBMIT_DIAG_INFO = '/System/Library/CoreServices/SubmitDiagInfo'
+WAIT_SECONDS = 3
+
+
+def pid_for_name(process_name):
+    process = subprocess.Popen(['/bin/ps', '-eo', 'pid,comm'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+    stdout, _ = process.communicate()
+    for line in stdout.splitlines():
+        try:
+            pid, candidate = line.strip().split(b' ', 1)
+            if candidate == process_name:
+                return int(pid)
+        except ValueError:
+            pass
+    return None
+
+
+def cpu_percentage(pid):
+    top_output = subprocess.check_output(['/usr/bin/top', '-pid', str(pid), '-stats', 'cpu', '-l', '2'])
+    try:
+        return float(top_output.splitlines()[-1])
+    except ValueError:
+        return 0
+
+
+def main():
+    parser = argparse.ArgumentParser(description='Wait for crash log reporting to quiesce')
+    parser.add_argument(
+        '-t', '--timeout',
+        help='Seconds to wait for process to quiesce.',
+        type=int, default=0,
+    )
+    args = parser.parse_args()
+    deadline = (time.time() + args.timeout) if args.timeout else None
+
+    if sys.platform != 'darwin':
+        print("No crash reporting available for platform '{}'".format(sys.platform))
+        return 0
+
+    pid = pid_for_name(SUBMIT_DIAG_INFO)
+    if not pid:
+        print('Failed to find {}'.format(SUBMIT_DIAG_INFO))
+        return 0
+    print('Found {} running with PID {}'.format(SUBMIT_DIAG_INFO, pid))
+
+    print('Waiting for process {} to quiesce'.format(pid))
+    while not deadline or deadline > time.time():
+        if cpu_percentage(pid) <= 5:
+            print('Process {} has quiesced'.format(pid))
+            return 0
+        time.sleep(WAIT_SECONDS)
+
+    print('Timed out waiting for {} to quiesce, continue'.format(pid))
+    return 0
+
+
+if __name__ == '__main__':
+    sys.exit(main())
</ins><span class="cx">Property changes on: trunk/Tools/BuildSlaveSupport/wait-for-crash-collection
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<ins>+*
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (259810 => 259811)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2020-04-09 18:22:00 UTC (rev 259810)
+++ trunk/Tools/ChangeLog       2020-04-09 19:00:37 UTC (rev 259811)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2020-04-09  Jonathan Bedard  <jbedard@apple.com>
+
+        Buildbot: Force crash log submission after each test run
+        https://bugs.webkit.org/show_bug.cgi?id=210202
+        <rdar://problem/60508929>
+
+        Reviewed by Aakash Jain and Alexey Proskuryakov.
+
+        * BuildSlaveSupport/build.webkit.org-config/factories.py:
+        (TestFactory.__init__): Add steps triggering crash uploads and waiting for crash
+        collection to quiesce.
+        * BuildSlaveSupport/build.webkit.org-config/steps.py:
+        (TriggerCrashCollection): Add step to trigger crash collection.
+        (WaitForCrashCollection): Add step to wait for for crash collection process to quiesce.
+        * BuildSlaveSupport/build.webkit.org-config/steps.py:
+        (BuildStepsConstructorTest): Update Apple testing steps to include crash log collection.
+        * BuildSlaveSupport/ews-build/factories.py:
+        (TestFactory):
+        (TestFactory.__init__): Add willTriggerCrashLogSubmission variable.
+        (iOSTestsFactory):
+        (macOSWK1Factory):
+        (macOSWK2Factory):
+        * BuildSlaveSupport/ews-build/factories_unittest.py:
+        (TestLayoutTestsFactory.test_macos_wk1_release_factory):
+        (TestLayoutTestsFactory.test_macos_wk1_debug_factory):
+        (TestLayoutTestsFactory.test_macos_wk2_factory):
+        (TestLayoutTestsFactory.test_ios_wk2_factory):
+        * BuildSlaveSupport/ews-build/steps.py:
+        (TriggerCrashLogSubmission):
+        (WaitForCrashCollection):
+        * BuildSlaveSupport/trigger-crash-collection: Added.
+        * BuildSlaveSupport/wait-for-crash-collection: Added.
+        (pid_for_name): Given a process name, return the PID for that process.
+        (cpu_percentage): Return float representing the current CPU usage of the provided PID.
+        (main):
+
</ins><span class="cx"> 2020-04-09  Aakash Jain  <aakash_jain@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [ews] rename CompileJSCToT to CompileJSCWithoutPatch
</span></span></pre>
</div>
</div>

</body>
</html>