Partial #8356. Currently this doesn't build because of a lint denying me to user unsafe code, which unfortunately the select! macro falls under. Not sure what to do there.
Source-Repo: https://github.com/servo/servo
Source-Revision: 231bf425f26a1c2aa993e3adfed1e3cfae0da027
I searched for some similar cases like in #8384 and tried to refactor them as well.
@frewsxcv Care to review?
Source-Repo: https://github.com/servo/servo
Source-Revision: aa62cc74d35b4535bb52972dc21a2deccadb6906
This is a minor refactoring of the touch tracking in compositor, to simplify the code and prepare for more gesture handling (like pinch to zoom). r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: 97791dd317893c3b1c203c5d248846ff4fd9daba
…s to a new one for the first time. Resolves#7865.
Source-Repo: https://github.com/servo/servo
Source-Revision: 4067960ba5d309ec6c4c6aef6e7aa231aca0e5d5
I'm just going to keep throwing stuff at try, because running directly on the builders isn't yielding results.
Source-Repo: https://github.com/servo/servo
Source-Revision: c78da15abbffd223290300b6b985d65cd6f03d08
When a layer containing an iframe changes, we also need to resize the
root layer of the subpage. This ensures that content from the child
layer tree is masked to the new size.
Fixes#8301.
Source-Repo: https://github.com/servo/servo
Source-Revision: dc159d055c5e4931648a7046492ec5c63ab922aa
Instead of just converting the mouse into a single "touch" input, Servo can now listen for multi-touch events from Glutin, maintain a list of active touch points, and dispatch events for all of them.
r? @glennw (for the compositor changes) and @jdm (for the DOM changes)
Source-Repo: https://github.com/servo/servo
Source-Revision: 3fdaa6e3f32f6996c416e75119177b98d404adb2
I'm not completely sure the race condition outlined in this patch is
actually the race condition causing failures... but it's a possibility.
(I plan to run this through try a couple of times to see if it actually helps.)
Source-Repo: https://github.com/servo/servo
Source-Revision: cff9a5456915403cc9559b14f1353adf3f8504f6
This implements just enough of [Touch Events](http://w3c.github.io/touch-events/) to enable scrolling on Android without regressing basic single-touch interaction like clicking on links.
Dragging a page will scroll it, unless the page calls `preventDefault` on the "touchstart" event.
Does **not** yet support pinch zooming or other multi-touch gestures or events.
Includes a `-Z convert-mouse-to-touch` command line flag for testing on non-touch platforms. This is also enabled by default on Android because Glutin currently translates touch input to mouse events on Android.
Source-Repo: https://github.com/servo/servo
Source-Revision: dcd207f9bf15c9ecf5d043385ba93277e69201f6
This is an rough solution to the issue described in #3396. XHRs still do their own thing and an overall clean up is in order. Before I do that, though, I'd really like someone to sign off on the overall idea.
There's one major difference to what jdm layed out #3396: The timers remain with the window/worker and only the earliest expiring one is coordinated with the dedicated timer thread.
That means both the timer thread and the window/worker have to keep track of which timer expires next, which feels a bit wonky. However, the upshot is that there's no need for communication with the timer thread when a pipeline is frozen, thawed or dropped.
Most relvant parts are
- the [`TimerScheduler`](6f5f661958 (diff-74137a6f50ab38e7a1e4d16920a66ce7R73)), which is the new per-constellation timer task and
- the [`ActiveTimers`](6f5f661958 (diff-86707d952414a2860b78bcf6c1db8e2eR34)) which is what's left on the window/worker side.
Source-Repo: https://github.com/servo/servo
Source-Revision: 2de5407cdabef67ed03b2ad4edf4a22541d77875
Instead of always promoting iframes to StackingContexts, integrate them
into the display list. This prevents stacking bugs when
non-stacking-context elements should be drawn on top of iframes.
To accomplish this, we add another step to ordering layer creation,
where LayeredItems in the DisplayList are added to layers described by
the LayerInfo structures collected at the end of the DisplayList.
Unlayered items that follow these layered items are added to
synthesized layers.
Another result of this change is that iframe layers can be positioned
directly at the location of the iframe fragment, eliminating the need
for the SubpageLayerInfo struct entirely.
Iframes are the first type of content treated this way, but this change
opens up the possibility to properly order canvas and all other layered
content that does not create a stacking context.
Source-Repo: https://github.com/servo/servo
Source-Revision: 11d23a41b31c2b2846d1e9c6b40e87ba7e2a095f
Fixes#7867 (and probably several other iframe bugs).
When collecting layers for children of a pipeline, pass through the current
subpage pipeline recursively. This prevents descendant layers (such as scroll
layers) from being collected and re-created on the subsequent paint.
Source-Repo: https://github.com/servo/servo
Source-Revision: 3f4ce134198e398fa94d1e754364b220037e6b49
This allows me to do stuff like this.

Those are two compositors rendered on the same OpenGL context, I need this so I can split windows and render them without getting mad with textures and framebuffers, it will also allow me to render the proper parts of the chrome as different web pages without involving dozens of framebuffers and textures.
If I recall correctly I did talk to @glennw about this on IRC some time ago.
This pull request requires https://github.com/servo/gleam/pull/39 to be merged first tho.
Source-Repo: https://github.com/servo/servo
Source-Revision: 8db8a86ab1e943b5102a05d6d31800579fdb7875
Unify all compositor shutdown code paths into two methods, one which
starts the shutdown and the other that finishes it. This simplifies the
way the compositor shuts down and prevents "leaking" pixmaps when
exiting in uncommon ways.
Source-Repo: https://github.com/servo/servo
Source-Revision: 26dd1233103eb75c2e94fcc2ba34c18fa4432afc
This makes use of the new functionality that allows iframes to generate their own pipeline IDs in order to remove any knowledge of subpage ids from the compositor.
(This is the first of several commits removing subpage from parts of servo).
Source-Repo: https://github.com/servo/servo
Source-Revision: 1d617f332edd0036ca4cbc3890f1f44f57597906
The structure of this function was confusing, so move some parts out into the
caller where they seem like a more natural fit and add documentation of the
functions
Source-Repo: https://github.com/servo/servo
Source-Revision: e7f73fdfd822fc2f0d3c239a428c739232bdfd12
The previous code would skip calling clear_all_tiles(), which led to a
panic in rust-layers. ("You should have disposed of the pixmap properly
with destroy()! This pixmap will leak!")
Ran into this messing around with pdf.js; no minimized testcase.
Maybe related to #7895.
r? @pcwalton
Source-Repo: https://github.com/servo/servo
Source-Revision: 217c7da41304142ffaf7c02a3eb888b0f150c59d
This doesn't change any functionality, but it's the first step towards removing SubpageId.
Adding this change now will allow us to gradually change over code referencing subpage id rather than in one massive PR.
Introduces a namespace for pipeline ID generation - there is a namespace for the constellation thread, and one per script thread.
Source-Repo: https://github.com/servo/servo
Source-Revision: 098bdb5f22500a6e856b085a1140090f63ef8645
This may mitigate race conditions like #7730. r? @mrobinson
Source-Repo: https://github.com/servo/servo
Source-Revision: 9b37de965c9e7b2b906685e2f0ee915f1c901fb5
The old code that attempted to do this during layout wasn't able to work
for multiple reasons: it couldn't know where the iframe was going to be
on the page (because of nested iframes), and at the time it was building
the display list for a fragment it couldn't know where that fragment was
going to be in page coordinates.
This patch rewrites that code so that only the size of an iframe is
determined during layout, and the position is determined by the
compositor. Layout layerizes iframes and marks the iframe layers with
the appropriate subpage ID so that the compositor can place them
correctly.
Closes#7377.
Source-Repo: https://github.com/servo/servo
Source-Revision: a0cb657fe80859dd8862361631268479d1045432
This is a direct extract from my abandoned PR for a lint (#7546), along with some rather clumsy modifications (only on `components/script/dom/mod.rs` and `components/style/lib.rs`), because I had to sort some of the files again to make peace with tidy, which hasn't been educated about sorting yet!
Source-Repo: https://github.com/servo/servo
Source-Revision: a7208869f2903e36f9b2f540b55b50283d7df466
Changed to_string calls to to_owned calls
where was a need.
Source-Repo: https://github.com/servo/servo
Source-Revision: d588ce8d8503bf0b340abfb13e2bd6a228cab900
Currently these both clamp to 100% in one direction and are unbounded in the other direction. This sets default zoom constraints of 10% to 800%. r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: eae3eaf97474febb2c50a7a4d392594cbc8d2da2
Thanks to @Jinwoo-Song for the original commit, which I just rebased and cleaned up. Fixes#6237.
Source-Repo: https://github.com/servo/servo
Source-Revision: 6a12f00d6d392651bae10365b4c806f36d704b21
Hi guys,
I just gave a big pass of RFC-0344 as per issue #6224 .
Pretty much renamed all the get_* fn that were used to fetch values.
I hope I didn't rename too much.
As said in the issue discussion, I didn't touch at the scripts folder so we keep the unsafe ones pretty explicit.
I've ran the whole pass of test, everything seems to be still working right :).
Please give feedback on this PR.
Thanks for looking into it.
Source-Repo: https://github.com/servo/servo
Source-Revision: b05f4aa3aa3085e65cb75433ae37bf272216d033
Before on at least Linux the following failure is hard to root cause:
[~/servo] ./target/debug/servo -o tmp.png ./tests/html/lipsum.html
thread '<main>' panicked at 'assertion failed: res.is_ok()', .../compositor.rs:1508
thread '<main>' panicked at 'You should have disposed of the
pixmap...', .../rust-layers/.../surface.rs:166
Now:
[~/servo] ./target/debug/servo -o tmp.png ./tests/html/lipsum.html
thread '<main>' panicked at 'Error writing png: Permission
denied (os error 13)', .../compositor.rs:1508
thread '<main>' panicked at 'You should have disposed of the pixmap
properly with destroy()! This pixmap will leak!', .../rust-layers/.../surface.rs:166
r? @mbrubeck
Source-Repo: https://github.com/servo/servo
Source-Revision: eb556c1ce6ed52e2a71743a088860ac0e0df3e89
The script crate had its own built-in profiling which was basically doing the same thing as the profile crate. This wraps the internal profiling around the main profile functionality. Script-related tasks are now added to the ProfilerCategory enum.
Source-Repo: https://github.com/servo/servo
Source-Revision: ca36779a7e8298918b21ae243a43a71b1520119b