mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 08:18:41 +09:00
Bug 1465108 - Use function pointers rather than virtual run method for GC parallel tasks r=sfink a=abillings a=RyanVM
This commit is contained in:
parent
9ca1242630
commit
89e332cfec
6 changed files with 72 additions and 37 deletions
|
|
@ -73,7 +73,7 @@ class ChunkPool
|
|||
|
||||
// Performs extra allocation off the main thread so that when memory is
|
||||
// required on the main thread it will already be available and waiting.
|
||||
class BackgroundAllocTask : public GCParallelTask
|
||||
class BackgroundAllocTask : public GCParallelTaskHelper<BackgroundAllocTask>
|
||||
{
|
||||
// Guarded by the GC lock.
|
||||
JSRuntime* runtime;
|
||||
|
|
@ -85,12 +85,11 @@ class BackgroundAllocTask : public GCParallelTask
|
|||
BackgroundAllocTask(JSRuntime* rt, ChunkPool& pool);
|
||||
bool enabled() const { return enabled_; }
|
||||
|
||||
protected:
|
||||
void run() override;
|
||||
void run();
|
||||
};
|
||||
|
||||
// Search the provided Chunks for free arenas and decommit them.
|
||||
class BackgroundDecommitTask : public GCParallelTask
|
||||
// Search the provided Chunks for free arenas and recommit them.
|
||||
class BackgroundDecommitTask : public GCParallelTaskHelper<BackgroundDecommitTask>
|
||||
{
|
||||
public:
|
||||
using ChunkVector = mozilla::Vector<Chunk*>;
|
||||
|
|
@ -98,8 +97,7 @@ class BackgroundDecommitTask : public GCParallelTask
|
|||
explicit BackgroundDecommitTask(JSRuntime *rt) : runtime(rt) {}
|
||||
void setChunksToScan(ChunkVector &chunks);
|
||||
|
||||
protected:
|
||||
void run() override;
|
||||
void run();
|
||||
|
||||
private:
|
||||
JSRuntime* runtime;
|
||||
|
|
@ -1171,8 +1169,10 @@ class GCRuntime
|
|||
/*
|
||||
* Concurrent sweep infrastructure.
|
||||
*/
|
||||
void startTask(GCParallelTask& task, gcstats::Phase phase, AutoLockHelperThreadState& locked);
|
||||
void joinTask(GCParallelTask& task, gcstats::Phase phase, AutoLockHelperThreadState& locked);
|
||||
void startTask(GCParallelTask& task, gcstats::Phase phase,
|
||||
AutoLockHelperThreadState& locked);
|
||||
void joinTask(GCParallelTask& task, gcstats::Phase phase,
|
||||
AutoLockHelperThreadState& locked);
|
||||
|
||||
/*
|
||||
* List head of arenas allocated during the sweep phase.
|
||||
|
|
|
|||
|
|
@ -43,19 +43,19 @@ using mozilla::PodZero;
|
|||
|
||||
static const uintptr_t CanaryMagicValue = 0xDEADB15D;
|
||||
|
||||
struct js::Nursery::FreeMallocedBuffersTask : public GCParallelTask
|
||||
struct js::Nursery::FreeMallocedBuffersTask : public GCParallelTaskHelper<FreeMallocedBuffersTask>
|
||||
{
|
||||
explicit FreeMallocedBuffersTask(FreeOp* fop) : fop_(fop) {}
|
||||
bool init() { return buffers_.init(); }
|
||||
void transferBuffersToFree(MallocedBuffersSet& buffersToFree,
|
||||
const AutoLockHelperThreadState& lock);
|
||||
~FreeMallocedBuffersTask() override { join(); }
|
||||
~FreeMallocedBuffersTask() { join(); }
|
||||
|
||||
void run();
|
||||
|
||||
private:
|
||||
FreeOp* fop_;
|
||||
MallocedBuffersSet buffers_;
|
||||
|
||||
virtual void run() override;
|
||||
};
|
||||
|
||||
struct js::Nursery::SweepAction
|
||||
|
|
|
|||
|
|
@ -22,9 +22,6 @@
|
|||
using mozilla::Maybe;
|
||||
|
||||
namespace js {
|
||||
|
||||
class GCParallelTask;
|
||||
|
||||
namespace gcstats {
|
||||
|
||||
enum Phase : uint8_t {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue