diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 70c4b57..f06050d 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,28 @@
+2019-10-11  Brian Burg  <bburg@apple.com>
+
+        Remove some dead code in webkitpy's mac.py
+        https://bugs.webkit.org/show_bug.cgi?id=202853
+
+        Reviewed by Alexey Proskuryakov.
+
+        - Remove _build_java_test_support as it no longer does anything.
+        - Remove _check_port_build as it's only used to build Java test support.
+        - Remove unused is_mavericks() function.
+        - Remove a log stripping pattern that was fixed several releases ago.
+
+        * Scripts/webkitpy/port/base.py:
+        (Port.check_build):
+        (Port.check_api_test_build):
+        (Port._check_driver):
+        (Port._check_port_build): Deleted.
+        * Scripts/webkitpy/port/mac.py:
+        (MacPort.operating_system):
+        (MacPort.default_child_processes):
+        (MacPort.logging_patterns_to_strip):
+        (MacPort.is_mavericks): Deleted.
+        (MacPort._build_java_test_support): Deleted.
+        (MacPort._check_port_build): Deleted.
+
 2019-10-11  Aakash Jain  <aakash_jain@apple.com>
 
         [build.webkit.org] API tests should output result summary in json format
diff --git a/Tools/Scripts/webkitpy/port/base.py b/Tools/Scripts/webkitpy/port/base.py
index 0c8b6b1..e251cb8 100644
--- a/Tools/Scripts/webkitpy/port/base.py
+++ b/Tools/Scripts/webkitpy/port/base.py
@@ -240,8 +240,6 @@
             return False
         if self.get_option('install') and not self._check_driver():
             return False
-        if self.get_option('install') and not self._check_port_build():
-            return False
         if not self.check_image_diff():
             if self.get_option('build'):
                 return self._build_image_diff()
@@ -254,8 +252,6 @@
             canonicalized_binaries = self.path_to_api_test_binaries().keys()
         if not self._root_was_set and self.get_option('build') and not self._build_api_tests(wtf_only=(canonicalized_binaries == ['TestWTF'])):
             return False
-        if self.get_option('install') and not self._check_port_build():
-            return False
 
         for binary, path in self.path_to_api_test_binaries().iteritems():
             if binary not in canonicalized_binaries:
@@ -280,10 +276,6 @@
             return False
         return True
 
-    def _check_port_build(self):
-        # Ports can override this method to do additional checks.
-        return True
-
     def check_sys_deps(self):
         """If the port needs to do some runtime checks to ensure that the
         tests can be run successfully, it should override this routine.
diff --git a/Tools/Scripts/webkitpy/port/mac.py b/Tools/Scripts/webkitpy/port/mac.py
index 256f717..19d95c7 100644
--- a/Tools/Scripts/webkitpy/port/mac.py
+++ b/Tools/Scripts/webkitpy/port/mac.py
@@ -183,10 +183,6 @@
     def operating_system(self):
         return 'mac'
 
-    # Belongs on a Platform object.
-    def is_mavericks(self):
-        return self._version == 'mavericks'
-
     def default_child_processes(self, **kwargs):
         default_count = super(MacPort, self).default_child_processes()
 
@@ -216,18 +212,6 @@
             supportable_instances = default_count
         return min(supportable_instances, default_count)
 
-    def _build_java_test_support(self):
-        # FIXME: This is unused. Remove.
-        java_tests_path = self._filesystem.join(self.layout_tests_dir(), "java")
-        build_java = [self.make_command(), "-C", java_tests_path]
-        if self._executive.run_command(build_java, return_exit_code=True):  # Paths are absolute, so we don't need to set a cwd.
-            _log.error("Failed to build Java support files: %s" % build_java)
-            return False
-        return True
-
-    def _check_port_build(self):
-        return not self.get_option('java') or self._build_java_test_support()
-
     def start_helper(self, pixel_tests=False):
         helper_path = self._path_to_helper()
         if not helper_path:
@@ -268,9 +252,6 @@
     def logging_patterns_to_strip(self):
         logging_patterns = []
 
-        # FIXME: Remove this after <rdar://problem/15605007> is fixed.
-        logging_patterns.append((re.compile('(AVF|GVA) info:.*\n'), ''))
-
         # FIXME: Remove this after <rdar://problem/35954459> is fixed.
         logging_patterns.append(('AVDCreateGPUAccelerator: Error loading GPU renderer\n', ''))
 
