mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
PWM tests
This commit is contained in:
parent
06b409ad60
commit
585d0e52af
6 changed files with 166 additions and 0 deletions
16
Cargo.lock
generated
16
Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
|
|
21
tests/unit/metrics/Cargo.toml
Normal file
21
tests/unit/metrics/Cargo.toml
Normal 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
16
tests/unit/metrics/lib.rs
Normal 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;
|
100
tests/unit/metrics/paint_time.rs
Normal file
100
tests/unit/metrics/paint_time.rs
Normal 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");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue