diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/vm/HelperThreadTask.h | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/vm/HelperThreadTask.h')
-rw-r--r-- | js/src/vm/HelperThreadTask.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/js/src/vm/HelperThreadTask.h b/js/src/vm/HelperThreadTask.h new file mode 100644 index 0000000000..8e620d3efa --- /dev/null +++ b/js/src/vm/HelperThreadTask.h @@ -0,0 +1,68 @@ +/* -*- 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/. */ + +#ifndef vm_HelperThreadTask_h +#define vm_HelperThreadTask_h + +#include "js/Utility.h" + +namespace js { + +class AutoLockHelperThreadState; +struct ParseTask; +class SourceCompressionTask; + +namespace jit { +class IonCompileTask; +class IonFreeTask; +} // namespace jit +namespace wasm { +struct Tier2GeneratorTask; +} // namespace wasm + +template <typename T> +struct MapTypeToThreadType {}; + +template <> +struct MapTypeToThreadType<jit::IonCompileTask> { + static const ThreadType threadType = THREAD_TYPE_ION; +}; + +template <> +struct MapTypeToThreadType<wasm::Tier2GeneratorTask> { + static const ThreadType threadType = THREAD_TYPE_WASM_TIER2; +}; + +template <> +struct MapTypeToThreadType<ParseTask> { + static const ThreadType threadType = THREAD_TYPE_PARSE; +}; + +template <> +struct MapTypeToThreadType<SourceCompressionTask> { + static const ThreadType threadType = THREAD_TYPE_COMPRESS; +}; + +struct HelperThreadTask { + virtual void runHelperThreadTask(AutoLockHelperThreadState& locked) = 0; + virtual ThreadType threadType() = 0; + virtual ~HelperThreadTask() = default; + + template <typename T> + bool is() { + return MapTypeToThreadType<T>::threadType == threadType(); + } + + template <typename T> + T* as() { + MOZ_ASSERT(this->is<T>()); + return static_cast<T*>(this); + } +}; + +} // namespace js + +#endif /* vm_HelperThreadTask_h */ |