1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 00:58:12 +00:00

Kernel: Make PerformanceEventBuffer::to_json() return a KResult

There's a ton of things inside to_json() that could go wrong but we
don't know about it yet. One step at a time.
This commit is contained in:
Andreas Kling 2021-09-07 18:21:37 +02:00
parent 6f992d784f
commit 905065f8c8
5 changed files with 8 additions and 12 deletions

View file

@ -721,11 +721,7 @@ private:
{ {
if (!g_global_perf_events) if (!g_global_perf_events)
return ENOENT; return ENOENT;
TRY(g_global_perf_events->to_json(builder));
// FIXME: to_json() should return a better error.
if (!g_global_perf_events->to_json(builder))
return ENOMEM;
return KSuccess; return KSuccess;
} }
}; };

View file

@ -164,7 +164,7 @@ PerformanceEvent& PerformanceEventBuffer::at(size_t index)
} }
template<typename Serializer> template<typename Serializer>
bool PerformanceEventBuffer::to_json_impl(Serializer& object) const KResult PerformanceEventBuffer::to_json_impl(Serializer& object) const
{ {
{ {
auto strings = object.add_array("strings"); auto strings = object.add_array("strings");
@ -263,10 +263,10 @@ bool PerformanceEventBuffer::to_json_impl(Serializer& object) const
} }
array.finish(); array.finish();
object.finish(); object.finish();
return true; return KSuccess;
} }
bool PerformanceEventBuffer::to_json(KBufferBuilder& builder) const KResult PerformanceEventBuffer::to_json(KBufferBuilder& builder) const
{ {
JsonObjectSerializer object(builder); JsonObjectSerializer object(builder);
return to_json_impl(object); return to_json_impl(object);

View file

@ -116,7 +116,7 @@ public:
return const_cast<PerformanceEventBuffer&>(*this).at(index); return const_cast<PerformanceEventBuffer&>(*this).at(index);
} }
bool to_json(KBufferBuilder&) const; KResult to_json(KBufferBuilder&) const;
void add_process(const Process&, ProcessEventType event_type); void add_process(const Process&, ProcessEventType event_type);
@ -126,7 +126,7 @@ private:
explicit PerformanceEventBuffer(NonnullOwnPtr<KBuffer>); explicit PerformanceEventBuffer(NonnullOwnPtr<KBuffer>);
template<typename Serializer> template<typename Serializer>
bool to_json_impl(Serializer&) const; KResult to_json_impl(Serializer&) const;
PerformanceEvent& at(size_t index); PerformanceEvent& at(size_t index);

View file

@ -581,7 +581,7 @@ bool Process::dump_perfcore()
return false; return false;
} }
auto builder = builder_or_error.release_value(); auto builder = builder_or_error.release_value();
if (!m_perf_event_buffer->to_json(builder)) { if (m_perf_event_buffer->to_json(builder).is_error()) {
dbgln("Failed to generate perfcore for pid {}: Could not serialize performance events to JSON.", pid().value()); dbgln("Failed to generate perfcore for pid {}: Could not serialize performance events to JSON.", pid().value());
return false; return false;
} }

View file

@ -166,7 +166,7 @@ KResult Process::procfs_get_perf_events(KBufferBuilder& builder) const
dbgln("ProcFS: No perf events for {}", pid()); dbgln("ProcFS: No perf events for {}", pid());
return KResult(ENOBUFS); return KResult(ENOBUFS);
} }
return perf_events()->to_json(builder) ? KSuccess : KResult(EINVAL); return perf_events()->to_json(builder);
} }
KResult Process::procfs_get_fds_stats(KBufferBuilder& builder) const KResult Process::procfs_get_fds_stats(KBufferBuilder& builder) const