So I will be talking not about astroecology today, but about star formation in the centrum like of the zone. So the inner few hundred par six of the galaxy. So I'm going to have two main topics. So first of all, I'm going to talk at large about star formation in the central zone. And then I will share with you this Alma large program that we were just talking about before called ACES, the Alma CMZ to try and understand star formation and feedback in the CMZ. Now, as this is a talk as a part of the CTA webinar series, I'm going to concentrate really on two main themes throughout the talk. So the first I'm going to try in this very broad umbrella, I'm going to focus on trying to link star formation and feedback in the CMZ with this idea of the extreme universe and the sorts of extreme phenomena that you're going to be observing with the CTA. Then the second part of the talk. So as well as telling you why we're so excited about this ACES data and why we think it's really going to make a step change in our understanding of star formation and feedback. I'd also like to encourage people to actually to join the project. So this is ACES is open to anyone in the galactic center community who's interested. And I think there's, as I hopefully I'll show later in the talk, that there's a lot of overlapping the sorts of science questions that we're asking. It'd be great to have input from members of the high energy community so that we can make our data as useful as possible and hold some of these science questions together. Okay, so on to the first part of the talk, star formation and feedback in the central leg of the zone. An outstanding review written on this topic by Johnny Henshaw and collaborators. So this is a review that's part of something called the Protostars and Planet series. And in planet formation and star formation, this review is held every seven years. And every seven years, the community gets together and they pick a small number of reviews on key topics. And Johnny is leading one of these these topics. And a lot of what I'll be talking about today is summarized really nicely in his review. And I would encourage you if you're interested to contact Johnny about this. It's really an excellent review. I should say that a lot of the slides I'll be using, so the really nice visuals and things were made by Johnny for this talk. Okay, so to go to this is a very broad topic, star formation and feedback in the central leg of the zone. So I've broken it down into four main themes or topics. So I'm going to start really quite briefly with this is a broad big picture context. So why do we study, we've already touched on this in the introduction to this talk, which is spot on. I'll just kind of go over that, maybe flesh it out a bit more, and why we're interested in the centers of galaxies and why the CMZ, why our own galactic center in particular. And then I'm going to dive in a bit more detail to our current understanding of star formation and feedback. So I'm going to do this by explaining this long standing puzzle that we have in the galactic center and that's that when we look at the star formation rate, it appears to be much much lower than we would expect, given how much dense gas there is. So I'll sort of dive into that, explain this puzzle, and then I give you a flavor for where we currently stand in trying to address this puzzle. Okay, so then why are we interested in galactic nuclei? Well, this whole talk series is on an extreme universe. And I don't think there are many other places in the universe quite as extreme as the centers of galaxies. I think we can all agree on that. Obviously, they host supermassive black holes and, you know, even in and of themselves, they're some of the most extreme objects in the universe for testing GR and so on. But surrounding these supermassive black holes, the centers of galaxies have huge gas reservoirs and these huge gas reservoirs produce lots of stars. In fact, the centers of galaxies can account for up to this sort of the prodigious outflow and feedback and energetic activities from supernovas and wind and so on and can play a key role in shaping galaxy populations. So I think it's fair to say that the centers of galaxies, and really as we look out into the universe, try to understand why it looks the way it does, then the centers of galaxies have played a key role in shaping that. So what about our own galactic center? What can we, what role can that play in this sort of trying to build our understanding? Well, I think the single main thing, certainly for me that makes it stand out, is it's the only place where we can really zoom in down to the scales of individual stars and follow the gas as it flows down into the central supermassive black hole. Now for other galaxies, we can get a great understanding of things on sort of kiloparsec scales, maybe from nearby galaxies down to 10 parsec scales. But what's driving these huge, like these energetic processes, these galactic scale outflows are driven on sub to the 10th of a parsec scales and really all the way down to thousands of AU where these energetic processes are being launched. And within our lifetime, the center of our galaxy is the only place that we're going to be able to do that. It's the only place we can link the kiloparsec scale galactic processes that drive things down to these small scales. And then when we, when the feedback starts, we can follow it back up again. So that really is unique. And we have to base our understanding on the center of our galaxy. Now, not only that, that's kind of baryonic processes. But of course, like one of CTA's key science goals is looking for possible evidence of dark matter, maybe self-annihilation signals. And the center of our galaxy is a great place to look for this. I'm sure you're all familiar with the galactic center. So the gamma ray excess is obviously debated, the origin of that. But what is clear, no matter what you think it might be, is that if you want to look for dark matter self-annihilation, you've got to get rid of the contaminants. You've got to get rid of the other stuff that was interesting for me, but is garbage and that you need to get rid of looking for dark matter signals. And of course, the center of our galaxy, we can resolve individual contaminants. So I think it's clear that the understanding, hopefully that's a big picture, it's clear that understanding star formation of feedback, and it seems it really is important. So I think that's why this long-standing puzzle continues to draw so much attention. So I'll explain what that is. Well, when you go out and you take any telescope and you point it at the center of the galaxy and you measure how quickly it's converting its gas into stars, you see that it's doing it much less than you would expect. So typically the star formation rate is one to two orders of magnitude less than you'd typically expect. So why is that important? Well, if we said star formation of feedback in galactic centers plays a key role driving galaxy evolution, so if it's different, if star formation feedback is somehow different in extreme environments like the center of our galaxy, it's crucial to understand how and why. So I'm going to spend the next few slides kind of diving into this puzzle. We're going to start I'll give, I'm not sure if everyone's familiar with the galactic centers, I'm going to start by giving an observational, very brief overview of what the center of the galaxy looks like, what kind of phenomena happen in there to get a feel. Hopefully that'll be helpful for the rest of the talk where we start looking at the physics. So we'll have an overview, then we'll look at how we derive star formation rates before we go on to explain why it's lower than expected. What does expected mean? Okay, and then finally once we've done that, I'll bring it all back together and sort of try to link it to this big picture stuff of why all of this is important for understanding star formation in extreme environments. Okay, so here is a sort of a very brief and observationally driven overview of what the center of the galaxy looks like. So we're going to build up this multi-wavelength picture. So I'm going to start here and you'll see down the bottom there's this bar and that is going to tell you what the wavelength of light is that we're currently looking at. So we're going to start with this all-sky view, this beautiful guy picture in the optical and you're seeing there, of course, this bright banded across the middle is the plane of our galaxy. These dark features are that are nearby by gas clouds and unfortunately in optical wavelengths we can't see the center of the galaxy because of all the dust in the way. So what we're going to do that white box is there showing the inner few hundred parsecs. So we're going to zoom in spatially and we're going to move from the optical into the infrared. So this is now looking, so you see down the bottom right that's going to tell you exactly the wavelengths and above the image tells you what physics, what physical things we're looking at. So this is a spitzer image and in this image here the blue is where I'm telling you what the hot stars are distributed in the inner few hundred parsecs, sorry there's a scale bar on the top left as well. So we're looking at probably a few hundred parsecs around the center. So the blue is the hot stars, the green and red is a mission from very small dust grains that's been excited by the UV radiation from high mass stars and when we can peer through the dust we see some familiar features. So right there in the middle that's the center of the galaxy so there's a supermassive black hole hidden away in there somewhere. What you're actually seeing there is the nuclear cluster surrounding SAJ star. There are some well-known and famous clusters, the arches and green tuplet just to the left on this image. But what you should also see there are these very distinct absorption features and it's these that got me certainly quite a while going out interested in the Atlantic center because this is if you look down at the bottom right this is eight microns is the longest wavelength. So these things are showing up as absorption features at eight microns. So in order to do that the amount of dust the column you have is very large. These must contain a lot of material and in fact some of these clouds are even dark at 70 microns which means they must have visual extinctions of a thousand magnitudes or more. So these are crazy compared to what clouds you would typically see in the disks of galaxies. They're incredibly dense and so I got interested in studying these objects and if instead of looking at infrared so now we're going to go to longer wavelengths and instead of eight microns, 70 microns they're still optically thick. If we go past the peak of the black body we start to see that they glow. So now red here is the emission from the cold dust and you can see that the inner few hundred parsecs is crammed full of very dense molecular clouds shown in here and the blue in this picture sorry so the red is from Herschel and the blue is the emission from hot dust and young stars. So you can also see just it says embedded star formation that there are also some very luminous objects so this down here it says embedded star formation so my pointer isn't working for some reason otherwise I put my mouse over it. So there are also signs of prodigious star formation activity so that's Sagittarius B2 there where it says embedded star formation and that's currently it's basically a mini starburst it's forming it's 10 to the 6 solar masses a gas cloud and forming currently forming stars like crazy in fact half of the star formation current star formation in the galactic center is happening there. We can see even more energetic processes if we now go from the submiliter all the way into the radio so this is now 30 centimeters with with meerkats in red and you start to see supernova remnants popping up and you can peer right in and see all this embedded star formation that's happening around your eyes probably immediately drawn if you haven't seen this image already to these non-thermal radio filaments and if you're particularly good at noticing these sorts of things you might see two vertical again I'm sorry my point is not working two vertical features they're they're broader and we think these this is the base of a very large outflow that's been been driven for the energetic event a few million years ago. So I love this image so much this meerkat image I can't resist showing it in all its detail just to get across the point that there are there's so much activity so many highly energetic processes going off at the same time in here so if you're interested in the high energy universe so to the very right hand side of the scale bar then this is a great place to look I can't just a little plug at this came out the other day this is the new meerkat image and if you have a chance you've got spare 10 minutes I encourage you to have a look because it's the data is just quite quite jaw-dropping the level of detail here is it's quite remarkable. Okay so that was a bit of a whistle whistle stop to a very observational hopefully give you a feel for what what sorts of things are going on in the center of the galaxy but there's two main things really to take from that going forward so number one is that we have a very large reservoir of very dense gas clouds and simultaneously there's a high concentration of energetic phenomena things like supernova young stars forming star clusters and so what we want to now do is to compare those things to other environments and in order to do that we need to go from just this very qualitative picture of yes there's dense gas clouds yes there's supernova and to to measure quantitative values for that so what we're going to do we're going to now try and measure this so how do we do that well this is um my most boring slide I apologize um but it's just to try and get across the point there are many many ways to do this so I think showing a table in a talk is terrible I won't spend too long on it um but I just get across the point that many people have done this um they're using many different methods so typically what you do is you will take your favorite um samples for star formation it could be supernova or or young stellar objects ysos or you might take all the integrated lights and try and understand how much of that's from star formation um and once you've picked your favorite indicator you can estimate a timescale for you know how long does that emission last you can estimate the mass of the object that's producing it you can divide one by the other and you get your star formation rate um so as I say this is a terribly boring boring plot but it's just to get across a point that lots of people have done this and uh the take home message is at the top is that no matter what you do no matter what star formation tracer you pick um you always end up to this the current star formation in this human set is about 0.07 solar masses per year uh that's if you measured in the past a few million years but there is also um some cheeky evidences that there might have been um an elevated star formation rate over the past 30 million years that are the observations we look at so supernova remnants and the young stellar objects might not be sensitive to so there's a paper which suggests that you know evidence for this might be things like the arches and when tubular clusters are very massive uh clusters that formed probably you know in the five to ten million years uh a go range uh so there might be a spike possibly up to 0.8 solar masses per year within the last 30 million years okay so we've got a measure of star formation rate and what we now want to do is to compare that star formation rate with that dense gas reservoir and then compare to other star formation rate in dense gas reservoir dense gas reservoirs across the universe to see if they're similar or not it just so happens that there was a really nice paper did this by charlie ladda back in 2012 so charlie did the hard work here of going through the literature and measuring uh all of the collating dense gas measurements um from all the way from gas clouds on the far bottom left in green are clouds in the milky way then all the way up in mass so sorry masses on dense gas masses is on the x-axis so in log 10 solar masses per year um going from sort of 10 up to 10 to the 10 uh solar masses with a very big dynamic range in mass um so all the way from from galactic clouds clouds nearby earth uh all the way up to high redshift galaxies up in the top right so there's the masses on the x-axis the mass of dense gas on the x-axis and then the y-axis is a measure of the star formation rate and so this is the the plot from charlie's paper and the really nice and exciting thing about this was that everything fit seemed to fit on the same line and that line was linear so everything from milky way clouds all up to high redshift galaxies appeared to fit on this really nice line and the the interpretation of that is that perhaps there's a universal density for star formation now the reason this is so interesting uh if it's right is because that means the kind of implication of that means that if you study the things way down the bottom left of the plot if you can study um nearby star forming regions which of course you can see in so much more detail and you can high redshift galaxies then if you can understand what's going on there that will tell you everything you need to know about these high redshift galaxies so if this is right it's really important so what do we expect the cmsz to be in there our own galaxy well we've already said that all the observational evidence suggests the star formation makes about 0.1 solar mass per year so that's minus one on the y-axis and you can draw your head or on the screen a line across so you'd expect there to be about 10 to the six or 10 to the seven solar masses of dense gas there um but what we in fact find is that there's way more gas than or at least an order magnitude more dense gas so flipping that around another way of putting it is that given the amount of dense gas in there the the center of the galaxies under producing stars by a lot so the this little inset on the top left here is if you take away so everything fits on the slope if you normalize um get rid of that slope and then the blue are showing extra galactic centers and you can see that the the cmsz so that the solid dashed line is that is where everything should line if it was uniform if there was a universal density threshold and the cmsz is at least an order magnitude lower than that so that is intriguing that's the puzzle why is this so different it's annoying because if everything was the same we could understand star formation but it's not it's different some physics is making that gas different okay so as the steam said just weird what about other the center of the galaxies so what you really want to do so if we go back to this plot here you see there's lots of blue or the hexagons so that there's lots of measurements of nearby galaxies but all these galaxies are different they're different masses they're different types um so comparing to the cmsz is not an apples to apples comparison so what you really want to do is find a trend of the Milky Way and it just so happens that um m83 is a nearby galaxy and what i'm showing you here in the left column is the central molecular zone of the Milky Way and the right column is the central molecular zone of m83 so again there's loads of information here it's a boring slide in many ways but the the key thing to take away is that most of the the key physical properties you might care about you know the mass is the the gas content stellar the velocity dispersant the gas electricity all these things are you know very very similar between the two galaxies but notice the star formation rates the cmsz as we said is only 0.07 solar masses per year 0.07 solar mass of pure star formation rate whereas the um incentive m83 is an order magnitude higher as 0.8 solar masses per year so what's going on this is we went looking for for twins of our galaxy but we found a twin that we didn't really expect okay so we've covered a lot of ground here so it's time to kind of stop and reflect where where we've got to and set a stage for for going forward okay so we we said right at the start and we know that star formation and feedback in galaxy centres plays a key role in in shaping the evolution of galaxy populations so if there is an environmental change in star formation it's crucial we understand why we've just seen certainly that the research over the past five ten years it has shown that the cmsz is underproducing stars by one to two hours of magnitude given how much dense gas it contains so what's going on well we've basically got one of two possible scenarios here two potential explanations either the the star formation in a central micro zone is currently at a low point in the star formation history and then will will rise again at some point or there's something that's actively inhibiting star formation at the centre of the galaxy and you might say well yeah so what you know who who cares what why do we even care about this well we should care and the reason is because the extent to which feedback changes a galaxy depends really sensitively on the the spatial and temporal distribution of that feedback and a very simple analogy or way in this context so we say the star formation rate is currently 0.07 solar masses per year and let's imagine that we just let the the cmsz trundle along at that rate for the next 20 million years and then we should observe it in 20 million years now instead of that imagine we take that same integrated star formation but we cram it down into a two million year window in a very small spatial region the galaxy is going to look completely different so the first scenario there's no way that could ever drive anything like the firmy bubble it's just not enough accumulated energy all the energy will the of the star formation supernova will will dissipate and cool before it can do anything on a galactic scale whereas the latter scenario is going to cause serious damage drive large-scale outflows and so on so we should really care and strongly and if we're interested in looking at these phenomena with high energy telescopes like cta it's really important that we understand which of these two scenarios we're talking about okay so what are some potential solutions to this puzzle okay so um we've got these two scenarios and uh through i guess in investigations of last few years we narrowed it down there's two plausible physical mechanisms that can be responsible for this so if the case is that we're presently observing star formation in a kind of a low state and it's going to go back up again then the obvious physical mechanism for for doing that is is large-scale process so galactic scale processes and are driving this spatial and temporal variation in star formation whereas if if this is you know if the star formation is low and it remains low over long periods then there has to be something that's locally um causing star formation to be different to be suppressed for a given amount of dense gas in the center of the galaxy so these are the two things that we we want to investigate and we want to understand if that's true what could be causing this okay so let's go i'm going to go through each of those in turn so let's um first of all could it be galactic scale processes well to see if galactic scale processes are are responsible we need to understand what we think drives in the first place so uh a good a good place to start is why why do we have a cmz at all in the first place not all galaxies do um so what what you're seeing here this is a um a top-down view of what we an artist's impression of what we think our galaxy might look like and probably the the key factor in all this your eyes already been drawn to and that's the fact that we have a bar we have a stellar bar like two-thirds of all spiral galaxies in the local universe we have a stellar bar and that stellar bar doesn't ask these stuff to the the gas in the disk so the stellar bar is rotating and as it rotates the gas and disk uh near the the the end of the bar fuels a torque and because gas is dissipationally can shock it can lose energy it can lose momentum and then it can plunge in along the leading edge of the bar into the center so we've got a good idea of what's going on here so there's great work by um so some simulations here by Matteo Sormani uh Robin Tress and Rav Klesson their their group uh showing how this works in practice so they've taken the simulation of a milky way like galaxy they've put in a milky way like bar uh and you can see so the different panels it's the same simulation they've just done different processing so the top left is the total gas then stepping through you see the atomic gas then molecular gas and going down you see the CO so that's what we'd actually observe carbon monoxide mission there and on this or bottom left image of the simulation is the star formation uh going on so we have a good understanding if we know what the potential the gravitational potential of the bar is we've got fair idea of what um of what's happening and it's basically these the gas comes in in what we see in external galaxy or dust lanes now the important point is that the gas um because of the gravitational potential the gas build up you can see these um these rings uh so I was saying that I mentioned it's unstable are you are you still can people still hear me can someone just say hi yeah yeah okay fine right yes thank you thanks um yeah so so the gas so the one particularly important thing to notice is that so the gas is funneled in but you see that there's these these this ring that builds up and that's because of the stellar the stellar potential which is dominant in so far in towards the galactic center um basically sets up a stalling point where the gas builds up in in a ring so that's what we we observe that is the the central molecular zone that we're talking about the inner few hundred parsecs where this gas piles up on a ring now we're interested in this question is star formation static is it quasi continuous or is it bursty so well hopefully simulations would give us the answer right well uh unfortunately there are two different different answers there so I'm showing you here that are star formation so simulations of a disc like the milky way with a bar and following the gas in and asking the question is star formation bursty or or quasi continuous so the one on the left this is by Lucia Armolotta I'm showing some results from from her simulations where you've got the so star formation rate is on the the y axis on the top plot and then the time in in mega years and so in her simulations she finds that star formation is is very bursty so the that sort of orange horizontal stripe is the the current estimate of the the cmz our own um galaxy's star formation rate of sort of 0.1 solar masses per year and so her simulations do get down there but it's it's a kind of low point and then there's like a burst of star formation so that's these simulations are very bursty so on the right hand side these are our simulations by Amityus or Manny and they find something different in their simulations again global global simulations gas falling in um their their star formation rates are much more more continuous so uh I think the certainly on the simulation side that this is still an open question okay so let's look at it from um so simulations you know we're working working this out what about from the observational perspective well we can try and tackle this by asking what happens to gas when it enters the essentially the zone and we can we can do that in a very simple mass budget so you can see right we know gas is getting funneled in we know it builds up in this ring and so we can just ask how much is coming in how much is going out how much is going into stars am I doing this kind of mass budget we can estimate is it likely you know do all those masses cancel out in other words are we in a quasi continuous thing or does it look like there's a sort of a mismatch um between the mass coming in and mass coming out and maybe that's some indication that we were having more star formation diversity okay so this is um I'm sure you hear this is a very simple uh attempt to do that so on the left hand side we've got m dot in which is the sort of mass inflow rate coming along these dust lanes into the center and SFR that's the the current star formation rate m dot out is the the rate at which gas is being blown out of the cmz and then the m dot cmz is the the the change in mass of the stars in so it's a change in mass of the gas in the cmz okay so we've already said let's look at these terms we've already said the star formation rate's about 0.1 solar mass per year currently um we can measure uh the mass inflow rate is about one solar mass per year this is a paper by uh Matias O'Malley and and Ash Barnes where they they picked out this figure just beneath that is showing um the the CO position velocity diagram and you can pick out the dust lanes that's what's shown in the blue and orange you can measure uh the the mass of the CO in those two two components and then if you've got a model of a galaxy you can get a rate at which it comes in and there the number is about one solar mass per year so the rate at which gas is being expelled is about 0.6 solar masses and here's uh you know I just I'm blown away by this just that this year scale of this but it's clear that the large amount of mass is being blown from the cmz zone I like doing this as an observer is that I can tell that the right hand side must be building up so in order for this to to match one solar mass per year then the amount of gas that's in the cmz must be must be growing if those other numbers are right so this may be observational again this is so very hand wavy and there's quite a bit of uncertainty in these numbers but this is potentially observational evidence that that the star formation is bursty in um the the cmz okay so it certainly says so going back to our our original you know too pronged idea or two two different mechanisms certainly seems that variations on on large sort of kiloparsec galactic scales may play a role in the reason why the star formation rate seems low at the moment um so what about this other idea of kind of more local processes somehow keeping star formation very low over a long time so well before we we get there what do we mean by extreme we need to quantify that before we can understand what physical mechanisms might cause it to be extreme so here we go this is the same top-down view of the galaxy and one thing that we can say about um the star formation in the center of the the gas in the center is that it's really very dense so just to give you an idea of flavor for that so the inner say a few hundred parsec it contains between three and ten percent of all the molecular gas in the galaxy and yet the surface area is point one percent so that tells you immediately just those two numbers that compared to the gas in the rest of the disk this gas is super dense so that's number one so that could be um these but then that would be strange because all all star formation models think that as you increase the density of the gas then your star formation should go up so this is one thing that's different but it's different in the wrong way completely the wrong way so what might be stopping it well another thing that we know about the said the gas in the center of the galaxy is it's incredibly turbulent so what does that mean that means that there is a lot of the for a given fixed size scale if you take a molecular cloud in the disk and a molecular cloud in the galactic center and you have to measure how much kinetic energy there is in the gas on the same size scale in both there's way more kinetic energy in the galactic center clouds and that's what's shown here this is a typical line width size relationship for for clouds so the x-axis is you go around and you measure clouds in the disk and clouds in the center and you plot their size that should be in par six on the x-axis and then in the y-axis you measure on that same size scale you observe something like CO and you measure the velocity dispersion of that line and so you have a size and you have a line with them you plot them and so you can see the the yellow are the cmz clouds and for a fixed size scale if you go up in you take a fixed size scale next axis and you go up in the y-axis you see that the cmz clouds are can be 10 times greater the velocity dispersion that means there's a lot more kinetic energy in the gas so that clearly is an important consideration when you're thinking about star formation and star formation is basically self-gravity of the gas fighting against things like kinetic energy and so on there's trying to stop eclipsing so that's obviously important and indeed so that's so the gas is denser it's more turbulent and in fact we can expand that for pretty much any property you know turbulence but also magnetic fields gas temperatures density pressure cosmic realisation rates all these things are an order of magnitude or more greater in the gladiator center than solenoid so pretty what means by extreme we say you take any measure um any physical property and it will be at least an order of magnitude larger in the cladding center and you'd think surely that's got to play some role in affecting the star formation and also the feedback as well so when stars do form and the feedback goes off I must play a role okay so um this is a very visual again another thing that when I started looking at the gladiator center kind of blew my mind um and let me show you that and I still I still find it quite amazing so what I want to do is when we say dense extreme how dense is dense so this let's look at this little cloud here's one of my my favorite objects are called the Colbert brick and this is one of the sort of densest and most massive molecular clouds in the galaxy that doesn't have any signs of of star formation so that's what's shown here this is uh the the red is a Herschel and then this beautiful uh yellow orange image here this is an Alma showing individual star forming cores in this this gas cloud so that just looks you know it's easy to to take that for granted but it only the the scale of how extreme this is only becomes important when we compare that to something in the disk so now what I've done here is I've taken that gas cloud and I've compared it in size to the Orion like a cloud now Orion is our um local um extreme star formation environment it's the nearest place in the galaxy where we're forming high mass stars and it's often looked to as you know our our nearest extreme example of star formation so actually what has happened this is showing so you see the the Orion filament here and that's about 10 to the 5 solar masses of gas and that's forming stars like crazy what the universe has somehow managed to do is to cram all of that gas so that tiny little gas cloud there is the same amount of gas as in the whole Orion cloud it's managed to compress all of that down to a radius of a few par six and stop it forming stars so that that to be that that is extreme how the the sort of physical question we're entering is what what can stop the this gas cloud from forming stars as you compress it to such a degree so we have a fair idea of what might be causing that it's a combination of of different things obviously increase in magnetic magnetic fields the huge amounts of of kinetic energy in that gas and the gas is effectively being pushed to very very high densities by things like the external pressure and by the the strong surrounding gravitational field and a lot of the gas is dense but it's not self-gravitating so there's a figure is trying to show that here so what there's a paper we published a few years ago we take this spectacular almond image of this gas cloud and we ask the question well what does this what's this density distribution look like so we've got this the the image here in orange on the left what we've done is we've done a probability density function of the column density so on the x-axis is basically the the density of the cloud and on the the y-axis is basically the number of pixels at that density so you can see this is makes a really sort of nice log normal shape and that's what you get predicted by if the gases is very turbulent I can explain why that is if if anyone's interested but the key point here is that vertical dotted line here this is that universal density threshold so remember the the the ladder plot I showed where everything was lying on this nice line the the prediction here is that at a density of about 10 to the 4 particles per centimeter cubed everything begins forming stars and what was clear from this almond map is that pretty much all of this gas cloud is above that density and yet virtually none of it's forming stars the only bit that's forming stars is this tiny little bit that's just off that log normal at the very high density and there's one little clump in here that we now know this is another beautiful almond image that made by Dan Walker this is now one sort of thousand day use scales where we can see these are little protosteller outflows coming from from stars right within there but most of this cloud is doing dilly squat it's above this density and it's doing nothing so that can't be so it cannot be a universal density threshold there has to be additional physics that's stopping this cloud forming stars and so there's been lots of work on this and this is just calculations if people are interested the take home message is that the local environment is really important it really matters on these small scales if you have a lot of excess velocity emotions whether that you know the kinetic energy in the gas that can be from injected from shear it can be for whatever reason if you have strong magnetic fields all of these things mean that star formation is strongly environmentally dependent this this just right what I'm showing you here fundamentally rules out star formation being environmentally independent just it can't happen so we know that star formation must be environmentally dependent the question is what is the key physics that's driving that okay so we had these two potential explanations and unfortunately as always seems to be the case that it looks like probably both of them play a role both galactic scale processes the things that drive the gas in and shape the big picture shape the sort of big scale gas motions but also what's happening right down on the size scales of individual forming stars both of these things and in fact it's probably the case that they completely interact with each other and it's you know it's a sort of oh where are we how do we make progress on this well that's where we get to aces so aces the the ALMA CMZ exploration survey and its goal is to do exactly that so aces is going to drive the the the properties of all of this star forming gas all the way from 100 parsec scales all the way down to individual forming star scales and it's going to measure the the the gas the young stars and everything in between from all these different scales so I'm going to spend the last probably two minutes just giving you a very quick lot something meter expert so there's a whole lot of information these sites I can come back to if people are interested in but I just want to really spend time on one key figure and that's this figure here so what we're showing you here is lots of different colors I like to draw your attention to everything except the red so the red is aces that everything except the red is what was there before so the galactic center is one of the most highly studied regions in the sky and there have been lots of pencil beam studies of this object and that object and we've learned a lot about star formation but the thing that's been missing is we have had no way it's been completely each object is a little isolated island so if you look at the blue and the orange there these little pencil beams and we've not been able to link that to the the big scales that we now know are crucial in setting the small scale scale properties and again it's the small scale properties to then feedback so aces what one of the the real step changes is that the red outlines this is the inner 200 parsecs aces is going to map the whole thing all of this red all of that dense class all of the dense gas clouds all of where we saw those supernova remnants and the young stellar objects and the very center all of it from 200 parsec scales all the way down so it's down to one mark 0.05 parsecs and a whole bunch of different lines and we'll measure all of the you know have a complete census of everything down to 0.2 kilometers second resolution so that's about the the thermal about the thermal lines so yeah there's I'm going to skip over there's a whole bunch of please a whole bunch of information on this you know what lines we're looking at what sensitivities are you know what the structure the project is and our key sort of science goals I'm happy to come back to that I'm not really sure what people are interested in so I've got lots of information there but it's very easy to join if you're interested it's just the case of you know contacting myself for one of the other co-pias and filling out a Google forum and you know we'd love to have you have you join you know just even a discussion if you don't want to join this discussion how can we make this data available most useful for the high energy community that would be absolutely fantastic so please do do that right that is so I just thought there was a question in the chat I'll come back to that oh dear I can't sorry I've lost my cursor not probably in the SIVA I can read it so there was a question from could you hear me SIVA okay yes so there was a question at late so I've got one more slide should I just finish with my my last slide okay if I can move it so I'm having I don't know if you can hear that my thing seems to be frozen so I'm going to stop sharing now there we go okay so finally sorry about that little technical hitch so final slide what role can studies of the CMZ play well right at the start we're seeing the the the CMZ is the nearest environment that we can simultaneously observe many of the extreme processes that shape universe but it's our you know understanding the star formation feedback is currently limited by the lack of this kind of unified framework from linking from from the 100 parsec scales down to individual star formation and feedback points and ACES will sort of bridge that gap and it's open to the community so if you're interested please let me know and that is my final slide


