Commit e1a309f7 authored by Michael Lippautz's avatar Michael Lippautz Committed by V8 LUCI CQ

[heap] Adjust cppgc heap statistics

- Avoid adding an Invalid type that can never be reached during
  traversal;
- Expose class names as object names;

Bug: chromium:1321620
Change-Id: Ie3d9f78d97703535ecf67d56235d564ab6a9a7e8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3763866
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81758}
parent 21e5dbda
......@@ -298,5 +298,16 @@ HeapStatistics HeapBase::CollectStatistics(
return HeapStatisticsCollector().CollectDetailedStatistics(this);
}
ClassNameAsHeapObjectNameScope::ClassNameAsHeapObjectNameScope(HeapBase& heap)
: heap_(heap),
saved_heap_object_name_value_(heap_.name_of_unnamed_object()) {
heap_.set_name_of_unnamed_object(
HeapObjectNameForUnnamedObject::kUseClassNameIfSupported);
}
ClassNameAsHeapObjectNameScope::~ClassNameAsHeapObjectNameScope() {
heap_.set_name_of_unnamed_object(saved_heap_object_name_value_);
}
} // namespace internal
} // namespace cppgc
......@@ -310,6 +310,16 @@ class V8_EXPORT_PRIVATE HeapBase : public cppgc::HeapHandle {
friend class cppgc::testing::OverrideEmbedderStackStateScope;
};
class V8_NODISCARD V8_EXPORT_PRIVATE ClassNameAsHeapObjectNameScope final {
public:
explicit ClassNameAsHeapObjectNameScope(HeapBase& heap);
~ClassNameAsHeapObjectNameScope();
private:
HeapBase& heap_;
const HeapObjectNameForUnnamedObject saved_heap_object_name_value_;
};
} // namespace internal
} // namespace cppgc
......
......@@ -97,11 +97,7 @@ HeapStatistics HeapStatisticsCollector::CollectDetailedStatistics(
stats.detail_level = HeapStatistics::DetailLevel::kDetailed;
current_stats_ = &stats;
if (NameProvider::SupportsCppClassNamesAsObjectNames()) {
// Add a dummy type so that a type index of zero has a valid mapping but
// shows an invalid type.
type_name_to_index_map_.insert({"Invalid type", 0});
}
ClassNameAsHeapObjectNameScope class_names_scope(*heap);
Traverse(heap->raw_heap());
FinalizeSpace(current_stats_, &current_space_stats_, &current_page_stats_);
......
......@@ -7580,16 +7580,11 @@ EmbedderStackStateScope::~EmbedderStackStateScope() {
CppClassNamesAsHeapObjectNameScope::CppClassNamesAsHeapObjectNameScope(
v8::CppHeap* heap)
: cpp_heap_(CppHeap::From(heap)),
saved_heap_object_name_value_(cpp_heap_->name_of_unnamed_object()) {
cpp_heap_->set_name_of_unnamed_object(
cppgc::internal::HeapObjectNameForUnnamedObject::
kUseClassNameIfSupported);
}
: scope_(std::make_unique<cppgc::internal::ClassNameAsHeapObjectNameScope>(
*CppHeap::From(heap))) {}
CppClassNamesAsHeapObjectNameScope::~CppClassNamesAsHeapObjectNameScope() {
cpp_heap_->set_name_of_unnamed_object(saved_heap_object_name_value_);
}
CppClassNamesAsHeapObjectNameScope::~CppClassNamesAsHeapObjectNameScope() =
default;
} // namespace internal
} // namespace v8
......@@ -46,6 +46,7 @@ namespace cppgc {
namespace internal {
enum class HeapObjectNameForUnnamedObject : uint8_t;
class ClassNameAsHeapObjectNameScope;
} // namespace internal
} // namespace cppgc
......@@ -2909,9 +2910,7 @@ class V8_NODISCARD CppClassNamesAsHeapObjectNameScope final {
~CppClassNamesAsHeapObjectNameScope();
private:
CppHeap* const cpp_heap_;
const cppgc::internal::HeapObjectNameForUnnamedObject
saved_heap_object_name_value_;
std::unique_ptr<cppgc::internal::ClassNameAsHeapObjectNameScope> scope_;
};
} // namespace internal
......
......@@ -120,8 +120,7 @@ TEST(NameTraitTest, ParsingPrettyFunction) {
class HeapObjectHeaderNameTest : public testing::TestWithHeap {};
TEST_F(HeapObjectHeaderNameTest, LookupNameThroughGCInfo) {
Heap::From(GetHeap())->set_name_of_unnamed_object(
HeapObjectNameForUnnamedObject::kUseClassNameIfSupported);
ClassNameAsHeapObjectNameScope class_names_scope(*Heap::From(GetHeap()));
auto* no_name = MakeGarbageCollected<NoName>(GetAllocationHandle());
auto no_name_tuple = HeapObjectHeader::FromObject(no_name).GetName();
if (NameProvider::SupportsCppClassNamesAsObjectNames()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment