4d5ab15dc4
To support compaction of backing stores in blink, we need to distinguish custom spaces holding backing stores from other custom spaces. Custom space compactablity is explicitly declared as an enum value and propagated to BaseSpace as a bool flag. Note that even if/when general compaction is implemented/enabled for normal pages we will still need such a marking for supporting non-compactable custom spaces. Bug: v8:10990 Change-Id: I165a0268ded121e91399834a4091e88e57f2565c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2449973 Commit-Queue: Omer Katz <omerkatz@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#70345}
72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
// Copyright 2020 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef INCLUDE_CPPGC_CUSTOM_SPACE_H_
|
|
#define INCLUDE_CPPGC_CUSTOM_SPACE_H_
|
|
|
|
#include <stddef.h>
|
|
|
|
namespace cppgc {
|
|
|
|
struct CustomSpaceIndex {
|
|
CustomSpaceIndex(size_t value) : value(value) {} // NOLINT
|
|
size_t value;
|
|
};
|
|
|
|
enum class CustomSpaceCompactability { kNotCompactable, kCompactable };
|
|
|
|
/**
|
|
* Top-level base class for custom spaces. Users must inherit from CustomSpace
|
|
* below.
|
|
*/
|
|
class CustomSpaceBase {
|
|
public:
|
|
virtual ~CustomSpaceBase() = default;
|
|
virtual CustomSpaceIndex GetCustomSpaceIndex() const = 0;
|
|
virtual bool IsCompactable() const = 0;
|
|
};
|
|
|
|
/**
|
|
* Base class custom spaces should directly inherit from. The class inheriting
|
|
* from CustomSpace must define kSpaceIndex as unique space index. These
|
|
* indices need for form a sequence starting at 0.
|
|
*
|
|
* Example:
|
|
* \code
|
|
* class CustomSpace1 : public CustomSpace<CustomSpace1> {
|
|
* public:
|
|
* static constexpr CustomSpaceIndex kSpaceIndex = 0;
|
|
* };
|
|
* class CustomSpace2 : public CustomSpace<CustomSpace2> {
|
|
* public:
|
|
* static constexpr CustomSpaceIndex kSpaceIndex = 1;
|
|
* };
|
|
* \endcode
|
|
*/
|
|
template <typename ConcreteCustomSpace>
|
|
class CustomSpace : public CustomSpaceBase {
|
|
public:
|
|
CustomSpaceIndex GetCustomSpaceIndex() const final {
|
|
return ConcreteCustomSpace::kSpaceIndex;
|
|
}
|
|
bool IsCompactable() const final {
|
|
return ConcreteCustomSpace::kSupportsCompaction;
|
|
}
|
|
|
|
protected:
|
|
static constexpr bool kSupportsCompaction = false;
|
|
};
|
|
|
|
/**
|
|
* User-overridable trait that allows pinning types to custom spaces.
|
|
*/
|
|
template <typename T, typename = void>
|
|
struct SpaceTrait {
|
|
using Space = void;
|
|
};
|
|
|
|
} // namespace cppgc
|
|
|
|
#endif // INCLUDE_CPPGC_CUSTOM_SPACE_H_
|