mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Refactor the memory profiler code to not just return a json string but
the proper struct. This allows other consumers to easily get memory reports. I don't think the memory report page is currently covered by tests. Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
This commit is contained in:
parent
324196351e
commit
505bb0406e
3 changed files with 20 additions and 18 deletions
|
@ -12,9 +12,9 @@ use ipc_channel::ipc::{self, IpcReceiver};
|
||||||
use ipc_channel::router::ROUTER;
|
use ipc_channel::router::ROUTER;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use profile_traits::mem::{
|
use profile_traits::mem::{
|
||||||
MemoryReportResult, ProfilerChan, ProfilerMsg, Report, Reporter, ReporterRequest, ReportsChan,
|
MemoryReport, MemoryReportResult, ProfilerChan, ProfilerMsg, Report, Reporter, ReporterRequest,
|
||||||
|
ReportsChan,
|
||||||
};
|
};
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
use crate::system_reporter;
|
use crate::system_reporter;
|
||||||
|
|
||||||
|
@ -100,28 +100,18 @@ impl Profiler {
|
||||||
ProfilerMsg::Report(sender) => {
|
ProfilerMsg::Report(sender) => {
|
||||||
let main_pid = std::process::id();
|
let main_pid = std::process::id();
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
struct JsonReport {
|
|
||||||
pid: u32,
|
|
||||||
#[serde(rename = "isMainProcess")]
|
|
||||||
is_main_process: bool,
|
|
||||||
reports: Vec<Report>,
|
|
||||||
}
|
|
||||||
|
|
||||||
let reports = self.collect_reports();
|
let reports = self.collect_reports();
|
||||||
// Turn the pid -> reports map into a vector and add the
|
// Turn the pid -> reports map into a vector and add the
|
||||||
// hint to find the main process.
|
// hint to find the main process.
|
||||||
let json_reports: Vec<JsonReport> = reports
|
let results: Vec<MemoryReport> = reports
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(pid, reports)| JsonReport {
|
.map(|(pid, reports)| MemoryReport {
|
||||||
pid,
|
pid,
|
||||||
reports,
|
reports,
|
||||||
is_main_process: pid == main_pid,
|
is_main_process: pid == main_pid,
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
let content = serde_json::to_string(&json_reports)
|
let _ = sender.send(MemoryReportResult { results });
|
||||||
.unwrap_or_else(|_| "{ error: \"failed to create memory report\"}".to_owned());
|
|
||||||
let _ = sender.send(MemoryReportResult { content });
|
|
||||||
true
|
true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,8 @@ impl ServoInternalsMethods<crate::DomTypeHolder> for ServoInternals {
|
||||||
|
|
||||||
impl RoutedPromiseListener<MemoryReportResult> for ServoInternals {
|
impl RoutedPromiseListener<MemoryReportResult> for ServoInternals {
|
||||||
fn handle_response(&self, response: MemoryReportResult, promise: &Rc<Promise>, can_gc: CanGc) {
|
fn handle_response(&self, response: MemoryReportResult, promise: &Rc<Promise>, can_gc: CanGc) {
|
||||||
promise.resolve_native(&response.content, can_gc);
|
let stringified = serde_json::to_string(&response.results).unwrap();
|
||||||
|
promise.resolve_native(&stringified, can_gc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -247,8 +247,19 @@ macro_rules! path {
|
||||||
/// The results produced by the memory reporter.
|
/// The results produced by the memory reporter.
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
pub struct MemoryReportResult {
|
pub struct MemoryReportResult {
|
||||||
/// The stringified output.
|
/// All the results from the MemoryReports
|
||||||
pub content: String,
|
pub results: Vec<MemoryReport>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
/// A simple memory report
|
||||||
|
pub struct MemoryReport {
|
||||||
|
/// The pid of the report
|
||||||
|
pub pid: u32,
|
||||||
|
/// Is this the main process
|
||||||
|
pub is_main_process: bool,
|
||||||
|
/// All the reports for this pid
|
||||||
|
pub reports: Vec<Report>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Messages that can be sent to the memory profiler thread.
|
/// Messages that can be sent to the memory profiler thread.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue