Chunk skia gold multiprocess calls

Without chunking, a new gold session was initialized for every single
test, instead of reusing 1 session per process.

Bug: pdfium:1641
Change-Id: Ic968c7a36c792f4861fec4e3b9a72d588b8b9e3e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/78653
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Stephanie Kim <kimstephanie@google.com>
diff --git a/testing/tools/test_runner.py b/testing/tools/test_runner.py
index 6c1ee08..91c67fc 100644
--- a/testing/tools/test_runner.py
+++ b/testing/tools/test_runner.py
@@ -4,6 +4,7 @@
 # found in the LICENSE file.
 
 from __future__ import print_function
+from __future__ import division
 
 import argparse
 import functools
@@ -51,13 +52,17 @@
     raise KeyboardInterruptError()
 
 
-def RunSkiaWrapper(this, img_path_input_filename):
+def RunSkiaWrapper(this, input_chunk):
   """Wrapper to call RunSkia() and redirect output to stdout"""
-  img_path, input_filename = img_path_input_filename
-  multiprocessing_name = multiprocessing.current_process().name
   try:
-    test_name, skia_success = this.RunSkia(img_path, multiprocessing_name)
-    return test_name, skia_success, input_filename
+    results = []
+    for img_path_input_filename in input_chunk:
+      img_path, input_filename = img_path_input_filename
+      multiprocessing_name = multiprocessing.current_process().name
+
+      test_name, skia_success = this.RunSkia(img_path, multiprocessing_name)
+      results.append((test_name, skia_success, input_filename))
+    return results
   except KeyboardInterrupt:
     raise KeyboardInterruptError()
 
@@ -455,7 +460,18 @@
         try:
           pool = multiprocessing.Pool(self.options.num_workers)
           gold_worker_func = functools.partial(RunSkiaWrapper, self)
-          gold_results = pool.imap(gold_worker_func, skia_gold_parallel_inputs)
+
+          def chunk_input(whole_list):
+            chunked = []
+            size = len(whole_list) // self.options.num_workers
+            for i in range(0, len(whole_list), size):
+              chunked.append(whole_list[i:i + size])
+            return chunked
+
+          chunked_input = chunk_input(skia_gold_parallel_inputs)
+          pool_results = pool.imap(gold_worker_func, chunked_input)
+          for r in pool_results:
+            gold_results.extend(r)
         except KeyboardInterrupt:
           pool.terminate()
         finally: