/* -*- 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 ParseTask; struct DelazifyTask; struct FreeDelazifyTask; class SourceCompressionTask; namespace jit { class IonCompileTask; class IonFreeTask; } // namespace jit namespace wasm { struct Tier2GeneratorTask; } // namespace wasm template struct MapTypeToThreadType {}; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_ION; }; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_WASM_GENERATOR_TIER2; }; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_PARSE; }; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_DELAZIFY; }; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_DELAZIFY_FREE; }; template <> struct MapTypeToThreadType { static const ThreadType threadType = THREAD_TYPE_COMPRESS; }; struct HelperThreadTask { virtual void runHelperThreadTask(AutoLockHelperThreadState& locked) = 0; virtual ThreadType threadType() = 0; virtual ~HelperThreadTask() = default; template bool is() { return MapTypeToThreadType::threadType == threadType(); } template T* as() { MOZ_ASSERT(this->is()); return static_cast(this); } }; } // namespace js #endif /* vm_HelperThreadTask_h */