servo-devtools 0.1.0

A component of the servo web-engine.
Documentation
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */

use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize;

use crate::actor::{Actor, ActorRegistry};

#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct TimelineMemoryReply {
    js_object_size: u64,
    js_string_size: u64,
    js_other_size: u64,
    dom_size: u64,
    style_size: u64,
    other_size: u64,
    total_size: u64,
    js_milliseconds: f64,
    #[serde(rename = "nonJSMilliseconds")]
    non_js_milliseconds: f64,
}

#[derive(MallocSizeOf)]
pub(crate) struct MemoryActor {
    name: String,
}

impl Actor for MemoryActor {
    fn name(&self) -> String {
        self.name.clone()
    }
}

impl MemoryActor {
    /// return name of actor
    pub fn create(registry: &ActorRegistry) -> String {
        let actor_name = registry.new_name::<Self>();
        let actor = MemoryActor {
            name: actor_name.clone(),
        };

        registry.register(actor);
        actor_name
    }

    pub fn measure(&self) -> TimelineMemoryReply {
        TimelineMemoryReply {
            js_object_size: 1,
            js_string_size: 1,
            js_other_size: 1,
            dom_size: 1,
            style_size: 1,
            other_size: 1,
            total_size: 1,
            js_milliseconds: 1.1,
            non_js_milliseconds: 1.1,
        }
    }
}