diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-11-20 12:00:05 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-20 12:00:05 -0500 |
commit | 5da10694912fa43b673f74445f4f249eaf46b451 (patch) | |
tree | f1a7ef3496871d67907734dc10c2cc9df31f27cf /components/script/dom/xmlhttprequest.rs | |
parent | 3fe83f1d06a50969b2fa731a050b35abdc5520d7 (diff) | |
parent | 26007fddd3f8aabfe026f06de64207d31edf5318 (diff) | |
download | servo-5da10694912fa43b673f74445f4f249eaf46b451.tar.gz servo-5da10694912fa43b673f74445f4f249eaf46b451.zip |
Auto merge of #20459 - avadacatavra:time-origin, r=avadacatavra
Updating performance implementation and putting more measurements in
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20459)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/xmlhttprequest.rs')
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 3e1644536ab..18628f27f70 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -28,6 +28,7 @@ use crate::dom::globalscope::GlobalScope; use crate::dom::headers::is_forbidden_header_name; use crate::dom::htmlformelement::{encode_multipart_form_data, generate_boundary}; use crate::dom::node::Node; +use crate::dom::performanceresourcetiming::InitiatorType; use crate::dom::progressevent::ProgressEvent; use crate::dom::servoparser::ServoParser; use crate::dom::urlsearchparams::URLSearchParams; @@ -36,7 +37,7 @@ use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget; use crate::dom::xmlhttprequestupload::XMLHttpRequestUpload; use crate::fetch::FetchCanceller; -use crate::network_listener::{NetworkListener, PreInvoke}; +use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener}; use crate::task_source::networking::NetworkingTaskSource; use crate::task_source::TaskSourceName; use crate::timers::{OneshotTimerCallback, OneshotTimerHandle}; @@ -63,6 +64,7 @@ use net_traits::trim_http_whitespace; use net_traits::CoreResourceMsg::Fetch; use net_traits::{FetchChannels, FetchMetadata, FilteredMetadata}; use net_traits::{FetchResponseListener, NetworkError, ReferrerPolicy}; +use net_traits::{ResourceFetchTiming, ResourceTimingType}; use script_traits::DocumentActivity; use servo_atoms::Atom; use servo_url::ServoUrl; @@ -95,6 +97,7 @@ struct XHRContext { gen_id: GenerationId, buf: DomRefCell<Vec<u8>>, sync_status: DomRefCell<Option<ErrorResult>>, + resource_timing: ResourceFetchTiming, } #[derive(Clone)] @@ -257,13 +260,41 @@ impl XMLHttpRequest { .process_data_available(self.gen_id, self.buf.borrow().clone()); } - fn process_response_eof(&mut self, response: Result<(), NetworkError>) { + fn process_response_eof( + &mut self, + response: Result<ResourceFetchTiming, NetworkError>, + ) { let rv = self .xhr .root() - .process_response_complete(self.gen_id, response); + .process_response_complete(self.gen_id, response.map(|_| ())); *self.sync_status.borrow_mut() = Some(rv); } + + fn resource_timing_mut(&mut self) -> &mut ResourceFetchTiming { + &mut self.resource_timing + } + + fn resource_timing(&self) -> &ResourceFetchTiming { + &self.resource_timing + } + + fn submit_resource_timing(&mut self) { + network_listener::submit_timing(self) + } + } + + impl ResourceTimingListener for XHRContext { + fn resource_timing_information(&self) -> (InitiatorType, ServoUrl) { + ( + InitiatorType::XMLHttpRequest, + self.resource_timing_global().get_url().clone(), + ) + } + + fn resource_timing_global(&self) -> DomRoot<GlobalScope> { + self.xhr.root().global() + } } impl PreInvoke for XHRContext { @@ -1424,6 +1455,7 @@ impl XMLHttpRequest { gen_id: self.generation_id.get(), buf: DomRefCell::new(vec![]), sync_status: DomRefCell::new(None), + resource_timing: ResourceFetchTiming::new(ResourceTimingType::Resource), })); let (task_source, script_port) = if self.sync.get() { |