OK, let's get started. I'm Steve Kobus, and this is Life of a Pixel. I've been working on Chrome for about six years. And when I first started, I was a little overwhelmed by the complexity of the code base. There were a lot of moving parts, and there weren't a lot of resources that really explained how it all fits together. I remember I spent a lot of time just tracing through the code, like this piece calls that piece, and that piece calls another piece. But where's the part that actually puts the pixels on the screen? It was hard to see the complete chain of causality. But I figured it out, and I wrote it down, and it became this talk. So my goal is to present the entire pipeline to you in 45 minutes, show you what each step looks like and why it's there. The slides have a lot of pointers to actual code, which I think helps to make things more concrete and can serve as a future reference. But it means they're pretty dense, and I won't try to explain every class name on every slide in complete detail. If you want to explore further on your own time, the slides are at bit.ly-slash-life-of-a-pixel, and you can email me there if you want to know more about something. One of the challenges of a talk like this is the architecture is constantly evolving. So just be aware that I'm focusing on the current state of the code that is shipping today in Chrome's Canary Channel with the default flags. And in many areas, there are efforts planned or underway that change the picture dramatically. I'll mention some of them in passing, but I'm not going to talk too much about the history or the future directions. So this talk is about rendering, which is the process of turning content into pixels. I'm going to talk a little bit about content, and then I'll say a little bit about pixels, and then we'll dive into the magic in the middle. From a Chrome browser perspective, content means everything in the red box where the content of the page appears. And outside of content is browser UI elements like the tab strip, the address bar, the navigation buttons, the menus, et cetera. In Chrome, the content area is represented by a class called web contents, which is the primary public interface that the content namespace exposes to the embedded. As John mentioned in the last talk, a key part of Chrome's security model is that rendering happens inside a sandbox process. So an evil website might exploit a vulnerability in the rendering code, but the sandbox keeps the damage contained. So the browser itself is safe, and the other tabs are safe. So web contents encapsulates creating and managing renderer processes, and most of the things we're going to talk about today happen inside the renderer process. You've probably heard of Blink. We call Blink the rendering engine, but it's really a subset of the code in the renderer process that sits underneath the content layer. And the lines around what's in Blink versus what's outside of Blink have some historical baggage and are evolving over time. But essentially, you can think of Blink as the place where we implement the semantics of the web platform and all of the concepts and logic that are defined in the web specs. From a rendering perspective, content is the generic term for all of the code and assets inside a web page or the front end of a web application. So obviously, that includes HTML, which is text. Markup surrounding the text, like the paragraph tags, an example, includes CSS or style, like this style rule, which selects all the paragraph elements and assigns the value of red to the color property. So that tells the engine to render all the paragraphs of red text. And then there's JavaScript. And pretty much everything about the state of the rendering can be modified on the fly with JavaScript. So you can change the text, put new markup in, change style values on specific elements, change style rules, et cetera. And of course, you have external resources like images which can be embedded in the HTML.  Of course, there are many other kinds of content that are rendered in special ways that I'm not going to go into today. So just to emphasize, a real web page is just thousands of lines of HTML, CSS, and JavaScript delivered in plain text over the network. Web pages don't require any sort of compilation or packaging like you might find on more traditional application platforms. And the implication of that is that the source code for the web app is literally the input to the browser's rendering pipeline. And the simplicity was key to the success of the web in the early days because you could just write some markup in a text editor and suddenly you have a web page. At the other end of the pipeline, Chrome has to put pixels on the screen using the graphics libraries provided by the underlying operating system. And on most platforms today, that's a standardized API called OpenGL. On Windows, there's an extra translation to DirectX. And in the future, we may support newer APIs, such as Vulkan. These libraries provide low-level graphics primitives. But you see things like draw this polygon at these coordinates and to move at this buffer of virtual pixels. But obviously, they don't understand anything about the web or HTML or CSS. So I've explained where we're starting and where we're trying to go. So the overall goal of rendering is to turn HTML, CSS, JavaScript into the right OpenGL calls to display the pixels on the screen. But as we go through the talk, keep in mind a second goal, which is that we want the right intermediate data structures to update the rendering efficiently after it's produced. And answer queries about it from script or other parts of the system.  So it'll turn content into something and then turn that thing into another thing and so on. And that's partly because rendering is too complicated to express as a single operation. But it's also because those intermediate data structures let us update the rendering more efficiently later on. That's goal number two from the previous slide. Because maybe we don't need to run all of those stages for every update. And once we've finished describing the first version of our pipeline, I'm going to come back to this notion of updating the rendering and introduce some new concepts that help us optimize it. And that let's jump into the first stage. We're in Blink Code now in the renderer process. And the first resource that comes down from the network connection is typically HTML. The other resources types like CSS, JavaScript, Images are either embedded in the HTML or brought in as secondary resources. So our starting point for rendering is the HTML parser, which receives that stream of tags and text. And HTML tags impose a sort of semantically meaningful hierarchical structure on the document. For example, that div might contain two paragraphs and each paragraph might have some text inside it. And so the first step in rendering is just to parse those tags to build an object model that reflects this structure with parents and child and sibling pointers. And we call that the document object model or DOM. The DOM is a tree of the sort found in computer science where the trees are upside down. And this is the first of many trees that we'll encounter in the engine. And the reason they're all trees is that they're all based on the DOM, which is based on the structure of HTML. When we talk about nodes, we usually mean the nodes of the DOM tree. The DOM serves double duty as both the internal representation of the page and the API exposed to JavaScript for querying or modifying the rendering. So the V8 JavaScript engine exposes the DOM web APIs that create elements or pen child as thin wrappers around the C++ DOM tree through a system called bindings. There can actually be multiple DOM trees in a single document because HTML supports something called custom elements. So you can build these fancy reusable widgets whose internal DOM is encapsulated in something called a shadow tree. And the shadow tree can have placeholders called slots for the embedder to inject some markup. That's just something to be aware of if you're doing any DOM traversals. Instead of all these separate trees, what you often want is something called a flat tree traversal, which descends from the custom element into the shadow root and descends from a slot into its assigned node in the host tree. Now that we've built the DOM tree or DOM trees, it's time to look at the styles. And each style rule has a selector, in this case it's and a list of property values. The selector selects a subset of DOM nodes that it should apply to, in this case, the two paragraph elements. And the style properties are the control knobs that web authors use to customize the rendering of DOM elements. So there's a style property for just about any setting you might imagine for changing formatting or colors or margins or positioning or backgrounds. And sometimes a style influences only that particular node and sometimes it influences the rendering of the entire DOM sub tree below the element it's applied to. For example, a rotation transform on a node. You're rotating not just that node, but everything rendered by the descendants of that node. Now, so not only are there lots and lots of style properties, but it can be non-trivial to determine which elements of style rule actually applies to. Like this one is every alternating paragraph inside any div that does not have the class named foo. And some elements may be selected by more than one rule with conflicting declarations for a particular style property and there's complicated precedence semantics. So the style engine's job is to sort all of that out. When we first encounter a style sheet, we parse the CSS text into an object model of the style rules, which has rich representations of the selectors and the property value mappings. And these style rule objects are indexed in various ways for more efficient lookup. Another thing to note in the upper right corner of the slide is that style properties are defined sort of declaratively by this giant JSON file in the Chrome code base. And a lot of those C++ classes that represent specific properties in the object model are auto-generated by Python scripts at build time. So once we have an object model representing the parsed style rules, we have to figure out how those styles actually apply to our DOM elements. Remember, the style rules are selecting complicated overlapping sets of nodes with precedence semantics. But at the end of the day, we wanna know the resolved value of any given property for any given DOM element, like what's the top margin of this particular div or what's the background color of the body. So style resolution takes all the style rules and walks the DOM tree with pre-order traversal of the DOM tree, producing a computed style for each element. Computed style is just a giant map of property to value. So it hangs off the elements and says this element is red and italicized and has a two-inch margin or whatever. And that's the output of the style engine. Chrome Developer Tools lets you actually play around with this because you can highlight an element, look for the tab that says computed and values there are mostly coming straight from the blink computed style object. Although they're not exactly the same because there's a few properties that actually get augmented with layout information. For example, the default width of the div as far as the style engine concern is just auto. But if DevTools will show you the actual pixel width like 800 pixels. So now that we've built the DOM and computed all the styles, the next step is to determine the visual geometry of all the elements. And you can think of an element as occupying, you can think of each element as occupying one or more rectangular boxes inside the content area. So the job of layout is to just compute the coordinates of those boxes. In the simplest case, layout places blocks one after another in DOM order, descending vertically. We call this block flow because the blocks flow down the page. The content inside a block is broken into lines and individual runs of texts and inline elements like span generate boxes within the lines. In Western languages, the inline boxes flow from left to right but in languages like Arabic or Hebrew, they flow from right to left. To figure out where text runs start and end and where to break a line of text onto the next line, we have to measure it using the fonts from the computed style. And layout uses a library called harfbuzz to select glyphs that correspond to the characters in the text and compute the size and placement of each glyph accounting for fancy things like kerning and ligatures. Layout also computes multiple kinds of bounding rects for a single element. For example, if the insides of an element are larger than its declared border box, we have a situation called overflow. And layout has to keep track of both the border box rect and the overflow rect. The interesting thing about overflow is you can make it scrollable. So another side effect of layout is computing scroll boundaries. That's like min and max scroll offset and a reserving space for the scroll bars. The most common scrollable DOM node is actually the document itself, which is the root of the whole tree. But CSS lets you make any element scrollable. More complex layouts are there for things like table elements, styles that specify breaking content into multiple columns, or floating objects that sit to one side with content flowing around them, or East Asian languages that have text running vertically instead of horizontally. But in all of this note, how the DOM structure and the computed style values like float left are the inputs to the layout algorithm. So each pipeline stage is using the results of the previous stages and producing outputs that influence future stages. Layout operates on a separate tree linked to the DOM. We call this the layout tree. And the nodes in this tree implement the layout algorithms. So there's a bunch of layout classes, like layout box, layout inline, layout table, et cetera, depending on what layout algorithm the element needs to use. But they all inherit from the common base class layout object. So every node in the layout tree is a layout object. Before we can do layout, we have to build the tree. So that happens actually at the end of a style resolution stage. But then the layout stage is just traversing that layout tree, figuring out all the geometry data, figuring out the line breaks, the scroll bars, et cetera. The last slide showed DOM nodes as being sort of one-to-one with layout objects. And that's true in simple cases, but there's some notable exceptions. For example, if you set display none on a node, then it does not create a layout object because we're not going to render it. And it's not occupying any space in the constant area. And sometimes you can have a layout object without a node. For example, layout block and layout inline are not allowed to be siblings. So if your inline and block DOM elements are siblings, we create an anonymous layout block to wrap the layout inline. It's even possible for a node to have more than one layout object. And finally, we talked about shadow DOM a little bit earlier. So the layout tree is based on the flat traversal, which includes all of the shadow roots. So a layout object might even be in a different DOM tree from its layout container. The layout engine is in the middle of a rewrite called ng for next generation layout. So right now, the tree has sort of a mixture of legacy layout objects and ng layout objects. And the biggest change in ng is that we have a cleaner separation of inputs and outputs. We used to put all of it on the layout objects, and the layout object had a list state that got modified during the layout. And it was hard to scale. With ng, we have immutable objects for the inputs, the algorithms, and the results of the algorithms. And this lets us be a lot smarter about caching. And it makes it easier to build new layout algorithms. OK, we understand the geometry of our layout objects. Now we're ready to paint them. And paint is recording a list of paint operations. Paint ops is where we start to get things that sort of look like graphics API calls. So a paint op might be something like draw a rectangle or draw a path or draw an image or draw a blob of text. And it would have parameters for the coordinates and the colors and so on. So this list of paint ops, they're wrapped in things called display items that have pointers back to the layout objects. And that whole thing is wrapped up in something a container called a paint artifact. Paint artifact is the output of the paint stage. But so far, notice we're just building a recording of the paint ops that can be played back later. So we're not actually executing the paint ops yet. And we'll see why that's useful in a minute. It's important to paint elements in the right order so that they stack correctly when they overlap. So paint uses something called stacking order, which is a little different from DOM order because it can be controlled by a style property called Zindex. And in this example, the yellow box paints after the green box, even though it comes first in the DOM. It's even possible for an element to be partially in front of and partially behind another element. And that's because the way CSS is written, paint runs in multiple phases. And each paint phase does its own traversal of something called a stacking context. So now the blue box is painting after the green box within each phase, but the background phase paints all of the backgrounds before the foreground phase paints any of the text. So we built some paint ops. We haven't executed them yet. And the paint ops and the paint artifacts are executed by a process called rasterization. And raster turns some or all of the paint ops into a bitmap of color values in memory. So each cell has some bits that encode the color and transparency of a single pixel. Raster also includes decoding any image resources that are embedded in a page. So the image will come off the network in a format like JPEG or PNG. And the paint up will reference the compressed data. Then raster is where we invoke the appropriate decoder to decompress the image into a raw bitmap. Okay, so we said bitmaps and raster are in memory. And usually it's GPU memory, referenced by a texture identifier in OpenGL. In the past, we would first raster to main memory and upload it to the GPU. And we still do that in some cases, but modern GPUs can actually run shaders that produce pixels directly on the GPU. And this mode is called accelerated raster. But in either case, the result of raster is a bitmap of pixels in some kind of memory, not yet on the screen. So there's some steps ahead of us. Raster issues OpenGL calls through a library called Skiya. And Skiya provides sort of a layer of abstraction around the hardware. And it understands some more complex things like paths and Bezier curves. Skiya is open source and maintained by Google. It ships in the Chrome binary, but it lives in a separate code repository in third party. It's also used by other products, such as the Android OS to do their own rendering. So when it's time to raster our display items, those paint ops are making calls onto an SK canvas object. That's a Skiya canvas. And that goes through some more abstractions inside Skiya. Skiya's hardware accelerated path actually builds another buffer of drawing operations, which gets flushed at the end of the raster task. During that flush is where we get to what looks like the actual GL commands that are building the text room. But there's a problem. So those GL calls aren't quite what they look like because of the security sandbox. This is in the renderer process and Skiya can't make system calls directly from the rendering. So what actually happens here is we initialize Skiya. We give it a table of function pointers and we say here is the GL API for you to use. But instead of real open GL, they're backed by these stubs in Chrome that proxy the calls into a different process in a special data format called a command buffer. And the GPU process decodes the command buffer and issues the real GL calls through its own set of function pointers. John talked a little bit about the GPU process. It exists first to escape the renderer sandbox for these GL calls. And secondly, because your actual graphics drivers might be unstable or insecure and isolating the GL in the GPU process gives the browser some protection from that. Like if the GPU process crashes, Chrome can just start it back up again without you even noticing. There's also a newer mode where instead of shipping command buffers below Skiya, we ship the original paint ops into the GPU and run Skiya on the GPU side. This has some performance benefits and will make things easier when we move to Vulkan which is the next generation replacement for open GL. But that's still being built. On most platforms, the GL pointers inside the GPU process are the real open GL. So they're initialized by dynamic lookup from the systems shared open GL library. On Windows, we have yet another indirection where they come from a library that we provide called Angle represented by the red box that's at an angle. And Angle's job is to translate open GL to DirectX which is Microsoft's API for accelerated graphics on Windows. There's also native open GL drivers for Windows but apparently they are good enough. Okay, let's review. So we've gone all the way from content through DOM, style, layout, paint, raster and GPU to pixels in memory. But it's about to get a little more complicated. And to motivate this, first remember the rendering is not static. There are all kinds of things happening during the browsing session that can change the rendering dynamically. And running the full pipeline is expensive. So we wanna avoid as much unnecessary work as possible. So think about change over time. We have this concept of animation frames. Each frame is a complete rendering of the state of the content at a particular point in time. And when we want smooth motion for scrolling or zooming or CSS animations of page elements, the gold standard is 60 frames per second or 60 flips which is the v-sync interval on typical display hardware. And that means if we take more than one sixtieth of a second to render the frame, the motion will stutter and look janking. So one obvious optimization is to keep track of what's changed and reuse things that haven't changed. So each pipeline stage has its own concept of granular invalidation where you can say, for example, this node needs its layout recomputed on the next frame. And the next layout pass will go through the tree but it will only run layout on the nodes that have been marked as a meeting layout.  Rerunning paint and raster for the entire region after every scroll event would be pretty expensive. The other thing to keep in mind is that everything on the main thread competes with JavaScript. So even if you're rendering pipeline is super fast and it's still to get jank if the script is doing something expensive before the rendering even starts. So this sets the stage for an optimization that we call compositing. The compositor introduces two fundamental ideas. Break the page into layers and combine them on another thread. So a layer is like a piece of the webpage that can be transformed and rastered independently of the other layers. If you've ever played with layers in Photoshop it's a little bit like that. DevTools gives you this 3D view of the layers. And you can see that we're building them on the main thread and sending them off to another thread called Imple. Imple means compositor thread for reasons that are obscure and historical. The orange border here shows that we've created a layer for a DOM element so that we can animate it efficiently. Now instead of redoing raster on every animation frame, which would be slow we raster the layer once and then we move that bitmap, the rastered output we just move it around on the GPU. And if a container has a layer then it's children become part of that layer. So you can think of a layer as like capturing a subtree of content for independent raster. And it turns out all the important cases of fluid motion of part of a page can be expressed in terms of composited layers. Like we can have layers that are transformed by animation or scrolling or pinch zoom and scroll containers can clip a layer of scrolling content so that it's only visible within certain region. And that means the compositor thread has everything it needs to actually handle like scroll input events while the main thread is busy with other things like JavaScript. So the browser process gets in from the operating system that the user like move their finger on the touchscreen and it forwards that to the renderer process where the compositor thread actually gets the first crack at handling it. And if it's just scrolling a composited layer then the compositor can do that without even talking to the main thread because it already has the rastered output of that layer. But in some cases the compositor might say, no, I can't handle that. Like if you scroll something that doesn't have a layer or you have blocking JavaScript event listeners then the input thread, the compositor thread will forward that input to the main thread. And that takes longer because the main thread is busy. So composited layers are represented by this graphics layer class in Blink which wraps a CC layer. CC stands for Chromium Compositor. And today the layers are created from the layout tree by promoting things with certain style properties like animation or transform. The other thing to note here is an intermediate step called the paint layer tree. So paint layers are sort of like candidates for layer promotion. So not every paint layer necessarily gets a composited layer. Elements that are scroll containers actually create a whole set of special layers for things like the borders, the scrolling contents, the clip and the scroll bars. These are all managed by a class called composited layer mapping. So building this layer tree is a separate life cycle stage called the compositing update. And today it happens after layout and before paint on the main thread and each layer is painted separately. So the layer will have its own display item list with all of the paint ops that were produced when that layer was painted. When the compositor draws a layer, it's applying various properties to the layer like the transformation matrix, the clip, the scroll offset effects like opacity and reflection. And the data for those properties are stored in what we call property trees. We used to store them on the layer itself but we've recently decoupled properties from layers in order to make the compositing architecture more flexible. Like in theory, the compositor thread could actually apply these properties to any chunk of paint ops that shares the same values for the properties even if it doesn't have a layer necessarily. But we're not quite at the point of doing that. So in the same way that the compositing update builds the layer tree, we have a stage called prepaint which builds the property trees. And in the future, we're gonna create layers after paint instead of before paint. So that's a project called composite after paint. And the goal of CAP is to let us make more flexible and fine-grained compositing decisions and to decouple some of the things where previously if you became composited, then it would have all these other effects on properties. So CAP requires that decoupling because paint, of course, needs to know about the paint properties. But in the future, it's not gonna know anything about the layers because the layers are gonna be created in the next stage which is the paint artifact compositor. So after paint is finished, we run something called the commit which is just updating copies of the layers and the property trees that we just talked about on the compositor thread to match the state of the main thread. The commit runs on the compositor thread with the main thread blocked so that it's safe to read the main threads data structures. So let's revisit what raster looks like now that we have compositing because remember the point of layers is that they raster independently. And layers can be big. Remember for a scroll container, we have a layer for the entire scrolling content and most of it might not be visible. So it'd be expensive to raster the whole thing if we're only gonna see a small part of it. So the compositor thread is actually dividing the layer into tiles and tiles are the basic unit of raster work. So tiles are rastered with a pool of dedicated raster threads and the compositor thread has this thing called the tile manager that's sort of creating the tiles and scheduling raster tasks on a worker pool prioritized based on the distance from the viewport. So if you're far away from the viewport it's not as important to raster right away but if you're like just below the viewport maybe you'll become visible really soon so we should raster that sooner. And so each raster task is just producing a bit of that for that particular tile. This slide doesn't show it but a layer actually has multiple tilings for different resolutions. So those are all combined into like a tiling set. Once all the tiles are rastered the compositor thread generates draw quads. And a quad is just like an instruction to draw a tile in a particular location on a screen taking into account like all the transformations and effects and things that were applied by the property trees. And each quad is referencing the tiles rastered output and memory. And all the quads are wrapped up into something called a compositor frame object which gets submitted to the GPU process which we'll talk about in a minute. But we've now reached this is the output of the renderer process. Remember we said the renderer was producing animation frames ideally at 60 flips or at whatever speed it's able to produce them. So these are the frames that it's producing as the compositor frame. So we've seen that raster and drawing are both happening on the compositor threads layer tree after the commit. But we've also seen that raster happens asynchronously on a pool of words of threads. So this creates a little problem when a new commit comes in because we're not ready to draw it yet because it hasn't been rastered but we'd like to continue drawing something. We'd ideally like to continue drawing tiles from the previous commit while we're waiting for the new commit to finish raster. So we saw this by having two copies of the tree. The pending tree is the one that's receiving the commit and rastering itself. And when it's finished rastering and ready to draw we have a step called activation which just copies the pending tree into the active tree. Okay, so now we understand how complete animation frames are produced by the compositor by the renderer and submitted to the GPU process. But remember there are multiple renderers submitting frames. You can even have like a website that has an iframe that embeds another website from a different origin and those sites will get separate renderer processes. But of course their output has to eventually be kind of stitched together. And actually the browser process has its own compositor generating frames for the browser UI outside of the content area. So all of these surfaces are submitting their frames to a thing in the GPU process called the display compositor which runs on the Viz compositor thread. Viz is like the service that's inside the GPU process that handles this short for visuals. And so the display compositor synchronizes these frames as they're coming in and it understands sort of the dependencies between them where surfaces are embedded inside each other. And Viz is also what issues the OpenGL calls that ultimately display the quads from the compositor frame. So the output of Viz is double buffered. So it's drawing those quads into a back buffer and it issues a swap command to make it visible on the screen. Display actually runs on its own thread in the GPU process. So those GL calls are proxied from the Viz compositor thread to the GPU main thread over command buffers similar to what we did for Raster. And the end result of display compositing is that the pixels are finally on the screen where the user can see them. So click recap. We've taken web content, built a DOM tree, resolved its styles, updated the layout, created compositing layers and property trees, painted the layers, committed the layers, paintups and property trees to the compositor thread, broken the layers into tiles, rastered the tiles on worker threads, copied the pending tree to the active tree, generated draw quads from the rastered output, submitted those quads to Viz and displayed them on the screen in the GPU process. Most of the pipeline runs in the renderer but the GL calls for raster and display are in the GPU. And the core rendering stages like DOM style layout paint are in blink code on the main thread but the input events for scrolling and zooming can hit the compositor thread and update layers there while the main thread is spacing. Okay, we are reaching the end of life of a pixel also known as death of a pixel. Don't worry if you didn't follow all the details we know rendering is huge and complicated and probably more complicated than necessary in some places. I hope we can make it simpler over time. In fact, a lot of the refactorings that are currently underway actually have that as a goal, making things simpler even though they're maybe adding complexity in the short term. So things might get better but I think we do need to invest engineering resources into simplifying the system, paying down our technical debt and explaining and documenting the complexity which I hope I can make some contribution towards. Anyway, there's the link to the slides again and if you have feedback about the talk, especially if there's anything I got wrong, please email me because I know I was thinking about ways to improve it.


