PWM tests

This commit is contained in:
Fernando Jiménez Moreno 2017-07-21 14:58:30 +02:00
parent 06b409ad60
commit 585d0e52af
6 changed files with 166 additions and 0 deletions

16
Cargo.lock generated
View file

@ -1707,6 +1707,21 @@ dependencies = [
"time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "metrics_tests"
version = "0.0.1"
dependencies = [
"euclid 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx 0.0.1",
"ipc-channel 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"metrics 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
"profile_traits 0.0.1",
"style 0.0.1",
"time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "mime"
version = "0.2.4"
@ -2666,6 +2681,7 @@ dependencies = [
"layout_tests 0.0.1",
"libservo 0.0.1",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"metrics_tests 0.0.1",
"net_tests 0.0.1",
"net_traits_tests 0.0.1",
"plugin_compiletest 0.0.1",

View file

@ -110,4 +110,16 @@ impl PaintTimeMetrics {
}
}
}
pub fn get_navigation_start(&self) -> Option<f64> {
self.navigation_start
}
pub fn get_first_paint(&self) -> Option<f64> {
self.first_paint.get()
}
pub fn get_first_contentful_paint(&self) -> Option<f64> {
self.first_contentful_paint.get()
}
}

View file

@ -17,6 +17,7 @@ bench = false
compiletest_helper = {path = "../../tests/compiletest/helper"}
gfx_tests = {path = "../../tests/unit/gfx"}
layout_tests = {path = "../../tests/unit/layout"}
metrics_tests = {path = "../../tests/unit/metrics"}
net_tests = {path = "../../tests/unit/net"}
net_traits_tests = {path = "../../tests/unit/net_traits"}
plugin_compiletest = {path = "../../tests/compiletest/plugin"}

View file

@ -0,0 +1,21 @@
[package]
name = "metrics_tests"
version = "0.0.1"
authors = ["The Servo Project Developers"]
license = "MPL-2.0"
[lib]
name = "metrics_tests"
path = "lib.rs"
doctest = false
[dependencies]
euclid = "0.15"
gfx = {path = "../../../components/gfx"}
ipc-channel = "0.8"
metrics = {path = "../../../components/metrics"}
msg = {path = "../../../components/msg"}
net_traits = {path = "../../../components/net_traits"}
profile_traits = {path = "../../../components/profile_traits"}
style = {path = "../../../components/style"}
time = "0.1.12"

16
tests/unit/metrics/lib.rs Normal file
View file

@ -0,0 +1,16 @@
/* 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/. */
extern crate euclid;
extern crate gfx;
extern crate ipc_channel;
extern crate metrics;
extern crate msg;
extern crate net_traits;
extern crate profile_traits;
extern crate style;
extern crate time;
#[cfg(test)]
mod paint_time;

View file

@ -0,0 +1,100 @@
/* 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 euclid::Size2D;
use gfx::display_list::{BaseDisplayItem, WebRenderImageInfo};
use gfx::display_list::{DisplayItem, DisplayList, ImageDisplayItem};
use ipc_channel::ipc;
use metrics::{PaintTimeMetrics, ProfilerMetadataFactory};
use msg::constellation_msg::{PipelineId, PipelineIndex, PipelineNamespaceId};
use net_traits::image::base::PixelFormat;
use profile_traits::time::{ProfilerChan, TimerMetadata};
use style::computed_values::image_rendering;
use time;
struct DummyProfilerMetadataFactory {}
impl ProfilerMetadataFactory for DummyProfilerMetadataFactory {
fn new_metadata(&self) -> Option<TimerMetadata> {
None
}
}
#[test]
fn test_paint_metrics_construction() {
let (sender, _) = ipc::channel().unwrap();
let profiler_chan = ProfilerChan(sender);
let paint_time_metrics = PaintTimeMetrics::new(profiler_chan);
assert_eq!(paint_time_metrics.get_navigation_start(), None, "navigation start is None");
assert_eq!(paint_time_metrics.get_first_paint(), None, "first paint is None");
assert_eq!(paint_time_metrics.get_first_contentful_paint(), None, "first contentful paint is None");
}
#[test]
fn test_first_paint_setter() {
let (sender, _) = ipc::channel().unwrap();
let profiler_chan = ProfilerChan(sender);
let mut paint_time_metrics = PaintTimeMetrics::new(profiler_chan);
let dummy_profiler_metadata_factory = DummyProfilerMetadataFactory {};
// Should not set any metric until navigation start is set.
paint_time_metrics.maybe_set_first_paint(&dummy_profiler_metadata_factory);
assert_eq!(paint_time_metrics.get_first_paint(), None, "first paint is None");
let navigation_start = time::precise_time_ns() as f64;
paint_time_metrics.set_navigation_start(navigation_start);
assert_eq!(paint_time_metrics.get_navigation_start().unwrap(),
navigation_start, "navigation start is set");
paint_time_metrics.maybe_set_first_paint(&dummy_profiler_metadata_factory);
assert!(paint_time_metrics.get_first_paint().is_some(), "first paint is set");
assert_eq!(paint_time_metrics.get_first_contentful_paint(), None, "first contentful paint is None");
}
#[test]
fn test_first_contentful_paint_setter() {
let (sender, _) = ipc::channel().unwrap();
let profiler_chan = ProfilerChan(sender);
let mut paint_time_metrics = PaintTimeMetrics::new(profiler_chan);
let dummy_profiler_metadata_factory = DummyProfilerMetadataFactory {};
let empty_display_list = DisplayList {
list: Vec::new()
};
// Should not set any metric until navigation start is set.
paint_time_metrics.maybe_set_first_contentful_paint(&dummy_profiler_metadata_factory,
&empty_display_list);
assert_eq!(paint_time_metrics.get_first_contentful_paint(), None, "first contentful paint is None");
// Should not set first contentful paint if no appropriate display item is present.
let navigation_start = time::precise_time_ns() as f64;
paint_time_metrics.set_navigation_start(navigation_start);
paint_time_metrics.maybe_set_first_contentful_paint(&dummy_profiler_metadata_factory,
&empty_display_list);
assert_eq!(paint_time_metrics.get_first_contentful_paint(), None, "first contentful paint is None");
let pipeline_id = PipelineId {
namespace_id: PipelineNamespaceId(1),
index: PipelineIndex(1),
};
let image = DisplayItem::Image(Box::new(ImageDisplayItem {
base: BaseDisplayItem::empty(pipeline_id),
webrender_image: WebRenderImageInfo {
width: 1,
height: 1,
format: PixelFormat::RGB8,
key: None,
},
image_data: None,
stretch_size: Size2D::zero(),
tile_spacing: Size2D::zero(),
image_rendering: image_rendering::T::auto,
}));
let display_list = DisplayList {
list: vec![image]
};
paint_time_metrics.maybe_set_first_contentful_paint(&dummy_profiler_metadata_factory,
&display_list);
assert!(paint_time_metrics.get_first_contentful_paint().is_some(), "first contentful paint is set");
assert_eq!(paint_time_metrics.get_first_paint(), None, "first paint is None");
}