It's not just API changes. It's implementation changes. You're just shifting the burden up the stack by doing this. For example in this world a bugfix for WebContentsViewAura now requires > 1 step before it's picked up by Chrome. API changes are worse, as Alec notes. And then like you say, you end up hosting other stuff (e.g. Aura and Views) whose APIs is constantly changing.-BenOn Sat, Apr 6, 2013 at 10:58 PM, Darin Fisher <da...@chromium.org> wrote:
On Sat, Apr 6, 2013 at 10:47 PM, Adam Barth <aba...@chromium.org> wrote:
For features like IndexedDB, I'd like to get to the point where they can be self-contained modules that interface with the core rendering code in an easy-to-understand way (e.g., by describing themselves with WebIDL). If we do a good job, these modules could live in the Chromium repository rather than the Blink repository.My main concern is the one that Dimitri raised. The current approach is painful for folks working on features that span the boundary between Blink and Content but merging the repositories would be painful for folks working on features solely contained within Blink (and would tax all the other developers working in the main Chromium repo). It seems like there's a balance to strike.We should also think about ways of reducing these costs, for example by making it possible for modules to live in other repositories. Another approach is to move the repository boundary. For example, perhaps Content and it's dependencies should be in the "Blink" repository and all the code that depends on content should be in the "Main" repository.^^^ I'm really curious to explore this idea further. I think we have a lot of data to look at. We can study how frequently API changes were made at the WebKit boundary versus the Content boundary. We just have to be careful to realize that the Content boundary actually includes the API surface area of every module that Content depends on, which Chrome and other Content embedders consume. Concretely, I'm referring to things like src/base and src/net.-DarinAt a higher level, I think these are good questions, but likely ones that we'll be in a better position to answer in a month or two. Maybe we'll have such a green and wonderful tree that we can close the Blink tree and land repository spanning patches atomically.AdamOn Sat, Apr 6, 2013 at 10:05 PM, Alec Flett <alec...@chromium.org> wrote:
This is simliar to Dominic's comparison, but I feel Alexandre's pain every day. I typically spend 1-2 days working on a "patch" that spans both trees that requires a function to change a parameter or two.Then I spend 3-6 days landing it -If you've never experienced this pain, or wonder if I'm just exaggerating, this is the typical workflow:1) land stubs interfaces in WebKit (in the WebKit API)2) wire up chromium <-> webkit stub code in chromium3) replace webkit stubs with real implementation, leaving old implementation around so chromium still builds4) remove plumbing for old implementation from chromium5) remove old implementation from WebKit
And you have to wait for a webkit roll between steps 1/2, and steps 3/4, which means this is guaranteed to take 2 days. Add in a slow commit queue and it's easily 4+.I had thought that being able to expose more in Platform/chromium would help this, but I realize it just means less code, not less steps.I have been working at what feels like half-speed for the better part of a year. My particular project (IndexedDB) is going to do our best to lift ourselves out of Blink proper, and live much of our lives in the Chromium tree, mainly to address this issue.. all *we* need is a hook into the DOM for a window, and after that we can more or less divorce ourselves from Blink.. so that's likely what we'll do.I just went through a 3-month refactoring of IDB that feels like I could have done in maybe 2-3 weeks if it weren't for the above. And then I'd already be working on other features like IDB Mutation Observers :)It seems like Blink is really two things:1) an HTML layout engine - a parser, a renderer, CSS engine, and a DOM.2) a container for all the other HTML5 non-html features, such as storage subsystems (indexedDB/filesystem/etc) non-layout rendering (WebGL, Canvas, etc)Perhaps there is a better way to divide this such that all the people in the 2nd bucket are not doing 3 or 5 sided patches. If our embedding layer is really chromium/src/content, then lets divide the tree there, not at Blink.That said I'm fully in favor of just rolling it together into one project, assuming all the source control issues can be sorted out. I don't believe there are N+M engineers that get blocked because there are huge overlaps between N and M.AlecOn Sat, Apr 6, 2013 at 8:29 PM, Dimitri Glazkov <dgla...@chromium.org> wrote:
One con that I see and find pretty significant is inability of Blink
and Chromium to move independently. For example: if the Blink tree is
closed, N engineers twiddle their thumbs. If Chromium tree is closed,
M engineers take a coffee break. If Blink+Chromium tree is closed, N+M
engineers are affected.
:DG<
I completely agree that moving more stuff into a repo that's rolled through DEPs would be a large pain and not feasible in practice. The amount of changes that span chrome and net/base/media/content/ui etc is very large. If they are moved into a separate repo, 3-sided patches would be required often. At least with WebKit repo, from early on there was a proper API put in place to separate the two. The other modules listed above don't have that, and the class declarations are definitely not stable.
I'm sympathetic to the argument that it's more productive for subteams to work in a separate repo. On the other hand, it also seems that the reason subteams prefer working on separate repos is because they view the chromium tree as being closed too often. In the past, this often would happen because of a mist-match between what the CQ/trybots tested and what closed the tree. This is now infrequent because the infrastructure team have done an impressive job of adding a lot more configs with faster throughput, and more improvements are on the way which should speed things up. In my experience, the biggest reason the tree closes now is because too many patches land without CQ or green try runs. This is simply unacceptable given the size of the team, since any brokenness affect too many people. Whether only non-blink devs are affected, or all devs, seems besides the point for the overall team since this is a problem that we need to fix either way (although I can see that from the pov of blink team, this is paramount :) ).Personally, I think having blink in the same repo would be better. As mentioned above, there would be no gardening needed, the same CQ that tests the bling patches would also run chromium tests (i.e. fine-grained tracking of which bling change breaks a chrome test, instead of gardeners having to figure this out manually), no 3-sided patches, and easier bisecting. Also, right now only a small number of devs work in both chromium and bling repo. The process to contribute is different, the base libraries are different and so on. If it was easier to jump between codebases, I imagine more people would be inclined to fix bugs in the other codebase. That would seem like another very positive benefit of the fork.I'm curious, what are the objections? The chromium tree is closed too much compared to the bling tree? The chrome try bots take too long? If these are the reasons, what numbers would the team be happy with before they're ok with a single repo?
I'm also curious what the relative number of commits in each tree is. I have heard previous numbers from the WebKit tree, but I assume that'll be less now since it's just the chromium port.
+1I can't imagine not regretting the decision to keep them separate. There's simply too much potential code reduction we'll want to take advantage of, landing changes across two repos is too hard, and I don't think anyone is arguing the existing API boundary is in the right place, anyway.
I suggest we avoid coupling the concerns of isolation (tree closures, etc.) with this discussion of repository structure.
If we were in a single repo, we could still have a web platform team branch with its own builders and gardening rotation for merging into trunk, while avoiding the multi-sided patch pain. IMHO, using separate repositories is a poor way to achieve this isolation - for one, branching strategies can be adapted over time to meet team needs much easier than repo structure can.
Rick