Hey everyone, welcome to day 6 of Brugmas! In this video I'm going to be going over Backroom's level 57, aka the Art Gallery. This level is a very safe level, and it's easily the chillest one that I'll be going over this week, except for Sunday's episode, so sit back and relax and let's get into the explanation, shall we? Level 57 is classified as a class zero difficulty, and it's safe, secure, with no harmful entities. The level physically looks like a big open art gallery, and it's made up of two distinct parts. These two sections are the studio and the gallery. The first one you'll be in is the gallery, which just looks like a normal art gallery. The walls are big and blank, and the lighting is ambient and chill, you know, like just a relaxing walk through art gallery. The problem is, there's no regular art, like you're not going to see a Mona Lisa, no Salvador Dolly. Instead, the paintings you're going to see are paintings of Backroom's levels. Now the paintings are insanely accurate and detailed, and they literally look just like the levels they're based off of, even the smallest details are there. There's also paintings with floor plans and layouts of different levels, including this level, level 57. It's kind of like a little map, so if you get lost here, find that painting, and you'll be able to see a rough outline of everything here. Even though there's this map, the level is known for being large and kind of confusing to follow, so you're probably going to get lost. Just have fun with it. Sometimes an entity called the artist can be seen touching up the paintings and fixing errors and that sort of thing, but it seems that this artist is the only thing that can actually touch the paintings. Like if you try to touch the paintings, you won't be able to because it's like a mental block barrier.  It's so strange. And so far, no one has been able to resist this effect, which means no one knows what happens if you did touch one. The next part of the level is the studio, and you can get here by following the level map painting or just by getting lost and fighting it somehow. It looks like a set of metal double doors, and to get to it, just walk through that and you'll be in the studio, which itself is just a big open area filled with tables and art supplies and paintings that are half done, that type of thing. It just looks like a regular old studio from real life. The only weird thing is that it changes when no one is inside of it because it looks different if you go back in.  It'll look differently as layouts will be all changed. Another weird thing here involves the half-finished paintings because these paintings are not backroom levels and are actually paintings of real life places and people. I thought could be a half-done painting of a meadow or a landmark or something like that, but these paintings are never seen outside in the gallery, then they're only seen in the studio, which I think is weird. Let me know in the comments why you think that's the case. The only entity here is the artist entity who's a very passive chill one that looks like a young woman who's of average height and has long brown hair. The artist never leaves the studio unless she's fixing a painting or making a new one for the gallery, but that's not the weird part. What's strange is that even though she seemingly painted hundreds of backroom levels and entities on the walls for the gallery, she actually has no knowledge of them. Like when somebody asks her about the backrooms, she can't answer and she says she has no idea what they are. So how does she know what they look like? She's painted all these levels. How, though? I have no idea. Let me know in the comments how you think she knows. I have no clue. To enter the level, you can no-clip through a randomly appearing painting on level zero itself and to exit, you can convince the artist to lead you to the exit, which will be inside of the studio most likely and this exit seems to only lead to level 21. You can also try to no-clip into a painting in the gallery, but if you do that, it'll randomly send you to a level and it won't send you to the level that you're looking at, so beware of that. So yeah, this is just a chill art style level with an artist entity that paints pictures that she has no idea what it means. Sounds cool to me. That's it for the video. Hope you enjoyed it. Thank you so much for watching until the end. If you are still watching, comment artistbrugly and I'll heart everybody's comment that I see. Also while you're down there, check out the merch in the top link if you're interested. I know y'all are probably sick of me saying that by now, but I mean, it's pretty cool merch. Let's be real. Also, check out Brugly 2 and my SCP channel, Spookly, tons of content all around for everyone to enjoy. Hope you find something you like. Thank you for everything. I love and appreciate all of you and I'll see you in tomorrow's episode for day seven. Peace.


