diff options
author | Ms2ger <Ms2ger@gmail.com> | 2015-08-15 14:14:11 +0200 |
---|---|---|
committer | Ms2ger <Ms2ger@gmail.com> | 2015-08-15 14:21:25 +0200 |
commit | 238beec038c8bb45d991dec21359f9af9e2d18d6 (patch) | |
tree | 18c52328b13678dc57b5dcfe66c7b026e01e3bcb /components/devtools | |
parent | 6a52ec94840fbaf43a29d76879e2b59542a9963d (diff) | |
download | servo-238beec038c8bb45d991dec21359f9af9e2d18d6.tar.gz servo-238beec038c8bb45d991dec21359f9af9e2d18d6.zip |
Implement a PerformanceActor.
This is necessary for the devtools "Start Recording Performance" button to
send a message.
(This message is not yet supported, so it leads to
'unexpected message type "startRecording" found for actor "performance4"'.)
Diffstat (limited to 'components/devtools')
-rw-r--r-- | components/devtools/actors/performance.rs | 73 | ||||
-rw-r--r-- | components/devtools/actors/tab.rs | 3 | ||||
-rw-r--r-- | components/devtools/lib.rs | 9 |
3 files changed, 83 insertions, 2 deletions
diff --git a/components/devtools/actors/performance.rs b/components/devtools/actors/performance.rs new file mode 100644 index 00000000000..4c6d276783b --- /dev/null +++ b/components/devtools/actors/performance.rs @@ -0,0 +1,73 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ + +use actor::{Actor, ActorRegistry, ActorMessageStatus}; +use protocol::JsonPacketStream; + +use rustc_serialize::json; +use std::net::TcpStream; + +pub struct PerformanceActor { + name: String, +} + +#[derive(RustcEncodable)] +struct PerformanceFeatures { + withMarkers: bool, + withMemory: bool, + withTicks: bool, + withAllocations: bool, + withJITOptimizations: bool, +} + +#[derive(RustcEncodable)] +struct PerformanceTraits { + features: PerformanceFeatures, +} + +#[derive(RustcEncodable)] +struct ConnectReply { + from: String, + traits: PerformanceTraits, +} + +impl Actor for PerformanceActor { + fn name(&self) -> String { + self.name.clone() + } + + fn handle_message(&self, + _registry: &ActorRegistry, + msg_type: &str, + _msg: &json::Object, + stream: &mut TcpStream) -> Result<ActorMessageStatus, ()> { + Ok(match msg_type { + "connect" => { + let msg = ConnectReply { + from: self.name(), + traits: PerformanceTraits { + features: PerformanceFeatures { + withMarkers: true, + withMemory: true, + withTicks: true, + withAllocations: true, + withJITOptimizations: true, + }, + }, + }; + stream.write_json_packet(&msg); + ActorMessageStatus::Processed + }, + _ => ActorMessageStatus::Ignored, + }) + } +} + +impl PerformanceActor { + pub fn new(name: String) -> PerformanceActor { + PerformanceActor { + name: name, + } + } +} diff --git a/components/devtools/actors/tab.rs b/components/devtools/actors/tab.rs index ef972245378..f29770e2ce1 100644 --- a/components/devtools/actors/tab.rs +++ b/components/devtools/actors/tab.rs @@ -63,6 +63,7 @@ pub struct TabActorMsg { inspectorActor: String, timelineActor: String, profilerActor: String, + performanceActor: String, } pub struct TabActor { @@ -73,6 +74,7 @@ pub struct TabActor { pub inspector: String, pub timeline: String, pub profiler: String, + pub performance: String, } impl Actor for TabActor { @@ -150,6 +152,7 @@ impl TabActor { inspectorActor: self.inspector.clone(), timelineActor: self.timeline.clone(), profilerActor: self.profiler.clone(), + performanceActor: self.performance.clone(), } } } diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index f38e66ab596..bc1d09c7a14 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -41,6 +41,7 @@ use actors::console::ConsoleActor; use actors::network_event::{NetworkEventActor, EventActor, ResponseStartMsg}; use actors::framerate::FramerateActor; use actors::inspector::InspectorActor; +use actors::performance::PerformanceActor; use actors::profiler::ProfilerActor; use actors::root::RootActor; use actors::tab::TabActor; @@ -74,6 +75,7 @@ mod actors { pub mod memory; pub mod network_event; pub mod object; + pub mod performance; pub mod profiler; pub mod root; pub mod tab; @@ -204,7 +206,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, let (pipeline, worker_id) = ids; //TODO: move all this actor creation into a constructor method on TabActor - let (tab, console, inspector, timeline, profiler) = { + let (tab, console, inspector, timeline, profiler, performance) = { let console = ConsoleActor { name: actors.new_name("console"), script_chan: script_sender.clone(), @@ -225,6 +227,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, script_sender); let profiler = ProfilerActor::new(actors.new_name("profiler")); + let performance = PerformanceActor::new(actors.new_name("performance")); let DevtoolsPageInfo { title, url } = page_info; let tab = TabActor { @@ -235,12 +238,13 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, inspector: inspector.name(), timeline: timeline.name(), profiler: profiler.name(), + performance: performance.name(), }; let root = actors.find_mut::<RootActor>("root"); root.tabs.push(tab.name.clone()); - (tab, console, inspector, timeline, profiler) + (tab, console, inspector, timeline, profiler, performance) }; if let Some(id) = worker_id { @@ -259,6 +263,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, actors.register(box inspector); actors.register(box timeline); actors.register(box profiler); + actors.register(box performance); } fn handle_console_message(actors: Arc<Mutex<ActorRegistry>>, |