[vm] Cleanup unused metric accessors in VM

Only a few of the metrics are accessed via Dart C API, so we can remove
the rest from the C API surface.

The VM metrics seem to be unused entirely.

TEST=ci

Change-Id: I03be78ed2f223aa6fba80f663fb12c8ef9a66cb7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291762
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
This commit is contained in:
Martin Kustermann 2023-03-29 19:58:33 +00:00 committed by Commit Queue
parent b984c308be
commit 042c3f6c76
6 changed files with 30 additions and 95 deletions

View file

@ -468,41 +468,19 @@ DART_EXPORT void Dart_SetTimelineRecorderCallback(
/**
* Return metrics gathered for the VM and individual isolates.
*
* NOTE: Non-heap metrics are not available in PRODUCT builds of Dart.
* Calling the non-heap metric functions on a PRODUCT build might return invalid metrics.
*/
DART_EXPORT int64_t Dart_VMIsolateCountMetric(); // Counter
DART_EXPORT int64_t Dart_VMCurrentRSSMetric(); // Byte
DART_EXPORT int64_t Dart_VMPeakRSSMetric(); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapOldUsedMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapOldUsedMaxMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapOldCapacityMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapOldCapacityMaxMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapOldExternalMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapNewUsedMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapNewUsedMaxMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapNewCapacityMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapNewCapacityMaxMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapNewExternalMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapGlobalUsedMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateGroupHeapGlobalUsedMaxMetric(Dart_IsolateGroup group); // Byte
DART_EXPORT int64_t
Dart_IsolateRunnableLatencyMetric(Dart_Isolate isolate); // Microsecond
DART_EXPORT int64_t
Dart_IsolateRunnableHeapSizeMetric(Dart_Isolate isolate); // Byte
/*
* ========

View file

@ -334,7 +334,6 @@ char* Dart::DartInit(const Dart_InitializeParams* params) {
NativeSymbolResolver::Init();
NOT_IN_PRODUCT(Profiler::Init());
Page::Init();
NOT_IN_PRODUCT(Metric::Init());
StoreBuffer::Init();
MarkingStack::Init();
TargetCPUFeatures::Init();
@ -700,7 +699,6 @@ char* Dart::Cleanup() {
}
bool result = Thread::EnterIsolate(vm_isolate_);
ASSERT(result);
Metric::Cleanup();
Thread::ExitIsolate();
}
#endif

View file

@ -1226,20 +1226,6 @@ DART_EXPORT bool Dart_IsVMFlagSet(const char* flag_name) {
return Flags::IsSet(flag_name);
}
#if !defined(PRODUCT)
#define VM_METRIC_API(type, variable, name, unit) \
DART_EXPORT int64_t Dart_VM##variable##Metric() { \
return vm_metric_##variable.Value(); \
}
VM_METRIC_LIST(VM_METRIC_API);
#undef VM_METRIC_API
#else // !defined(PRODUCT)
#define VM_METRIC_API(type, variable, name, unit) \
DART_EXPORT int64_t Dart_VM##variable##Metric() { return -1; }
VM_METRIC_LIST(VM_METRIC_API)
#undef VM_METRIC_API
#endif // !defined(PRODUCT)
#define ISOLATE_GROUP_METRIC_API(type, variable, name, unit) \
DART_EXPORT int64_t Dart_IsolateGroup##variable##Metric( \
Dart_IsolateGroup isolate_group) { \
@ -1250,7 +1236,7 @@ VM_METRIC_LIST(VM_METRIC_API)
IsolateGroup* group = reinterpret_cast<IsolateGroup*>(isolate_group); \
return group->Get##variable##Metric()->Value(); \
}
ISOLATE_GROUP_METRIC_LIST(ISOLATE_GROUP_METRIC_API)
DART_API_ISOLATE_GROUP_METRIC_LIST(ISOLATE_GROUP_METRIC_API)
#undef ISOLATE_GROUP_METRIC_API
#if !defined(PRODUCT)

View file

@ -191,36 +191,6 @@ int64_t MetricPeakRSS::Value() const {
}
#endif // !defined(PRODUCT)
#if !defined(PRODUCT)
#define VM_METRIC_VARIABLE(type, variable, name, unit) \
type vm_metric_##variable;
VM_METRIC_LIST(VM_METRIC_VARIABLE);
#undef VM_METRIC_VARIABLE
void Metric::Init() {
#define VM_METRIC_INIT(type, variable, name, unit) \
vm_metric_##variable.InitInstance(name, NULL, Metric::unit);
VM_METRIC_LIST(VM_METRIC_INIT);
#undef VM_METRIC_INIT
}
void Metric::Cleanup() {
if (FLAG_print_metrics) {
// Create a zone to allocate temporary strings in.
StackZone sz(Thread::Current());
OS::PrintErr("Printing metrics for VM\n");
#define VM_METRIC_INIT(type, variable, name, unit) \
OS::PrintErr("%s\n", vm_metric_##variable.ToString());
VM_METRIC_LIST(VM_METRIC_INIT);
#undef VM_METRIC_INIT
OS::PrintErr("\n");
}
}
#endif // !defined(PRODUCT)
MaxMetric::MaxMetric() : Metric() {
set_value(kMinInt64);
}

View file

@ -14,30 +14,42 @@ class IsolateGroup;
class JSONStream;
// Metrics for each isolate group.
#define ISOLATE_GROUP_METRIC_LIST(V) \
//
// Golem uses `--print-metrics` and relies on
//
// heap.old.capacity.max
// heap.new.capacity.max
//
// g3 uses metrics via Dart API:
//
// Dart_Heap{Old,New}{Used,Capacity,External}
//
// All metrics are exposed via vm-service protocol.
//
#define DART_API_ISOLATE_GROUP_METRIC_LIST(V) \
V(MetricHeapOldUsed, HeapOldUsed, "heap.old.used", kByte) \
V(MaxMetric, HeapOldUsedMax, "heap.old.used.max", kByte) \
V(MetricHeapOldCapacity, HeapOldCapacity, "heap.old.capacity", kByte) \
V(MaxMetric, HeapOldCapacityMax, "heap.old.capacity.max", kByte) \
V(MetricHeapOldExternal, HeapOldExternal, "heap.old.external", kByte) \
V(MetricHeapNewUsed, HeapNewUsed, "heap.new.used", kByte) \
V(MaxMetric, HeapNewUsedMax, "heap.new.used.max", kByte) \
V(MetricHeapNewCapacity, HeapNewCapacity, "heap.new.capacity", kByte) \
V(MetricHeapNewExternal, HeapNewExternal, "heap.new.external", kByte)
#define ISOLATE_GROUP_METRIC_LIST(V) \
DART_API_ISOLATE_GROUP_METRIC_LIST(V) \
V(MaxMetric, HeapOldUsedMax, "heap.old.used.max", kByte) \
V(MaxMetric, HeapOldCapacityMax, "heap.old.capacity.max", kByte) \
V(MaxMetric, HeapNewUsedMax, "heap.new.used.max", kByte) \
V(MaxMetric, HeapNewCapacityMax, "heap.new.capacity.max", kByte) \
V(MetricHeapNewExternal, HeapNewExternal, "heap.new.external", kByte) \
V(MetricHeapUsed, HeapGlobalUsed, "heap.global.used", kByte) \
V(MaxMetric, HeapGlobalUsedMax, "heap.global.used.max", kByte)
// Metrics for each isolate.
//
// All metrics are exposed via vm-service protocol.
#define ISOLATE_METRIC_LIST(V) \
V(Metric, RunnableLatency, "isolate.runnable.latency", kMicrosecond) \
V(Metric, RunnableHeapSize, "isolate.runnable.heap", kByte)
#define VM_METRIC_LIST(V) \
V(MetricIsolateCount, IsolateCount, "vm.isolate.count", kCounter) \
V(MetricCurrentRSS, CurrentRSS, "vm.memory.current", kByte) \
V(MetricPeakRSS, PeakRSS, "vm.memory.max", kByte)
class Metric {
public:
enum Unit {
@ -183,13 +195,6 @@ class MetricHeapUsed : public Metric {
virtual int64_t Value() const;
};
#if !defined(PRODUCT)
#define VM_METRIC_VARIABLE(type, variable, name, unit) \
extern type vm_metric_##variable;
VM_METRIC_LIST(VM_METRIC_VARIABLE);
#undef VM_METRIC_VARIABLE
#endif // !defined(PRODUCT)
} // namespace dart
#endif // RUNTIME_VM_METRICS_H_

View file

@ -96,23 +96,21 @@ ISOLATE_UNIT_TEST_CASE(Metric_EmbedderAPI) {
// Ensure we've something live in new space.
String::New("<land-in-new-space2>", Heap::kNew);
EXPECT(thread->isolate_group()->GetHeapOldUsedMaxMetric()->Value() > 0);
EXPECT(thread->isolate_group()->GetHeapOldCapacityMaxMetric()->Value() > 0);
EXPECT(thread->isolate_group()->GetHeapNewUsedMaxMetric()->Value() > 0);
EXPECT(thread->isolate_group()->GetHeapNewCapacityMaxMetric()->Value() > 0);
EXPECT(thread->isolate_group()->GetHeapGlobalUsedMetric()->Value() > 0);
EXPECT(thread->isolate_group()->GetHeapGlobalUsedMaxMetric()->Value() > 0);
{
TransitionVMToNative transition(thread);
Dart_IsolateGroup isolate_group = Dart_CurrentIsolateGroup();
#if !defined(PRODUCT)
EXPECT(Dart_VMIsolateCountMetric() > 0);
#endif
EXPECT(Dart_IsolateGroupHeapOldUsedMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapOldUsedMaxMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapOldCapacityMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapOldCapacityMaxMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapNewUsedMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapNewUsedMaxMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapNewCapacityMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapNewCapacityMaxMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapGlobalUsedMetric(isolate_group) > 0);
EXPECT(Dart_IsolateGroupHeapGlobalUsedMaxMetric(isolate_group) > 0);
}
}