rules of good behavior that apply to dealing with police officers. The first is that their job comes with special authorities and special responsibilities. These are balanced in law with some tipping in favor of police authorities. They act as law officers. The natural police function includes maintaining the peace and scene to domestic tranquility. These derive from the common law of England. Their U.S. authorities and responsibilities are further influenced by the sovereign rights of citizens. These rights are recognized even without government, otherwise accepting significant citizens sovereignty over government. Appropriate authorities and responsibilities are written into the purpose for our having a government, as found in the preamble to our Constitution. Like much of the common law, police authority had to be reborn after the American Revolution. Police authority and responsibility have been largely codified in written legislation. Our courts have accepted legislation to be of greater authority than the principles of the common law. Still, these authorities and privileges are based on delivering justice and maintaining domestic tranquility. There is a natural reason to support the police so long as they are about the business that we the people set upon our Republican form of government. The most definitive authority is fulfillment of warrants. A warrant provides the authority to act on behalf of we the people as represented by a judge and based on evidence and an oath or affirmation of someone generally noted in the warrant. A warrant gives the one who serves it police powers to do what is in the warrant and authorizes nothing beyond this. The first intelligent step in being presented with a warrant is to receive and read it carefully. A police officer cannot act on a warrant with special authority until other people affected have had opportunity to receive that warrant. A citizen who is seized or constrained or whose property is to be searched and or taken has to have opportunity to read or to hear the authorized actions. Police authority under a warrant is specifically limited by what is written into the warrant. If authority is not specifically passed to the officer, he or she acts only on normally available authority. Take the time to read the document or if you are providing support to a family member you can read it to them. This is a sovereign right and only as you receive it without choosing to read it are they initially free to violate your person or property. If a warrant says the officer may enter a home and search for something specific then they may do so. It does not grant authority to look for other things. It does not grant authority to break locks or to do other damage unless this is specifically written into the warrant. It does not grant the entrance of general police authority into a private dwelling that is searched. Warrants are strictly observed as to the authority they grant to the one who serves it. As a warrant are not to be acted upon through inappropriate resistance, they are always a judge's order to the officer and most judges will be supportive of citizen complaints of overzealous use of the judge's granted authority. If the police damage property or do injury in violating the limits of their granted authority a judge can direct that the officer be prosecuted for crimes or take personal responsibility for the losses or damages. While there is no way for a citizen to force a judge to act in support of his or her warrant's limits the overzealous police officer is disrespecting judicial authority with witness to the act. It is up to the judge whether this insult is to be answered immediately or to be taken up privately with the police authorities or to be ignored. Other police authority is natural and is granted in full light of the danger of dealing with the worst of humanity. Police must assume that they work in a hostile environment. They have a special right to protect and defend themselves as long as they see to the peace and as they perform legal functions in defense of domestic tranquility. It is because of police pressure and authorities to act that we can walk among others in public places without general fear of being victimized by criminal conduct. The citizen rule is that you do not interfere with police as they perform their common duties and most certainly you never publicly confront them in a hostile matter. If you have a problem with a police officer you seek opportunity to present it to a judge and then it is the judge who has authority to restrain or otherwise redirect the officer of the law. If you engage in rioting or public hostility you are the one who is disturbing the peace and threatening the public tranquility of others. Citizens should not allow themselves to become part of the problem that the police are authorized to resolve. It is never wise to resist an officer who has reason to believe that he is engaged in his policing duties. Complaints should not be raised to the officer personally but may be noted as a reason for the citizen to witness his actions to a court of proper jurisdiction. The trained officer knows that this is a citizen's authorized action and will not normally act in threat or harm to one who seems willing to take it to higher authority. The one exception is the police officer who appears to be engaged in a felony. There is a citizen right to interfere whether alone or en masse to prevent serious crimes. The trained officer will know enough to back away on pain of prosecution. If the crime is complete citizens can engage in a citizen arrest of the officer but they do not have the special police authority or responsibility behind their acts. This should be the exception only undertaken where immediate action is demanded by the specific situation. Officers are otherwise authorized to direct the public and individuals as necessary to maintain the peace and to secure domestic tranquility for the larger public. And much of this is regulated by laws and codes that are not common knowledge. Police can prevent gatherings that are likely to be disruptive or lead to violence or criminal activities. They can direct citizens to take personal actions so long as these are not criminal. They can stop and challenge persons who fit the description of known criminals or who act in a manner that indicates that they may have engaged in known crimes. An officer who witnesses a crime in progress or being completed has immediate authority to take charge of the situation and act to restrain any criminal suspect. It is most unwise for any common citizen to interfere and any citizen challenge can easily be treated as interference with an officer of the law performing his duties or as an obstruction of justice or even as supporting the criminal act. The interference can even be approached as aiding and abetting the criminal with yourself subject to prosecution as if you took part in the crime. The general rule is to let the public officer do his job and even support his or her action as you are able. Otherwise, do your best to keep out of the way protecting yourself and others who might become victims of the situation. There may be some regulations such as on reckless pursuit of a fleeing felon but these are internal to the police and their the way they govern their own behavior they do not grant any special authority or responsibility to the citizen who is in the vicinity of police activities. There is nonsense being presented as social justice that police are not to preferentially stop people who are of one race more than another or who wear traditional dress of some ethnic or religious origin. This is nonsense because profiling suspected criminals is a police function. Where the description of a criminal suspect includes race or demonstrated tradition these are what need to be included in their profiling and they are expected to preferentially challenge those who meet that description. If the suspect was wearing a beard they stop bearded people. If he wore a red jacket they preferentially stop those wearing red jackets near the scene of the crime. If the crime occurs in a black neighborhood which is not frequented by those of other races then they preferentially stop black suspects. If they are trying to meet racial goals they would not be doing their function as police officers. Criminal law grants authority based on the crime not on the description of the suspect. Police officers are paid to be biased against criminals. There are certain crimes that are committed with much greater concentration among some peoples than others. Honor killings for example are within the Arabic culture and come within the definition of homicide in America where there is indication of a homicide being an honor killing. It is right to act most aggressively in searching those who have Arabic names or exhibit other signs of adherence to that culture. Being personally biased against any race or creed or appearance is not part of the police authority. Acting on that bias is a public offense. It is also a matter for supervisory police notice more than for public reaction. We hear much of criminal wrongs committed by police and there are potential criminals in all fields of endeavor. The responsibility for managing police officer behavior rests with the management of police organizations. It is the leadership that is responsible for fulfilling the police function through the officers who are hired for that very purpose. If any police officer engages in crime it is also a police manager who has failed in his or her management of subordinate officers. Most criminal behavior by officers can be addressed by holding police supervisors personally liable right along with their guilty subordinates. Both are potentially responsible for results from police actions performed under color of police authority. Gaining performance through their employees is the very purpose for granting a police leader supervisory authority with authority comes responsibility. If police supervisors do not do their supervisory duties then it is right to also recognize that they are supervised by higher level officers and that they are also lacking in supervision. It is up to higher levels of management to challenge subordinate police supervisors who have responsibility for subordinates who misuse their authority. This aligns the larger police authority with the purpose of the public. It is basic management. It is recognition that the authority should never be granted without responsibility for exercise of that authority. With this we also have to address the larger police powers granted to non- police groups. Leadership largely incompetent in performing management has not been good in containing police authority nor taking responsibility for what administration and leadership has put in motion. That is a reality of law and government in modern America. It is that the legal community is largely unwilling to challenge or reprimand officers of the law for their fear that they might themselves be seen as contributing to the wrong through failure in their duties. It is of course their failure and exercise of management authorities that has contributed to the misconduct of officers. There is a recognizable amount of awesome them attitude in the exercise of police authority and it has given effect in supervisory management. Instead of a police management that gains something through the efforts of police officers we often find a police administration that simply directs what it feels is appropriate for those who hold authority granted to officers. In this current orientation police leadership has nothing to gain from change. Change is unlikely unless citizens come together and direct their government's police authority to their purposes. That is a proper direction for citizen self-governance.