mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00: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 log::debug;
|
||||
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;
|
||||
|
||||
|
@ -100,28 +100,18 @@ impl Profiler {
|
|||
ProfilerMsg::Report(sender) => {
|
||||
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();
|
||||
// Turn the pid -> reports map into a vector and add the
|
||||
// hint to find the main process.
|
||||
let json_reports: Vec<JsonReport> = reports
|
||||
let results: Vec<MemoryReport> = reports
|
||||
.into_iter()
|
||||
.map(|(pid, reports)| JsonReport {
|
||||
.map(|(pid, reports)| MemoryReport {
|
||||
pid,
|
||||
reports,
|
||||
is_main_process: pid == main_pid,
|
||||
})
|
||||
.collect();
|
||||
let content = serde_json::to_string(&json_reports)
|
||||
.unwrap_or_else(|_| "{ error: \"failed to create memory report\"}".to_owned());
|
||||
let _ = sender.send(MemoryReportResult { content });
|
||||
let _ = sender.send(MemoryReportResult { results });
|
||||
true
|
||||
},
|
||||
|
||||
|
|
|
@ -59,7 +59,8 @@ impl ServoInternalsMethods<crate::DomTypeHolder> for ServoInternals {
|
|||
|
||||
impl RoutedPromiseListener<MemoryReportResult> for ServoInternals {
|
||||
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.
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct MemoryReportResult {
|
||||
/// The stringified output.
|
||||
pub content: String,
|
||||
/// All the results from the MemoryReports
|
||||
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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue