Files
tubestation/dom/base/DOMArena.h
Serban Stanca 72ddd15355 Revert "Bug 1928254 - pt 8. Improve the idle purge markers r=jstutte" for causing multiple failures.
This reverts commit 1de23dc2a6.

This reverts commit dc7de1e170.

This reverts commit 0891965b10.

This reverts commit 52c855715a.

This reverts commit fcdc85d6b4.

This reverts commit 1fa61503c2.

This reverts commit df279eb40e.

This reverts commit dd4278a7d5.
2025-05-16 08:52:29 +00:00

60 lines
2.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: set ts=2 sw=2 et tw=78:
* 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 DOM_Arena_h___
#define DOM_Arena_h___
#include "nsISupportsImpl.h"
#include "mozmemory.h"
#include "mozilla/mozalloc_oom.h" // for mozalloc_handle_oom
#define NS_DECL_DOMARENA_DESTROY void Destroy(void);
#define NS_IMPL_DOMARENA_DESTROY(class) \
void class ::Destroy(void) { \
if (StaticPrefs::dom_arena_allocator_enabled_AtStartup()) { \
RefPtr<nsNodeInfoManager> nim = OwnerDoc()->NodeInfoManager(); \
RefPtr<DOMArena> arena = \
HasFlag(NODE_KEEPS_DOMARENA) \
? nsContentUtils::TakeEntryFromDOMArenaTable(this) \
: nullptr; \
this->~class(); \
MOZ_ASSERT(nim, "nsNodeInfoManager needs to be initialized"); \
nim->Free(this); \
} else { \
delete this; \
} \
}
namespace mozilla::dom {
class DOMArena {
public:
friend class DocGroup;
DOMArena() {
arena_params_t params;
params.mMaxDirtyIncreaseOverride = 7;
params.mFlags = ARENA_FLAG_THREAD_MAIN_THREAD_ONLY;
mArenaId = moz_create_arena_with_params(&params);
}
NS_INLINE_DECL_REFCOUNTING(DOMArena)
void* Allocate(size_t aSize) {
void* ret = moz_arena_malloc(mArenaId, aSize);
if (!ret) {
mozalloc_handle_oom(aSize);
}
return ret;
}
private:
~DOMArena() { moz_dispose_arena(mArenaId); }
arena_id_t mArenaId;
};
} // namespace mozilla::dom
#endif