It also looks like Cairo has a suite of performance tests checked into their repository: http://events.linuxfoundation.org/sites/events/files/slides/cairo_perf.pdf <http://events.linuxfoundation.org/sites/events/files/slides/cairo_perf.pdf>
—Myles > On Nov 3, 2016, at 12:32 PM, S. Litherum <lithe...@gmail.com> wrote: > > Some quick Googling reveals these open-source benchmarks: > MotionMark http://browserbench.org/MotionMark > <http://browserbench.org/MotionMark> > CaskBench https://github.com/ezhangle/caskbench > <https://github.com/ezhangle/caskbench> > Skia project’s collection of benchmarks > https://skia.googlesource.com/skia/+/master/bench/ > <https://skia.googlesource.com/skia/+/master/bench/> > Cairo-demos https://openbenchmarking.org/test/pts/cairo-demos > <https://openbenchmarking.org/test/pts/cairo-demos> > > Please feel free to try others not on this list. > > Thanks, > Myles > >> On Nov 3, 2016, at 12:19 PM, Brent Fulgham <bfulg...@apple.com >> <mailto:bfulg...@apple.com>> wrote: >> >> I would suggest “http://browserbench.org/MotionMark >> <http://browserbench.org/MotionMark>”. :-) >> >> -Brent >> >>> On Nov 3, 2016, at 12:17 PM, Rogovin, Kevin <kevin.rogo...@intel.com >>> <mailto:kevin.rogo...@intel.com>> wrote: >>> >>> Hi, >>> >>> What are some good 2D UI graphics benchmarks that are cross-platform-ish? >>> I'd think I need to port them to Fast UI Draw, but that is possible. >>> >>> I am very confident that Fast UI Draw will perform at the top by a large >>> margin. The more complicated and heavier the load, the better it will do. >>> >>> -Kevin >>> >>> -----Original Message----- >>> From: mmaxfi...@apple.com <mailto:mmaxfi...@apple.com> >>> [mailto:mmaxfi...@apple.com <mailto:mmaxfi...@apple.com>] >>> Sent: Thursday, November 3, 2016 9:07 PM >>> To: Rogovin, Kevin <kevin.rogo...@intel.com >>> <mailto:kevin.rogo...@intel.com>> >>> Cc: Carlos Garcia Campos <carlo...@webkit.org >>> <mailto:carlo...@webkit.org>>; webkit-dev@lists.webkit.org >>> <mailto:webkit-dev@lists.webkit.org> >>> Subject: Re: [webkit-dev] WebKit GPU rendering possibility >>> >>> It sounds like the primary focus of your work is improving performance. It >>> also sounds like the only benchmark you’ve run is an artificial one that >>> you constructed yourself. >>> >>> Given these two things, I would strongly hesitate to call our interest >>> "significant community enthusiasm.” >>> >>> Why don’t you start by running some of the many existing graphics >>> benchmarks with your library? >>> >>> Please correct me if my assumptions are mistaken. >>> >>> Thanks, >>> Myles >>> >>>> On Nov 3, 2016, at 12:50 AM, Rogovin, Kevin <kevin.rogo...@intel.com >>>> <mailto:kevin.rogo...@intel.com>> wrote: >>>> >>>> Adding a new GraphicsContext is what I want to do as it seems the path of >>>> least pain and suffering. However, all the other things of a backend I do >>>> not need to do. I do not know how to add a GraphicsContext backend in >>>> terms of makefile magicks and configuration. I also do not know the >>>> plumbing for making it active. In theory, FastUIDraw's GraphicsContext >>>> will work on any platform that does OpenGL 3.3 or OpenGL ES 3.0. What is >>>> the plumbing to do this? Years ago I remember that the build configuration >>>> is what governed what backend was built... and I usually just piggy packed >>>> onto another... years ago I remember there was like an SDL style backend >>>> that did not require a large toolkit, just SDL.. is that still alive? >>>> where is it? I could piggy back the work there if it still is alive... >>>> >>>> Also, to get permission to do this work, I need significant community >>>> enthusiasm otherwise I will not be able to justify the large amount of >>>> work needed. This is another area where I need a great deal of help. >>>> >>>> Best Regards, >>>> -Kevin Rogovin >>>> >>>> -----Original Message----- >>>> From: Carlos Garcia Campos [mailto:carlo...@webkit.org >>>> <mailto:carlo...@webkit.org>] >>>> Sent: Thursday, November 3, 2016 9:43 AM >>>> To: Rogovin, Kevin <kevin.rogo...@intel.com >>>> <mailto:kevin.rogo...@intel.com>>; Myles C. Maxfield >>>> <mmaxfi...@apple.com <mailto:mmaxfi...@apple.com>> >>>> Cc: webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>> Subject: Re: [webkit-dev] WebKit GPU rendering possibility >>>> >>>> El jue, 03-11-2016 a las 07:35 +0000, Rogovin, Kevin escribió: >>>>> Hi, >>>>> >>>>> The main issue of making a Cairo backend to FastUIDraw is clipping. >>>>> Cairo tracks the clipping region in CPU and does things that are fine >>>>> for CPU-based rendering (i.e. span based rendering) but are >>>>> absolutely awful for GPU rendering (from my slides, one sees that GL >>>>> backed QPainter and Cairo do much worse than CPU backed). FastUIDraw >>>>> only supports clipIn and clipOut and pushes all the clipping work to >>>>> the GPU with almost no CPU work. It does NOT track the clipping >>>>> region at all. I can give more technical details how it works (and >>>>> those details are why FastUIDraw cannot be used a backend for Cairo). >>>>> For those interested in where the code is located for clipping in >>>>> FastUIDraw, it is located at src/fastuidraw/painter/painter.cpp, >>>>> methods clipInRect, clipOutPath and clipInPath. Their implementations >>>>> are very short and simple and are quite cheap on CPU. >>>> >>>> I see. Then I guess adding a new GraphicsContext for FastUIDraw is the >>>> easiest and best way to try this out in WebKit. Would it be possible to >>>> just add a new GraphicsContext implementation? or would you also need to >>>> change other parts of the graphics implementation or the GraphicsContext >>>> API itself? >>>> >>>>> Best Regards, >>>>> -Kevin >>>>> >>>>> -----Original Message----- >>>>> From: Carlos Garcia Campos [mailto:carlo...@webkit.org >>>>> <mailto:carlo...@webkit.org>] >>>>> Sent: Thursday, November 3, 2016 9:27 AM >>>>> To: Rogovin, Kevin <kevin.rogo...@intel.com >>>>> <mailto:kevin.rogo...@intel.com>>; Myles C. Maxfield <mmax >>>>> fi...@apple.com <mailto:fi...@apple.com>> >>>>> Cc: webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>>> Subject: Re: [webkit-dev] WebKit GPU rendering possibility >>>>> >>>>> El jue, 03-11-2016 a las 06:58 +0000, Rogovin, Kevin escribió: >>>>>> Hi! >>>>>> >>>>>> Question answers: >>>>>> 1. Currently FastUIDraw has a backend to OpenGL 3.3 and OpenGL >>>>>> ES 3.0. One of its design goals is to make it not terribly awful to >>>>>> write a backend to different 3D API’s. >>>>>> 2. I think I was unclear in my video. I have NOT migrated ANY >>>>>> UI rendering library to use Fast UI Draw. What I have done is made a >>>>>> demo >>>>>> (painter-cells) and ported that demo to Fast UI Draw, Cairo, Qt’s >>>>>> QPainter and SKIA. The diffs between the ports is almost trivial (it >>>>>> really is just using those different rendering API’s). >>>>> >>>>> That makes me wonder, would it be possible to add a new cairo backend >>>>> based on FastUIDraw? That would make very easy to try it out with the >>>>> current GraphicsContext cairo backend. >>>>> >>>>>> 3. There are a few areas: >>>>>> a. Reduce some render to offscreen buffers. When I worked with >>>>>> WebKit YEARS ago, I saw a few instances of rendering to texture that >>>>>> are unnecessary and even harm performance for GPU rendering. The >>>>>> first example was where a brush pattern with an image and/or >>>>>> gradient applied is to be drawn tiled across an area. WebKit (at >>>>>> that time) first drew a single instance of that pattern to an image, >>>>>> then drew that image tiled. For GPU renderers we can (very easily) >>>>>> just do the repeat pattern (of both original image and gradient) >>>>>> from a shader. >>>>>> Another instance happens at RenderLayer where a new GraphicsContext >>>>>> “layer” is started on a transformation that has rotation or >>>>>> perspective. For FastUIDraw, this is not necessary, though if a >>>>>> layer is transparent, then it is. >>>>>> b. In addition, FastUIDraw has an interface so that if “what” >>>>>> is >>>>>> drawn is unchanged but the “how” changes, then a caller can cache >>>>>> the “what” to send to the GPU. To be explicit, “what” to draw is >>>>>> essentially attributes and indices and those values do NOT depend on >>>>>> the state of “how” to draw. Examples of “how” to draw: current >>>>>> transformation, brush to apply, clipping applied, stroking >>>>>> parameters (including dash pattern) and blending mode. I admit that >>>>>> I am quite proud of being able to use the same attributes an indices >>>>>> even if stroking parameters (stroking width, miter limit and dash >>>>>> pattern) change. Text rendering “what” to draw does depend on what >>>>>> glyphs one wants to use. Specifically, if drawing coverage font >>>>>> glyphs, then attributes and indices values change if one wants to >>>>>> draw the glyph biffer, but for the GPU rendered glyphs they do not. >>>>>> 4. The renderer implements full 3x3 transformations. However, >>>>>> the renderer does NOT implement out-of-order transparency. For a >>>>>> GPU, a >>>>>> 3x3 transformation is cheap (naturally!). The renderer does handle, >>>>>> with a very little additional overhead changing clipping even >>>>>> between nasty rotations or perspective changes. The demo >>>>>> painter-cells deliberately pushes and does lots of nasty clipping >>>>>> and the performance impact of it on FastUIDraw is very small. >>>>>> 5. Drawing text is a right pain in the rear. Currently, >>>>>> FastUIDraw has 3 methods to draw text: coverage, distance field and >>>>>> an original GPU algorithm that I devised for another open sourced >>>>>> project years ago. Coverage is needed when glyphs are drawn small >>>>>> and hinting becomes important. The original GPU algorithm keeps >>>>>> corners sharps and does a computation in the fragment shader to >>>>>> compute a coverage value. >>>>>> Distance field is a fall back which has render quality issues >>>>>> (namely corners are rounded) but is very, very cheap. >>>>>> I want to write an additional glyph renderer that is much faster >>>>>> than the original GPU method and keeps corners sharp. This new one >>>>>> is to use the ideas found in https://github.com/Chlumsky/msdfgen >>>>>> <https://github.com/Chlumsky/msdfgen> but >>>>>> I have a way to make the distance field generation much, much faster >>>>>> and handle natively cubics (instead of breaking cubics into >>>>>> quadratics) >>>>>> >>>>>> For convenience, below is a list of features FastUIDraw implements: >>>>>> 1. 3x3 transformation matrix >>>>>> 2. path stroking with anti-aliasing a. dashed stroking too >>>>>> b. miter, rouned, bevel joins c. flat, square and rounded >>>>>> caps 3. path filling against an arbitrary fill rule 4. >>>>>> “brush” >>>>>> a. linear gradients >>>>>> b. two point conical gradients (I call these radial gradients) >>>>>> c. >>>>>> images >>>>>> i. nearest, >>>>>> bilinear and bicubic filtering 5. Clipping a. clipIn >>>>>> against rect or filled path (with arbitrary fill rule) b. >>>>>> clipOut against path (with arbitrary fill rule) 6. Glyph >>>>>> rendering a. >>>>>> coverage fonts b. 1-channel distance field c. curve-pair >>>>>> analytic (original algorithm) 7. all 12 Porter-Duff blend modes >>>>>> >>>>>> However, I still have work to do: >>>>>> 1. anti-alias path fills >>>>>> 2. anti-alias clipping >>>>>> 3. more glyph rendering work >>>>>> 4. some optimizations related to culling on path-fills 5. >>>>>> dash pattern adjustments from contour length as found in http >>>>>> s://www.w3.org/TR/svg-strokes/ <s://www.w3.org/TR/svg-strokes/> 6. >>>>>> the analog of >>>>>> GraphicContext’s begin/endTransparencyLayer 7. The >>>>>> blend/combine/transfer modes of W3C that are not from Porter-Duff. >>>>>> >>>>>> At this point, I need to garner interest to be able to get time to >>>>>> work on this project at my employer. The stronger the enthusiasm I >>>>>> can get the better my chances for continuing the work. >>>>> >>>>> This looks really interesting, I think the GTK+ port could benefit >>>>> from this if it eventually can be used as a cairo replacement. >>>>> >>>>>> Best Regards, >>>>>> -Kevin Rogovin >>>>>> >>>>>> From: Myles C. Maxfield [mailto:mmaxfi...@apple.com >>>>>> <mailto:mmaxfi...@apple.com>] >>>>>> Sent: Thursday, November 3, 2016 1:30 AM >>>>>> To: Rogovin, Kevin <kevin.rogo...@intel.com >>>>>> <mailto:kevin.rogo...@intel.com>> >>>>>> Cc: webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>>>> Subject: Re: [webkit-dev] WebKit GPU rendering possibility >>>>>> >>>>>> Hello, >>>>>> >>>>>> This is certainly interesting work! I have a few questions about the >>>>>> approach of this renderer. >>>>>> >>>>>> 1. What API is this on top of? OpenGL? Metal? Vulkan? Raw GPU >>>>>> commands[1]? >>>>>> 2. You mention in your video that you have already migrated Cairo on >>>>>> top of your new tech. Traditionally, a web engine is divorced from a >>>>>> 2D rendering engine such as Cairo. Why can’t the ports of WebKit >>>>>> which use Cairo get this new tech without any change? >>>>>> 3. What sort of API changes do you have in mind to make >>>>>> GraphicsContext adopt? >>>>>> 4. Out of curiosity, does the renderer implement 3D transforms? >>>>>> Did >>>>>> you have to implement 3-D triangle subdivision along intersections >>>>>> (perhaps for order-independent transparency)? >>>>>> 5. Which algorithm did you choose to draw text? >>>>>> >>>>>> Historically, the WebKit team has hesitated to allow experiments in >>>>>> the OpenSource repository. Traditionally, this sort of exploratory >>>>>> work is done in a branch, and only after it has proved to be an >>>>>> improvement, the work is adopted on trunk. >>>>>> >>>>>> Thanks, >>>>>> Myles >>>>>> >>>>>> [1] https://01.org/linuxgraphics/documentation/hardware-specificati >>>>>> <https://01.org/linuxgraphics/documentation/hardware-specificati> >>>>>> on >>>>>> -prms >>>>>> >>>>>> On Nov 2, 2016, at 9:35 AM, Rogovin, Kevin <kevin.rogo...@intel.com >>>>>> <mailto:kevin.rogo...@intel.com> >>>>>>> >>>>>> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> I was directed here by some colleagues as this is the place to post >>>>>> the following to get started on the following proposal. >>>>>> >>>>>> I have been working on an experimental 2D renderer that requires a >>>>>> GPU, the project is open sourced on github at https://github.com/01 >>>>>> <https://github.com/01> >>>>>> or g/fastuidraw. I gave a talk at the X Developers Conference this >>>>>> year which can be seen from >>>>>> https://www.x.org/wiki/Events/XDC2016/Progra >>>>>> <https://www.x.org/wiki/Events/XDC2016/Progra> >>>>>> m/ >>>>>> rogovin_fast_ui_draw/ . >>>>>> >>>>>> I made a benchmark which makes heavy use of rotations and clipping >>>>>> and ported to SKIA, Qt’s QPainter and Cairo. The benchmark and its >>>>>> ports are in the git repo linked above under the branch >>>>>> with_ports_of_painter-cells. It's performance advantage of >>>>>> FastUIDraw against the other renderers was quite severe (against >>>>>> Cairo and Qt's QPainter over 9 times and against SKIA about 5 times >>>>>> faster). >>>>>> >>>>>> I would like to explore the option of using FastUIDraw to implement >>>>>> a WebCore::GraphicsContext backend for the purpose of making drawing >>>>>> faster and more efficient on Intel devices that are equipped with a >>>>>> GPU. I also think that some minor modifications to WebKit’s use of >>>>>> GraphicsContext will also give some benefits. I have worked on >>>>>> WebKit a few years ago and knew/know my way around the rendering >>>>>> code very well (atleast at that time). >>>>>> >>>>>> Looking forward to collaboration, >>>>>> -Kevin Rogovin >>>>>> >>>>>> _______________________________________________ >>>>>> webkit-dev mailing list >>>>>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>>>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>>>>> >>>>>> _______________________________________________ >>>>>> webkit-dev mailing list >>>>>> webkit-dev@lists.webkit.org >>>>>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>>> _______________________________________________ >>>> webkit-dev mailing list >>>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>>> <https://lists.webkit.org/mailman/listinfo/webkit-dev> >>> >>> _______________________________________________ >>> webkit-dev mailing list >>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>> <https://lists.webkit.org/mailman/listinfo/webkit-dev> >> >> _______________________________________________ >> webkit-dev mailing list >> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >> https://lists.webkit.org/mailman/listinfo/webkit-dev > > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev