diff options
Diffstat (limited to 'js/src/vm/HelperThreadTask.h')
-rw-r--r-- | js/src/vm/HelperThreadTask.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/js/src/vm/HelperThreadTask.h b/js/src/vm/HelperThreadTask.h new file mode 100644 index 0000000000..d27e53033d --- /dev/null +++ b/js/src/vm/HelperThreadTask.h @@ -0,0 +1,76 @@ +/* -*- 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 "mozilla/TimeStamp.h" + +#include "js/Utility.h" + +namespace js { + +class AutoLockHelperThreadState; +struct DelazifyTask; +struct FreeDelazifyTask; +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_GENERATOR_TIER2; +}; + +template <> +struct MapTypeToThreadType<DelazifyTask> { + static const ThreadType threadType = THREAD_TYPE_DELAZIFY; +}; + +template <> +struct MapTypeToThreadType<FreeDelazifyTask> { + static const ThreadType threadType = THREAD_TYPE_DELAZIFY_FREE; +}; + +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 */ |