mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
Page:
Meeting 2014 07 14
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
5
Meeting 2014 07 14
Seo Sanghyeon edited this page 2014-07-17 01:23:30 -07:00
Agenda
- state of Android
- new contractor (jack)
- Where should the logical vs. physical coordinate boundary be? (SimonSapin)
- XHR progress and next steps (manish) (Unable to dial in)
- 32 build status
- large stacks
- martin's graphics work
- html5 parser
- CI status
Android
- laleh: Currently layout is running, but no text is painted on screen.
- mbrubeck: Same for me. Last time this happened it was because we were passing a bad default scale factor (#2377). Not sure what's causing it this time.
- laleh: We can still do power measurements on the layout code.
- mbrubeck: Script is probably not working, but that may not be as interesting anyway; should be the same as Spidermonkey in Firefox.
- jack: Spidermonkey is expected to be broken because Android is trying to use 64-bit representations on 32-bit hardware. I'm surprised it doesn't crash on startup.
- laleh: Is there 64-bit Android hardware?
- jack: The only shipping 64-bit ARM hardware is Apple's.
contractor
- jack: ms2ger will be working on ServiceWorkers in Servo as a contractor starting this week. They will start with doing a worker design in Servo to do a single WebIDL interface, probably XMLHttpRequest. You will be able to talk to the workers from the main thread and send stuff back. This will require our first cross-origin wrappers. When JS from one page needs to call JS in a different origin, it has to go through a proxy object that makes sure you don't do anything "bad", which should be a fun new piece of code. The ServiceWorker stuff is what most of the debugging and caching stuff is designed on these days. You can hook into all areas of the browser and replace how it downloads resources, etc. It's like round 2 of the caching infrastructure for web apps (since the first round failed miserably). Hopefully, he'll be starting tomorrow officially.
Logical vs. physical coordinate boundary
- SimonSapin: The link is: https://pastebin.mozilla.org/5554709 It's a grep output of all the things in layout code that are logical rect sizes or points in the PR made last week. This builds and runs without regressing horizontal text. But, as soon as we try to use writing modes, it fails at runtime with assertions that we don't mix writing modes, which fails. It appears some of the conversions I made should stay in physical space, but I don't know enough about this code to decide which is which.
- jack: All of this is in layout? I believe that all of layout should be logical. I assumed that layout would be logical, but as soon as we generate display lists for painting, it'd be physical.
- SimonSapin: Yes, but generating them is in the layout tree. Some special cases, like fixed positioning and absolute positioning maybe should be in physical space, but I'm not sure...
- jack: So if you're in a different writing mode, do absolute & fixed positioning work normally, or are they transformed? Because usually you set top, left, etc....
- SimonSapin: Yes, those are physical directions, so they do not change. We may want to map them to logical directions, though, to make the layout code cleaner. We have code for the constraints that says that if one thing is set, we may treat the top property differently. Also, width and height are treated differently. At the end, though, when we store the offset in the page to the element, maybe we want to store that as physical.
- jack: Where are those stored? Probably a 'pub struct...'
- SimonSapin: AbsolutePositionStruct, maybe?
- jack: I feel like I don't have enough info to give concrete advice here. Do you know where the bug is?
- SimonSapin: Maybe I should chat with pcwalton afterwards.
- jack: Also, if you find out where the conversion is missing, it might be easier to talk about how far up the stack that should happen and in what other similar places that should happen, relative to where it does now. It seems like if we only deal with physical coordinates in build_display_list, that would be nice.
- SimonSapin: That's the idea.
- bjz: How will the windowing stuff interact? Like if we're getting cursor position of the mouse, etc.
- mbrubeck: For hit-testing of the cursor?
- SimonSapin: The display items will be in physical space - everything in gfx/. I believe hit testing is on display items.
- jack: It might be now, but that's not how patrick wants it to be in the future? I think in gecko, you take a mouse position and find the DOM node by regenerating the portion of the display list... the reason is you don't want a link from the DOM to the display list. But, that DOM node may be gone because there's a bunch of memory safety stuff that has to be in place. Because when you generate the DOM node, you create stuff in layout, and then by the time the event comes in, you may have had script delete the DOM node.
- zwarich: Another potential problem is in invalidation. If we want to invalidate a region, we'd like to do it without a display list. pcwalton wants to always generate them and diff them, which might solve it, but if you do what blink/webkit do, then we'd have a problem.
- jack: Have you thought about that much? I thought the plan of record was to do display list base invalidation because it works in gecko.
- zwarich: I'm skeptical that generating a display list and diffing it to determine dirty regions is efficient. Today, we just regenerate the whole thing every time, which is fine.
- kmc: We would have incremental display list building, too, right? I think in DLBI, you have to keep nodes around from the old one in order to do it.
- zwarich: Have to keep the old display list around in a form that's amenable to parallelization.
- jack: As you and martin are working on the graphics stack, this is probably a question we'll look to both of your guidance on. Obviously, pcwalton has some opinions, too, but by the time you get through the rewrite, you should have more ideas.
32-bit build & Rust issue tracking
- jack: Has anybody heard something about this fix? Right now, we were running into rust compiler bugs that luqman fixed. I got all that working and got a rust upgrade, and building with optimizations, it works great. But if you build without optimizations, we get ABI calling convention issues again (on the Rust side you pass something bad).
- brson: I can follow up with luqman today; I should see him. I'll make a note.
- jack: In theory, we could just merge it and tell people to build optimized for 32-bit.
- azita: Is there a list of stuff we need from Rust in Servo?
- [ed. note, there is now - High-pri/blockers: https://github.com/mozilla/servo/issues/2853 ; feature requests: https://github.com/mozilla/servo/issues/2854 ]
Stack sizes
- zwarich: Probably want to add stack space usage from Rust. Going to gather some numbers about how gigantic those frames are, b/c over 2mb stacks seem really large.
- kmc: There's a lint for that, probably.
- zwarich: Can't do it from just a lint because it's totally dependent upon what LLVM decides to do.
- kmc: Might want to consider a lint phase where we walk through the bitcode.
- zwarich: Can't figure out how much stack space until LLVM does register allocation.
- kmc: Aha! can't tell from the bitcode...
- zwarich: Fortunately, I think I can just write an awk script that can determine it from the dumped assembly.
- jack: It was amazing how many of the numbers were large on njn's numbers. We only have six tasks, and there were 5-6 things with giant stacks except for the fork/join concurrency pool.
- zwarich: If the green tasks are on one of many threads, you'd expect that a task that grew the stack significantly and got moved around would migrate to each native thread over time and expand the stack usage considerably.
- brson: I don't understand why these stacks claim to be > 2MB. Unless requested, Rustc will not create larger ones.
- jack: We must be asking for a giant stack somewhere in Servo, then! Based on zwarich and what you said, there must be something happening in rust-mozjs, and maybe it just travels through multiple threads.
- kmc: Might be leftover code from the segmented stack world.
- jack: Should follow up with jdm to see if it rings any bells for him.
graphics
- mrobinson: Wrote something that replaces the quad tree, but there are some OSX memory usage issues (not present on Linux). I think that thanks to zwarich's debugging, we know what's causing it and I'm writing a workaround now. If that works, we can just remove quadtree and then iterate on it over time. It's a very simple gridded tile implementation with uniform tiles. So I'm hoping to remove quadtree today or tomorrow.
- jack: zwarich, what was the memory usage?
- zwarich: From what I'm seeing, when it would scroll, it would ask for all tiles that it hadn't yet received again. If the render task is still rendering things you hadn't yet received, it would ask for them again. So you would allocate and render the same things again. A second problem is that when we want to free a buffer, the compositor has to ask the renderer, but it would be nice if the compositor owned the buffers itself. I will try to fix that, though I heard something from martin that maybe this decision was originally made for Android, so I'm just going to try to fix it and see what happens. And if anybody can rendering something other than a solid red page can check it out on Android... For GPU rendering, we'll have to make a skiagl context. I think I know what martin has to do to make it on parity with quadtree, but even the quadtree is going to have this problem. But it already has this problem - the render task is blocked on freeing buffers until it finishes current allocations/rendering.
- mrobinson: If the renderer owns it, it may be able to reuse buffers, though...
- zwarich: The compositor could certainly maintain a cache, and possibly more, since there is one render task per pipeline. We also currently don't do double-buffering, and once we do that we'll have to move it to the compositor anyway. I can't think of any reason for why the buffer management is in the render task.
- mrobinson: This problem uncovers a design issue. The layout tree change, the render tree realize that is has to render the contents, but the knowledge is split. In theory, though, the render task could have just sent the contents over. Right now, we have to ping-pong back and forth and I wonder if the latency of the messaging is causing this. There seems to be a lot of chattiness to get the contents of the layer.
- mbrubeck: The reason the buffers are handed back to the render thread is because of linux. There, the native layer object contains an X11 pixmap that has to be freed on the same thread where it's created. So, because of where it's currently allocated, we have to hand it back to be freed.
- mrobinson: Since pcwalton suggested replacing pixmaps with DRM on linux, we could just use shared memory on other platforms. I guess we already have that with CPU rendering mode, but shared memory may make more sense in that case, since you could just send the entire layer in one go instead of individual tiles, but there may be some tradeoffs there. I'm more used to the WebKit approach, where we just used shared memory, so I'd like to do some experimentation to see which is the faster approach.
- zwarich: On any platform with decent shared surfaces (OSX, Windows, Android/B2G), there's nothing lost by using tiles. And if you want efficient smooth scrolling, you want to recomposite prerendered buffers, which is the impetus for going to tiling on mobile platforms. If you really want to save memory, you can try not having both double-buffered tiles, but you'll lose responsiveness. It would be interesting to investigate both modes of rendering. But we should not move to directly rendering into...
- mrobinson: That would break accelerated rendering or video - we couldn't do it!
- zwarich: And if you're doing it on the GPU, you'd have to do a pre-blit pass on the surface, make a copy of the entire thing, etc. So the tile-based approach is better there too.
- mrobinson: Probably depends on GPU vs. CPU perf and the quality of the rasterizer.
- zwarich: We shouldn't let linux hold us down and just do something else on Linux. We should not architect around the limitations of desktop linux that cripple other platforms. Even Gecko isn't doing that anymore!
HTML parser
- jack: Status of HTML parser?
- kmc: Still various parts of tree building not implemented plus wiring it up to servo. It's probably 2-4 weeks, but coming along very well. I've implemented the in- cases, which is most of the work.
Continuous integration stuff
- jack: Building rust snapshots by hand
- larsberg: yes.
- jack: Still having weird failure?
- larsberg: I haven't taken a look at it yet; I was working on getting snapshots fixed and on Spidermonkey upgrade / Rust upgrade fixes. Are people still seeing the failures?
- jack: Yes, there was one this weekend I think.
- zwarich: The failure was the same as I saw last week, with the Linux builder just dying suddenly. This one was on an actual build, not a CI pre-build, but otherwise the same.
- larsberg: It's probably running out of some resource (memory, processes) and we just need to clamp down.
- zwarich: We wouldn't want to disable parallel layout on Travis since that finds problems. What about changing the -j argument to make? Or test parallelism?
- jack: Where does the failure happen? make check-content?
- zwarich: Yes, at least for the one I saw. It's annoying that there's no reliable way to test a fix.
- jack: Any update on paying Travis for increased resources and support?
- larsberg: Yes, they just got back to me; they can do all the needed work; just need to put together a statement of work.
- jack: Let's go ahead with that ASAP.
- cat: MEOW!