fune/js/public/HelperThreadAPI.h
Jon Coppeard f482422bf1 Bug 1888429 - Part 4: Make the internal thread pool dispatch tasks to free threads in a fixed order r=jandem
This changes the shell's internal thread pool to dispatch tasks to helper threads in
a fixed order rather than by threads picking up each task depending on which is
the first to get scheduled. In other words, if there is only ever at most one
task in the system then all tasks will be run on the first pool thread; if
there are at most two then the only the first two threads will be used.

This results in a noticable improvement on the splay benchmark on my linux
system, probably due to cache effects. This patch only affects the shell but it
indicates that it may be preferable for TaskController to work in a similar
way.

This removes JS::DispatchReason which is no longer needed.

Differential Revision: https://phabricator.services.mozilla.com/D206764
2024-05-24 16:50:06 +00:00

37 lines
1.1 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: set ts=8 sts=2 et sw=2 tw=80:
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* API for supplying an external thread pool to run internal work off the main
* thread.
*/
#ifndef js_HelperThreadAPI_h
#define js_HelperThreadAPI_h
#include <stddef.h> // size_t
#include "jstypes.h" // JS_PUBLIC_API
namespace JS {
class HelperThreadTask;
/**
* Set callback to dispatch a task to an external thread pool.
*
* When the task runs it should call JS::RunHelperThreadTask passing |task|.
*/
using HelperThreadTaskCallback = void (*)(HelperThreadTask* task);
extern JS_PUBLIC_API void SetHelperThreadTaskCallback(
HelperThreadTaskCallback callback, size_t threadCount, size_t stackSize);
// Function to call from external thread pool to run a helper thread task.
extern JS_PUBLIC_API void RunHelperThreadTask(HelperThreadTask* task);
} // namespace JS
#endif // js_HelperThreadAPI_h