mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
Page:
Meeting 2014 05 13
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
Clone
1
Meeting 2014 05 13
Josh Matthews edited this page 2014-05-12 21:08:33 -07:00
Servo Meeting 2014-05-12
Reminder
Please update your status at: http://benjamin.smedbergs.us/weekly-updates.fcgi/
Agenda
- work week update (jack)
- Rust upgrade status (larsberg)
- 32bit build
- Tradeoffs for HTML parser API design (kmc)
- blog post ideas
Workweek
- jack: Staying at the Benson hotel. Also will have a breakout room at the Portland office. I will send a draft agenda later this week for what we will work on while we are there.
- azita: Hotel walking distance to office?
- jack: Yes. It's walking distance to everything interesting in Portland.
Rust upgrade
- lars: not much to say; we've had a lot of help from the community. ms2ger and manish have done a lot of the work getting it working on linux. most of the changes this time were fairly mechanical. that will bring us up to two days ago. may 10th.
- azita: it's a lot of effort though right? you said it took a person full time?
- lars: about a half a person continuously give or take.
- jack: They're getting better...
- lars: we're getting better at asking questions. alex warned me a few things were going to be broken. we're getting better about communicating with rust community.
- brson: does the breaking changes log help now?
- lars: not so much on this last one, but we expect it to help a ton in the next one. We'll let you know how helpful it is (or isn't).
32 bit build
- jack: I have everything in for the 32-bit build for spidermonkey and Servo. Small changes, but the resulting binary is encountering a bug in the Rust ABI with 32-bit and C union types. We had a similar problem the first time we ported to Android. We worked around it there, but that workaround does not work in Linux. I have example code in C and Rust along with some IR to show what is going wrong. I need to file a Rust bug and bring it up in tomorrow's Rust meeting. I'm not sure what priority this should be. On the one hand, we have no high-priority 32-bit targets. We mainly wanted to fix the Android build's use of 32-bit SpiderMonkey. We also wanted the rr team to be able to use it against Servo, but rr is 32-bit only. Manish also has 32-bit machines, so it would help him greatly.
- brson: If you have a small test case, I bet we can find somebody to help.
- jack: It's not super-minimal, but I have it down to a single submodule so hopefully it is at least easy to reproduce.
- brson: Alex believes we hvae a 32-bit x86 codegen bug. We are seeing intermittent crashes on 32-bit x86...
- jack: Maybe a different manifestation of the same bug. The IR on 32-bit linux with the C-compiled thing calling into spidermonkey is a function call with byval, but the Rust one does not. There are other small differences, too, but I don't know if they matter...
HTML parser tradeoffs
- kmc: Trying to find the HTML Tree Builder. It'll have a callback and not know about your dom. It needs a handle on your nodes (for the parser's internal state). Trying to make the parser usable outside of Servo, but not make it overly complicated or unsafe for the interaction between the parser and JS managed DOM. I was hoping to talk about priorities there. My view is that a little bit of unsafe code to interact with the JS managed DOM is ok, as long as we have a good reason why the things are safe. I would really like to make this project useful to other Rust projects.
- jack: The unsafe code is only required for creating JS values? If I use the HTML parser with a different data structure, would I be able to do that without unsafe code?
- kmc: The design is straightforward for a refcounted DOM. You can just clone them and pass them along. I will probably make a simple static parse tree based on refcounting or another trick. If you are not interested in using your own DOM type, the library will provide that.
- jack: How much unsafe code for JS?
- kmc: Still working on it. Two alternatives in the e-mail I sent. We can root every node when we create it and then pass around root objects, tearing it down at the end (simplest). Alternative is JS and rooting the parser itself, but will be much more complicated because the interface needs to know about JS, JSRef, and Temporary. I would rather not go that route and just have all the nodes rooted for the lifetime of the parser, only need unsafe code to make the lifetimes work out.
- jack: I suggest if you put your example together with the refcounted structure and send it to jdm to have him work it for JS, then maybe he'll have some recommendations.
- kmc: JS is also changing in the future (where the interior mutability is going). Not sure how it'd work.
- jack: If we get usability outside of Servo with a little bit of unsafety, that's great. Today's is, I think, not only very unsafe but also totally unsound.
- kmc: We also want to support on-thread and off-thread parsing, but I don't think that has ramifications in the API. Just build up the pending work and pass it to the script task.
- jack: Is Manish's work on XHR blocked on this parser?
- kmc: Why would it?
- jack: Because of XMLResponse?
- kmc: That needs an XML parser...
- jack: It's HTML only?
- kmc: Yes, I'm implementing the HTML5 syntax spec. Not sure for XHTML or XML in XHR. Probably a pretty separate parser. Despite the similarity, the HTML parser is much more complicated.
- pcwalton: Webkit?
- kmc: Gecko has a separate XML and HTML parser....
- jack: Probably libxml, since it has xpat build in.
- kmc: Someone will need XML in Rust soon enough. hopefully that will come along and we can just use it.
- jack: If we need to make an XML parser, hopefully at least the design would be transferable.
- kmc: The HTML parser is designed around the edge cases, so maybe not transferred to XML. I also think XHR does not often return XML.
Blog post ideas
- jack: In a meeting with andreas, he'd like some more Mozilla Research-related blog posts. We should think about some stuff in Servo. Just wanted to bring it up in case anybody had ideas for stuff we should talk about and put on the research blog. Was thinking about the stuff comparing the parallelizability of foxnews, cnn, etc. If we're not ready to share info about gains we have gotten against other browsers, maybe just about the web in general. We'd like to share stuff for a more general audience.
- pcwalton: That's not just good for external usage, those are numbers that we want to get anyway. We need to do some work in Servo to not crash on those pages, but I think that kind of study is not only great for PR (it will likely look good for us, based on our early numbers), but also it's just something we need to be doing as a group. Need to be more data-driven.
- jack: Good for the linuxcon talk?
- larsberg: Yes, though that is focusing on Mike's work on embedding.
- kmc: Also could talk about how we integrate Rust's memory models with JavaScript. That is a hard technical problem, but could be very widely applicable.
- jack: Yes, just talking about what Firefox does and what Webkit does and what we do, it'll help explain how we're trying to make memory leaks go away. Could also mention the oilpan work that google is trying to land.
- kmc: Probably some other use cases outside of Servo, for how you make Rust work with an external memory system. Maybe drop a MPS garbage collector in.
- jack: If we're lucky, we will also have some blog posts wrapping up the intern projects where we can also talk about their contributions. kmc, do you want to talk with jdm about a memory management post?
- kmc: Will do.
- jack: I'd like to spread them across the team, because these take a lot of time. Otherwise, we just get one blog post and then it's months before we see another one.
- mbrubeck: Maybe when we hit an Android milestone. So far, even inside Mozilla, most people don't know that Servo runs on Android at all.
- jack: It kinda walks slowly on android...
- kmc: Maybe an ACID2 post? Here's what we found most difficult; here's a picture of the cake...
- jack: We had a blog post, though no picture of the cake.
Graphics implementation azure/skia
- Ryan: Graphic architecture of servo. Has Azure, skia, and opengles underneath. Is it possible to do opengl without going through azure and skia? What are the advantages of that?
- pcwalton: We had a long thread internally on this with some members of the gecko graphics team. There is an advantage... not opengles directly (no way to do text). you'd still need a library on top of opengl. It could be a more direct layer than azure or skia. The biggest problem with azure/skia, it's an immediate mode API. For efficient use of GPU, you should use retained mode so that the hardware is not guessing if you will reuse glyphs or textures. That is where you want to handle resource questions as much as possible. Bas Schouten on our GFX team has thoughts about this. The library could be a generic library, but it needs a retained mode API and is something that would be good for web browsers in general. I don't think we can fully flush out the requirements in this meeting.
- jack: When we brought this up, Bas and our VP Andreas have been wanting to do this for a while. It is probably a several person-years long work to rewrite that library, but for Servo we might be able to build only a smaller part of it. OpenGL also can't draw curves, so you can't do rounded corners... but Servo does not have rounded corners, so we might be able to create something quickly. We should talk to Bas about it. First, we will turn that internal thread into a mailing list thread.
- zwarich: Much worse on mobile GPUs, especially for trying to stream glyphs. Most drivers do badly with it. At apple, we added our own OpenGL ES extensions that worked around it, but no such extension exists in a standard form. I'd be happy to contribute as well.
- pcwalton: We have some support for that on Android (gralloc). There's no public API, but there are private APIs. We do the same thing on FFOS. Presumably, if you were to ship a browser on this... we might not need to write it off, because there are privileged APIs that enable these features.
- jack: Memory use on Android was some of the motivation for this work. It showed where our memory usage was. It was over 70MB for spidermonkey, whereas azure/skia binaries were only 3. I'll move the internal discussion with Bas onto the mailing list, which will rope gw and zwarich in, since they have both done this work on apple and android. This would expand the scope of the Servo project, but I am pretty excited because Bas believed that we could build a much, much faster renderer.
- zwarich: We will also have to support canvas at some point. We have to make sure that we can still have a canvas as fast as it currently is since they are also benchmarked.
- jack: That's part of why we had azure in place right now. A school we were working with managed to map much of the canvas APIs to azure.
- pcwalton: There is also Ejecta, which is a far more lightweight, but maybe not as fast as skia-gl.
- jack: I'm not convinced - nobody has turned on skia-gl....
- zwarich: CPU vs. GPU testing comes out more on retina/hidpi rather than mobile because the performance difference on mobile is narrower. With past experiences on iOS, disabling the 2D GPU renderer was usually a wash and sometimes a speedup. But safari on a macbook pro with CPU vs. GPU, the GPU renderer really shows up faster. So, if your GPU mode on a HIDPI is not faster than the CPU, there is definitely something wrong with your GPU backend.
- jack: I think at Samsung you could replace the renderer task bits. We don't care how we go from display list to texture. You could just replace the way that the texture is made.
- pcwalton: yes, it's nice that the display list is used by all of the engine. You just have to change how you interpret the display list commands (I think we only have 4). Three are trivial, but one is text.
- kmc: Could try porting some of the display list items to GL calls...
- jack: You mean do all the display lists on the GPU except for the text, and then do the text on the CPU and upload as a texture?
- kmc: yes