aboutsummaryrefslogtreecommitdiffstats
path: root/components/devtools
diff options
context:
space:
mode:
authorMs2ger <Ms2ger@gmail.com>2015-08-15 14:14:11 +0200
committerMs2ger <Ms2ger@gmail.com>2015-08-15 14:21:25 +0200
commit238beec038c8bb45d991dec21359f9af9e2d18d6 (patch)
tree18c52328b13678dc57b5dcfe66c7b026e01e3bcb /components/devtools
parent6a52ec94840fbaf43a29d76879e2b59542a9963d (diff)
downloadservo-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.rs73
-rw-r--r--components/devtools/actors/tab.rs3
-rw-r--r--components/devtools/lib.rs9
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>>,