tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

resizable_parallel_runner.h (2731B)


      1 /* Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 *
      3 * Use of this source code is governed by a BSD-style
      4 * license that can be found in the LICENSE file.
      5 */
      6 
      7 /** @addtogroup libjxl_threads
      8 * @{
      9 * @file resizable_parallel_runner.h
     10 * @brief implementation using std::thread of a resizeable ::JxlParallelRunner.
     11 */
     12 
     13 /** Implementation of JxlParallelRunner than can be used to enable
     14 * multithreading when using the JPEG XL library. This uses std::thread
     15 * internally and related synchronization functions. The number of threads
     16 * created can be changed after creation of the thread pool; the threads
     17 * (including the main thread) are re-used for every
     18 * ResizableParallelRunner::Runner call. Only one concurrent
     19 * @ref JxlResizableParallelRunner call per instance is allowed at a time.
     20 *
     21 * This is a scalable, lower-overhead thread pool runner, especially suitable
     22 * for data-parallel computations in the fork-join model, where clients need to
     23 * know when all tasks have completed.
     24 *
     25 * Compared to the implementation in @ref thread_parallel_runner.h, this
     26 * implementation is tuned for execution on lower-powered systems, including
     27 * for example ARM CPUs with big.LITTLE computation models.
     28 */
     29 
     30 #ifndef JXL_RESIZABLE_PARALLEL_RUNNER_H_
     31 #define JXL_RESIZABLE_PARALLEL_RUNNER_H_
     32 
     33 #include <jxl/jxl_threads_export.h>
     34 #include <jxl/memory_manager.h>
     35 #include <jxl/parallel_runner.h>
     36 #include <stddef.h>
     37 #include <stdint.h>
     38 #include <stdlib.h>
     39 
     40 #ifdef __cplusplus
     41 extern "C" {
     42 #endif
     43 
     44 /** Parallel runner internally using std::thread. Use as @ref JxlParallelRunner.
     45 */
     46 JXL_THREADS_EXPORT JxlParallelRetCode JxlResizableParallelRunner(
     47    void* runner_opaque, void* jpegxl_opaque, JxlParallelRunInit init,
     48    JxlParallelRunFunction func, uint32_t start_range, uint32_t end_range);
     49 
     50 /** Creates the runner for @ref JxlResizableParallelRunner. Use as the opaque
     51 * runner. The runner will execute tasks on the calling thread until
     52 * @ref JxlResizableParallelRunnerSetThreads is called.
     53 */
     54 JXL_THREADS_EXPORT void* JxlResizableParallelRunnerCreate(
     55    const JxlMemoryManager* memory_manager);
     56 
     57 /** Changes the number of threads for @ref JxlResizableParallelRunner.
     58 */
     59 JXL_THREADS_EXPORT void JxlResizableParallelRunnerSetThreads(
     60    void* runner_opaque, size_t num_threads);
     61 
     62 /** Suggests a number of threads to use for an image of given size.
     63 */
     64 JXL_THREADS_EXPORT uint32_t
     65 JxlResizableParallelRunnerSuggestThreads(uint64_t xsize, uint64_t ysize);
     66 
     67 /** Destroys the runner created by @ref JxlResizableParallelRunnerCreate.
     68 */
     69 JXL_THREADS_EXPORT void JxlResizableParallelRunnerDestroy(void* runner_opaque);
     70 
     71 #ifdef __cplusplus
     72 }
     73 #endif
     74 
     75 #endif /* JXL_RESIZABLE_PARALLEL_RUNNER_H_ */
     76 
     77 /** @}*/