mirror of
https://github.com/servo/servo.git
synced 2026-05-01 07:14:51 +02:00
Page:
Meeting 2013 12 09
Pages
Adding a new WebIDL binding
Alternative Logo Proposals and Related Swag
Asynchronous WebAssembly compilation project
Austin Oxidation
Autogeneration of style structs
Basic SVG support project
Beginner's guide to rebasing and squashing
Benchmarking
Benchmarks
Bots
Browser Engine Research
Build Errors FAQ
Buildbot administration
Building for Android
Building for Magic Leap
Building for UWP
Building on ARM desktop Linux
Building
CI Services we use
CSS parse error reporting
CSSOM student project
Canvas rendering project
Cargo upgrade service project
Code rust concurrency
Code Review
Code of Conduct
Coding standards
Compiler upgrade recipes
Compositor Layer Design
Contributing
Control Servo using WebDriver
Creating and viewing WARC web archives in Servo
Creating new OpenSSL Windows binary distributions
Cross compiling from linux to mac
Crowbot
Css selector matching meeting 2013 07 19
DOM Design
DOM documentation
DOM missing pieces
Debugging JS web compat issues
Debugging and editing tools
Debugging
Design
Developer tools student project
Devtools CSS errors
Devtools plans
Devtools
Diagnosing SpiderMonkey JIT issues
Eric Atkinson visit 2013 09 10
Events and sundry
Expand HTTP request response monitoring
Fetch improvement project
Firefox Reality release notes
FirefoxReality build
Firewall setup for servo master1
Focus student project
Form validation student project
GSoC project brainstorming
Garbage collected DOM
Getting started with layout
GitHub Labels
Github & Critic PR handling 101
Github workflow
Glossary
Governance
Graphics toolkit integration
HTML parser improvement project
HTMLElement binding conversion
HTTP archive support project
HTTP library requirements
Hawaii Rooting
High priority content for layout
Highfive
HoloLens 2 test plan
Home
How to generate GStreamer binaries for CI
Image load conformance student project
Image maps project
Implement HTML charset parsing project
Implement ImageBitmap project
Implement missing WebAudio automation student project
Implement support for missing XMLHttpRequest APIs
Implement worker modules
Implementing a web standard (RGSoC)
Improve specification conformance of unicode bidi library
Incremental flow tree construction
Infrastructure
Integrate xml5ever
Intern project brainstorming
Intern projects
JS objects, wrappers, and cross origin concerns 2013 08 07
Layout 2020
Layout Overview
Layout resources
Layout revamp ideas
Leo meyerovich visit 2013 07 22
Linux sandboxing
London Oxidation
London Security
Meeting 2014 10 27
Meeting 2014 12 08
Meeting 2012 02 08
Meeting 2012 02 16
Meeting 2012 07 20
Meeting 2013 04 01
Meeting 2013 04 15
Meeting 2013 04 22
Meeting 2013 04 29
Meeting 2013 05 06
Meeting 2013 05 13
Meeting 2013 05 20
Meeting 2013 06 03
Meeting 2013 06 10
Meeting 2013 06 14
Meeting 2013 06 17
Meeting 2013 06 24
Meeting 2013 07 01
Meeting 2013 07 15
Meeting 2013 07 22
Meeting 2013 07 29
Meeting 2013 08 05
Meeting 2013 08 12
Meeting 2013 08 19
Meeting 2013 09 09
Meeting 2013 09 16
Meeting 2013 09 23
Meeting 2013 09 30
Meeting 2013 10 14
Meeting 2013 10 21
Meeting 2013 10 28
Meeting 2013 11 04
Meeting 2013 11 18
Meeting 2013 11 25
Meeting 2013 12 02
Meeting 2013 12 09
Meeting 2013 12 16
Meeting 2014 01 06
Meeting 2014 01 13
Meeting 2014 01 21
Meeting 2014 01 27
Meeting 2014 02 03
Meeting 2014 02 10
Meeting 2014 02 24
Meeting 2014 03 10
Meeting 2014 03 17
Meeting 2014 03 24
Meeting 2014 03 31
Meeting 2014 04 07
Meeting 2014 04 14
Meeting 2014 04 21
Meeting 2014 04 28
Meeting 2014 05 05
Meeting 2014 05 13
Meeting 2014 05 19
Meeting 2014 06 09
Meeting 2014 06 17
Meeting 2014 06 23
Meeting 2014 06 30
Meeting 2014 07 07
Meeting 2014 07 14
Meeting 2014 07 21
Meeting 2014 07 29
Meeting 2014 08 04
Meeting 2014 08 11
Meeting 2014 08 12
Meeting 2014 08 18
Meeting 2014 08 25
Meeting 2014 09 08
Meeting 2014 09 15
Meeting 2014 09 22
Meeting 2014 09 29
Meeting 2014 10 06
Meeting 2014 10 13
Meeting 2014 10 20
Meeting 2014 11 10
Meeting 2014 11 17
Meeting 2014 11 24
Meeting 2014 12 15
Meeting 2015 01 05
Meeting 2015 01 12
Meeting 2015 01 26
Meeting 2015 02 09
Meeting 2015 02 23
Meeting 2015 03 02
Meeting 2015 03 16
Meeting 2015 03 30
Meeting 2015 04 06
Meeting 2015 04 13
Meeting 2015 04 27
Meeting 2015 05 04
Meeting 2015 05 11
Meeting 2015 05 18
Meeting 2015 06 01
Meeting 2015 06 08
Meeting 2015 06 15
Meeting 2015 07 06
Meeting 2015 07 13
Meeting 2015 07 27
Meeting 2015 08 10
Meeting 2015 08 17
Meeting 2015 08 24
Meeting 2015 08 31
Meeting 2015 09 14
Meeting 2015 09 21
Meeting 2015 09 28
Meeting 2015 10 05
Meeting 2015 10 12
Meeting 2015 10 19
Meeting 2015 10 26
Meeting 2015 11 02
Meeting 2015 11 09
Meeting 2015 11 16
Meeting 2015 11 30
Meeting 2016 01 04
Meeting 2016 01 11
Meeting 2016 01 25
Meeting 2016 02 01
Meeting 2016 02 08
Meeting 2016 02 22
Meeting 2016 03 07
Meeting 2016 03 21
Meeting Devtools Servo 2
Meetings
Microdata project
Minutes Hackathon 2012 03 27
Missing DOM features project
More ServiceWorker support project
More developer tools student project
Mozlandia Automation
Mozlandia B2S
Mozlandia JS
Mozlandia Rust In Gecko
Mozlandia WPT
Mozlandia gfx
Mozlando Devtools Servo
Mozlando Oxidation
Mozlando SM Servo
Mozlando Servo Bluetooth
Mozlando Servo MagicDOM
Mozlando Servo SMStrings
Mutation observer project
Mutation testing project
NCSU student projects
Network security project
Off main thread HTML parsing project
Offscreen canvas improvements project
Offscreen canvas project
Orlando Oxidation 2018
Oxidation 2015 11 05
Persistent sessions student project
Preparing ARM libraries for CI
Priority of CSS properties
Priority of DOM implementation
Priority of dom bindings
Private browsing student project
Profiling
Project proposal deadlines
Prototype JS form controls student project
Prototype ways of splitting the script crate
Publishing a new ANGLE NuGet version
Publishing a new app store release
Push vs Pull for caching
Random web content project
Refactor GLES2 student project
Refactor bluetooth support student project
Remaining work
Removing push notifications from IRC hooks
Replace C libraries student project
Report new contributors project
Representation of computed style
Research
Reviewer
Roadmap
Running Web Platform Tests on Servo
Rust HTML parser
Rust SpiderMonkey debugger API
Rust cssparser code walk 2013 08 02
SaltStack Administration
San Francisco Oxidation
Servo Benchmarking Report (December 2024)
Servo Benchmarking Report (November 2024)
Servo Benchmarking Report (October 2024)
Servo Layout Engines Report
Servo and SpiderMonkey Report
Servo for Gecko Developers
Specification Links
SpiderMonkey related tasks
SpiderMonkey infodump
SpiderMonkey upgrade details
Storage student project
Streaming webassembly student project
Strings
Student project brainstorm
Student projects
Styling overview
Stylo hacking guide
Summer of Code 2014: Implement XMLHttpRequest
Summer of Code 2016: Fetch API
Summer of Code 2016: File support
Summer of Code 2016: ServiceWorker infrastructure
Summer of Code projects
Summit meeting 2013 09 09
Support WebDriver based tests project
Syncing web platform tests (WPT)
TaskCluster
Testing
Tools
Tracking intermittent failures over time project
Transcription Notes from Servo Architecture talk in Suwon
Transcription notes from rust patterns talk in suwon
Transcription parallelism
Transcription rust concurrency
Transcription rust runtime
Transription layout and acid2
Trinity College Dublin student projects
UPenn student projects
Updating the Rust compiler used by Servo
Upgrading non taskcluster linux CI machines
Upgrading the UWP gstreamer binaries
Upgrading the windows LLVM binaries
Upgrading wptrunner
Using DOM types
Using Rust Spidermonkey Prototype
Using WebWorker Prototype
Version 0.1
Videos and presentations
WebAudio JS interfaces student project
WebAudio nodes student project
WebCompatBug
WebSocket student project
Webdriver student project
Webdriver tests student project
Webrender Overview
Whistler 2019 notes
Whistler Bugzilla
Whistler FFOS
Whistler GFX
Whistler Houdini1
Whistler Houdini2
Whistler Necko
Whistler Oxidation 2019
Work items for new contributors
Workweek COW DOM
Workweek alt js
Workweek android arm
Workweek boot 2 servo
Workweek compiler lints
Workweek displaylist
Workweek dogfooding
Workweek encoding
Workweek generated content
Workweek governance
Workweek graphics stack
Workweek graphics toolkit
Workweek incremental layout
Workweek js bindings status
Workweek layers
Workweek layers2
Workweek pixels
Workweek rasterization
Workweek reftests
Workweek roadmap
Workweek script crate
Workweek security
Workweek string interning
Workweek tables
Workweek writing modes
XML parser student project
infra triage notes
jQuery status
webxr.today support
No results
6
Meeting 2013 12 09
kud1ing edited this page 2013-12-13 07:15:13 -08:00
Servo Meeting 2013-12-09
Agenda
- Introducing Isabelle Carter (intern, working on position:fixed)
- Workweek on 1/20 (https://etherpad.mozilla.org/Servo-workweek-2014-01 )
- agenda ideas
- who
- Rust Arm port. Really need Android make check not to break Android
- Rust pkg manager. Removal plan
- Servo Rust version update
- Android port pr. requirements from mozilla?
- Testing strategy. More conservative master branch?
- Removing @ from flowtree.
- review queue
Attending
azita, pcwalton, brson, dherman, jack, larsberg, jdm, kmc
Isabelle Carter introduction
- jack: Isabelle carter will be adding position: fixed. She's here from the GNOME Outreach Program for Women.
- larsberg: She will be here until March 10th
Workweek
- jack: Simon and jdm will be in SF on January 20th. Since most of the Servo team is already there, we will have a workweek then. A couple of you from Samsung are welcome to come, particularly to work on CSS stuff with us and Simon, if you are interested.
- ryan: We will see what we can do.
- jack: We have an etherpad for these ideas (above) with the wrong year (because of lars). Since Simon is the catalyst, we were thinking of doing CSS-related work. Generated content and tables are things we could get started on. It might also be nice to look at the HTML parser and maybe string interning. Those are all related to things that he works on and is active on. Anything else? Patrick on incr. reflow?
- kmc: Layerd display lists since we need them for Acid2. Also intersects with position: fixed, etc.
- pcwalton: Yes, we need layers in general for many features.
- jack: We are also going to invite ibnc, maybe daniel glazman, ms2ger can't make it, possibly jgraham. Is there anyone else we were thinking of inviting? We will discuss it next week as well with Simon. We will keep the workweek page updated, as we did for the one in Korea.
Rust ARM port
- ryanc: We really need the make check system so that future changes don't break our ARM port.
- pcwalton: brson? I think we need it for rust
- brson: We are adding android automation on rust. I spent several days working on it on EC2, but it did not work. I will dedicate hardware to it here and will be working on it again starting tomorrow. Should have it sometime before the new year.
- ryanc: We need to do our internal demo to executives frequently, like every quarter. Last demo, we had to redo all the android port for the demo, so we couldn't concentrate on servo and other stuff. In the future, we do not want to redo the things we did over and over. We'd like the system not to break our Android port. Otherwise, we are wasting our time redoing all of the things. Can we really ask to have Android building checking built in?
- brson: This is also servo on android.
- pcwalton: WE need it working for Rust first, right? I think we need it both for Rust and Servo. Jack, what's the servo status?
- jack: It's not clear how we will run tests on Android. First, we should get the android build working again. It's probably blocked on both my build stuff and a rust upgrade to at least compile as part of the build. That we can do again. BUild libservo.dylib so we at least don't break the code. Someone will need to make a harness that runs the android code. I am hoping that Samsung can work on that.
- brson: We have one on Rust that works and might be able to copy it to servo.
- jack: Maybe the null compositor and software rendering. If it's not going to work on EC2, then it will take more work for us.
- brson: It'll just take more work on EC2 and I was going to punt.
- jack: I can look at it as well. Maybe share some resources?
- brson: Possibly, I don't know how the VPC works. Your is set up in that, unlike ours.
- jack: I need to talk to bhearsum about how to set up a mozharness locally so I can test expanding our build changes more easily. The plan is to fix our build, get android building again (immediately, by end of year). The automated tests for android may take longer. Samsung should not have to be redoing work.
Rustpkg manager
- jack: It can't build all of the packages currently. And I don't think it ever got support for cross-compiling. I have a PR open in Rust (https://github.com/mozilla/rust/pull/10593 ). It makes the crate hashes stable, so that external tools (like cmake or make or tup) can make more reliable builds. We will set it up to make our builds more parallel and cleaner for cross-compiling to android. That PR should hopefully get updated tonight and reviewed/landed tomorrow. Once it does, I'll work on the Rust upgrade and build system.
- brson: Which build system?
- jack: cmake is the plan for now.
- pcwalton: Why that over tup?
- jack: A couple are already familiar with cmake. Cmake includes configuring. And it's a known-working thing. We'd miss tup's auto-parallel build issue detection. Not a huge problem because cmake, by default, will use the new rust dependency magic I'm adding and it already does that for C.
- lars: Tup also hard to get running on Windows and seemed to have some bugs when we were trying to use it.
- jack: tup and cmake were about the same speed - way, way faster than our current system. Huge improvement no matter which we use. We will remove rustpkg, the makefiles, and configure scripts entirely. The individual submodules will still be buildable with rustpkg (there's nothing special needed for that).
Rust version update
- ryanc: Related to our android port
- jack: To do the build work, I need this Rust PR, so we'll move to the current master once this patch lands. The biggest blockers are linked task failure need to be replaced, all uses of
doneed to be removed, all stack closures change signatures, owned closures -> procds - kmc: I'm working on linked tasked failure and have a design that is pretty much what we want. Instead of task::try, there's a port you can get that tells you failure and is much cleaner.
- jack: The other conversions I've done so far have not been too bad, mostly mechanical. Hopefully it will be quick.
- kmc: That will also unblock intrusive flow list work which will improve layout performance significantly.
Requirements from Mozilla for android port
- jack: for rust or servo?
- ryanc: Almost ready for another PR for our android port. Do you have any requirements?
- jack: Nothing special. One thing is that we're not sure how to build a test harness to test android. That can come later, though, we should not block this.
- pcwalton: But the sooner we get a test harness, the less likely we are to break the Android port.
- jack: Hopefully the Android changes weren't terrible - we tried to be careful.
Demo this month
- ryanc: Even master was not passing acid1 and breaking some test cases, which hugely affected our demo preparation. If you have some test code, we could use a stable branch.
- jack: Yes, we need an acid1 reference in the reftest. And need to get ref tests running as part of make check because it was not running on one of the platforms. We should be able to do that. Other things? Oh, jdm has a bot that lets us know if the PR modifies unsafe code or layout code without reftests.
- pcwalton: Hard to reftest acid1, but maybe a content test.
- jack: I was just going to delete all the text from the boxes, create a PNG of the boxes, etc.
- pcwalton: I'll do that. I noticed that regression and backed it out as soon as I noticed it, but it had been for a day or two.
- jack: jdm has been pushing on us to add content tests for linux, and we should add ref tests at teh same time
- kmc: Anything known to be broken with content tests on linux?
- jack: Race condition in std:;process. It was crashing before
wait_for_pid, so we need to see if that still happens, if it's a rust bug or our bug, etc. It never worked, but the failure started showing up when we started checking the return code. Also, servo crashing at shutdown was preventing us from being able to do it. - kmc: I think I turned on checking the return code for content tests.
- jack: Should do it for reftests, too.
- kmc: Need not just a null compositor, but something more for reftests.
- jack: I volunteer lars!
Remove @ from flow tree
- ryanc: Working on that. Removed all of them from the flow tree. So, one thing I noticed is that the current version when you build a display list, it has a managed pointer to the boxes in the flow tree. When I was converting managed boxes to owned, I removed the connection between the display list and flow tree. This is temporary. Design decision: When we build the display list, do we really need a pointer to the box in the flow tree, because we don't use it, it just needs the coordinates.
- pcwalton: I'm working on removing it right now. I do not think we need the connection at all. DisplayList does not need a pointer to the box. Hopefully today or tomorrow I will have a PR removing it.
- jack: Need index?
- pcwalton: No, just a pointer to the node it came from. Because from the display list, you need to go back to the node for hit testing or getBoundingClientRect, both of which require nodes, not nodes. So you don't need pointers to a flow, box, etc.
- jack: how will this interact with GC? Now we have two new threads that have pointers to Node...
- pcwalton: Ick. That's a problem. Not a problem if we didn't keep display lists around. We could rebuild them every time.
- jack: We would send the coordinates to script, script asks layout to rebuild the display list, and find the node from that? It could pretend to build the display list, though, right?
- pcwalton: No, every display list item contains the address of a node inside it. But, the GC can move the node and invalidate the pointer. In practice it won't happen because we ensure that you rebuild the display list so that it never contains stale pointers (invalidation ensures no display items point to dead nodes), but it's scary that we rely on invalidation.
- jack: I don't get how this works with the GC. JS GC runs while layout is asleep, and...
- pcwalton: Yes, that can happen, but not while layout is running. So, if we rebuild the displaylist every time, then we know there will be no stale pointers to nodes in the display list.
- jack: Is the current JS GC moving?
- pcwalton: No, but we shouldn't make decisions that prevent it.
- jack: Can we enable moving GC in the current spidermonkey?
- pcwalton: No. We need ggc (generational garbage collection).
- jack: Would be nice to tests. This is scary.
- kmc: We'll have COW DOM and then JS GC can run during layout, right?
- pcwalton: Sure. Potential workaround: it's safe to compare node pointers for equality (getboundingclientrect & hit testing) against the node passed in. Even if it's stale, the worst case is that we return the wrong value.
- kmc: What about reuse problems with the pointer?
- pcwalton: Still, the worst case is getting the wrong response. Not a memory safety/security problem. There is a problem with hit testing. With it, there's no way around rebuilding the display list. But that's usually a mouse click, just a couple of milliseconds. As long as it only takes a couple of milliseconds, we can just rebuild the DisplayList for hit testing and then we don't have to worry.
- kmc: Idea is that on mouse click, we already have a flow tree, so just rebuild the display list.
- pcwalton: Yes. And mouse clicks don't happen more than once per frame, so we should be fine as long as we don't take > 16ms to handle (ed note: to stay at 60fps). With that, we can go back to storing AbstractNode in the DisplayList.
- jack: Question about the moving collector. What happens when it moves it? Will it use the tracing info to update them all?
- pcwalton: Anything AbstractNode is going to be dangerous. We will not be able to copy AbstractNode because of the moving collector. The more we write, the more trouble we will be in.
- jack: How does that affect your new design, jdm?
- pcwalton: AbstractNode<T> is copyable, but that's incompatible with exact rooting. It needs to be Rooted<JSManaged<T>>. To create another, you'd need to do
.root()or something. To enforce that in Rust, you have to make it noncopyable.impl Drop for JSManaged. - jack: Or the stupid zero-length field?
- pcwalton: Either.
- jack: Seems goofy to implement Drop just to get that behavior.
- pcwalton: Will probably have an attribute.
- jack: Or niko wants everything non-copyable.
- pcwalton: Attribute is the most sensible thing these days. The important thing is that we have to start moving towards AbstractNode being non-copyable. Everything in future-design should be compatible with moving GC.
- jack: Somebody should try making it non-copyable and see what breaks...
- pcwalton: Probably in the DOM bindings generatore?
- jdm: We don't use AbstractNode there.
- pcwalton: We should do that check sooner rather than later. Don't want to get too far down the road (like Blink) and be stuck with a conservative global GC.
- jack: This makes me think we need to reprioritize the SpiderMonkey work.
- pcwalton: We can't be fully safe with it in the Rust of today, but we know what we can do.
- jack: Because of rooting?
- pcwalton: Yes. But we have to fix AbstractNode first.
- jack: And some way to compile & inline C++.
- pcwalton: acrichton has been doing LTO in Rust that should dovetail nicely with it.
- jack: Short of the matter is, with new Flow tree changes, removing @ should be easier.
- pcwalton: I will get that in ASAP. Then we can merge the parallel layout stuff. I'd kinda like to wait on the Rust upgrade because it contains the Deque (Chase-Lev), so we don't have to copy/past it. And we can remove utils/slot.rs because it's been upstreamed.
- jack: RefCell, Cell, Slot, etc. need a blog post.
- pcwalton: They're the replacement for @mut
- jack: Slot vs. Cell? Why RefCell instead of mut? These are not obvious/clear.
- pcwalton: It's still an experiment.
- jack: Need to get the info out there.
- pcwalton: Cell is being removed/replaced. I'll blog about it all. Or maybe Niko will.
Review queue
- jack: Get on those PRs!
- jdm: Rotted ones from pcwalton
- jack: I did some this morning, will do more tomorrow. Some want input from pcwalton, simonsapin, jdm...
- pcwalton: I'll make a pass.
FontContext
- jack: PR I approved that had @mut FontContext in the LayoutContext changed to a method, so now it takes &mut self. So @mut FontContext was not parallelizable, but &mut self isn't either...
- pcwalton: Fine if you use MutexArc. Not necessarily parallelizable, but safe.
- jack: Maybe each thread will need a FontContext.
- pcwalton: Fonts are a bit of a hack, but not racy now, but we may have lots of contention on them. That MutexArc might be contented.
- jack: Should be totally read-only. Maybe a background process to add new fonts w/ messages, etc, and all the font structs can be immutable.