mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +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)",
|
"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]]
|
[[package]]
|
||||||
name = "mime"
|
name = "mime"
|
||||||
version = "0.2.4"
|
version = "0.2.4"
|
||||||
|
@ -2666,6 +2681,7 @@ dependencies = [
|
||||||
"layout_tests 0.0.1",
|
"layout_tests 0.0.1",
|
||||||
"libservo 0.0.1",
|
"libservo 0.0.1",
|
||||||
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"metrics_tests 0.0.1",
|
||||||
"net_tests 0.0.1",
|
"net_tests 0.0.1",
|
||||||
"net_traits_tests 0.0.1",
|
"net_traits_tests 0.0.1",
|
||||||
"plugin_compiletest 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"}
|
compiletest_helper = {path = "../../tests/compiletest/helper"}
|
||||||
gfx_tests = {path = "../../tests/unit/gfx"}
|
gfx_tests = {path = "../../tests/unit/gfx"}
|
||||||
layout_tests = {path = "../../tests/unit/layout"}
|
layout_tests = {path = "../../tests/unit/layout"}
|
||||||
|
metrics_tests = {path = "../../tests/unit/metrics"}
|
||||||
net_tests = {path = "../../tests/unit/net"}
|
net_tests = {path = "../../tests/unit/net"}
|
||||||
net_traits_tests = {path = "../../tests/unit/net_traits"}
|
net_traits_tests = {path = "../../tests/unit/net_traits"}
|
||||||
plugin_compiletest = {path = "../../tests/compiletest/plugin"}
|
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