summaryrefslogtreecommitdiff
path: root/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md')
-rw-r--r--chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md210
1 files changed, 0 insertions, 210 deletions
diff --git a/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md b/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md
deleted file mode 100644
index b65c7c3a75c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md
+++ /dev/null
@@ -1,210 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: iosurface-meeting-notes
-title: iosurface-meeting-notes
----
-
-How Chrome uses IOSurfaces:
-
-- Three processes involved in rendering: browser process (owns window), renderer
-process (sandboxed), GPU process (executes OpenGL)
-
-- GPU process has to provide rendering results to browser process
-
-- Upon window resize, GPU process allocates an IOSurface, uses IOSurfaceGetID to
-get global identifier
-
-- Sends ID to browser process, which uses IOSurfaceLookup to turn it into an
-IOSurfaceRef
-
-- Both processes use CGLTexImageIOSurface2D to bind IOSurface to an OpenGL
-texture
-
-- GPU process binds texture to an FBO, renders into it using OpenGL
-
-- Browser process texture maps that IOSurface onto a triangle pair
-
-- (When window is resized, both GPU and browser processes use CFRelease against
-IOSurfaceRef to unreference it)
-
-Note:
-
-- We found early on in Chrome's development that it didn't appear necessary to
-double-buffer our IOSurfaces
-
-- For this reason, currently allocate one IOSurface per tab. Didn't want to
-double VRAM requirement unnecessarily.
-
-Q. What are the buffering semantics of IOSurfaces? Double-buffered?
-Single-buffered? Is there locking going on internally to make them appear
-double-buffered?
-
-A. Semantically single-buffered.
-
-Basically, rendering correctness is determined just by how the command buffers
-are serialized to the GPU.
-
-This means if the browser process manages to squeeze in a command buffer which
-draws the IOSurface to the screen in between the GPU process's command buffers
-filling the IOSurface, we could possibly see an incomplete rendered frame.
-
-Q. Is it possible to change these semantics with dictionary properties during
-IOSurfaceCreate?
-
-A. No.
-
-Q. Should Chrome double-buffer its IOSurfaces (i.e., avoid rendering into one
-while concurrently sampling from it in another process)? Would doing so avoid
-any driver instability (window server lockups, kernel panics) we have seen on
-various OS X hardware and software configurations? I note that both Firefox and
-the Qt WebKit port are double-buffering their IOSurfaces.
-
-A. Double-buffering probably would only improve the "race" between rendering to
-and from the IOSurface.
-
-Q. When are IOSurfaces released? If two processes both release their
-IOSurfaceRefs, is the IOSurface reclaimed immediately? In a deferred fashion?
-
-A. Should go away immediately. Subject to outstanding live texture objects that
-reference that IOSurface.
-
-It would be possible to re-look up the IOSurface in this case. (\* Maybe this is
-the reason Vangelis was able to do this in his testing. \*)
-
-You have to call glDeleteTexture, or delete the OpenGL context, to ensure the
-IOSurface bound to the texture is gone.
-
-Can run: ioreg -n IOSurfaceRoot -w 0
-
-Has very verbose output, but it could be parsed.
-
-A good indicator that we aren't leaking IOSurfaces is that the IOSurface IDs
-don't increase monotonically. If they are increasing, it's an indication
-something is leaking somewhere.
-
-Q. At what point does the IOSurface allocation fail? We had a leak at one point,
-and at some point IOSurface allocation would fail.
-
-A. You could exhaust the kernel's address space. Otherwise, there's currently no
-hard-coded limit.
-
-When you create an IOSurface, it doesn't allocate anything except system memory.
-You're not really using those pages right off the bat.
-
-Until you actually create a texture object and use it with a particular GPU, it
-doesn't allocate VRAM, either.
-
-You need to worry about texture lifetimes across processes; the IOSurface can
-get read back into system memory if the texture is deleted but the IOSurface is
-stil alive!
-
-Whenever the last texture reference is torn down, you're probably paying the
-cost of paging the VRAM back to system memory before the IOSurface is
-deallocated.
-
-There is a way to tell IOSurface to auto-purge if you're willing to track a
-system-wide use count. Any time the use count goes to 0, purge the VRAM and
-system memory. Requires more cross-process lifetime management.
-
-Q. Is fragmentation something we should worry about?
-
-A. Not really. Nothing you can do at the user level about it.
-
-In general, the working set of the GPU will be much larger than the few
-IOSurfaces you allocate. But: Chrome is allocating up to 8 IOSurfaces per
-window...
-
-Q. In 10.7, there appear to be new APIs that indicate whether the IOSurface is
-in use.
-
-A. Each process referencing an IOSurface can increment and decrement its use
-count. When the process's use count goes from 0 to 1, traps into the kernel to
-reference the IOSurface at the system level.
-
-IOSurfaceIsInUse() is the only call that should be used to determine usage --
-according to IOSurfaceIncrementUseCount / IOSurfaceDecrementUseCount. You can't
-query how many system-level references exist for a given IOSurface.
-
-In a system that's quiescent, (i.e., running just the Finder, and in particular
-not Safari), should be able to make some guarantees that IOSurfaces are all
-released.
-
-Could potentially use ioreg in conjunction with "wc -l" on a system with a known
-configuration (i.e., a GPU bot) to assert that there are no leaked IOSurfaces.
-
-One thing you do have to worry about: IOSurface doesn't let you get past any of
-the limitations of the GPU. For example, render size limits. Can only render to
-a surface so big. There is the fragmentation issue. The IOSurface does have to
-be allocated contiguously.
-
-Q. We're not using IOSurfaceAlignProperty.
-
-A. Not necessary. Implementation will pick an aligned value for e.g. the row
-bytes if the value is not specified.
-
-Q. What kind of user errors can lead to IOSurface leaks? For example, if you
-release the IOSurface but still have an OpenGL texture linked to the IOSurface,
-and don't delete the OpenGL texture, the IOSurface still appears to be valid.
-
-A. Already answered above.
-
-Q. Are IOSurfaces more expensive resources to allocate than OpenGL textures
-(accessible only to one process)? If so, how much more expensive?
-
-A. No. They might not be as performant -- due to how the GPU memory is allocated
--- but they're basically as cheap as textures.
-
-Q. During CGLTexImageIOSurface2D call: you can change how the memory as accessed
--- but can you change how much of the IOSurface you use?
-
-A. Theoretically you could pick a smaller region of the upper-left-hand corner
--- but you can't pick an arbitrary sub-rectangle.
-
-Q. Chrome currently renders IOSurfaces to the screen using OpenGL, which is
-difficult to make seamlessly interoperate with Cocoa. Currently Chrome has to
-generate a "mask" in Cocoa and render the OpenGL as an underlay in order for
-Cocoa to correctly occlude web page rendering when necessary. In the past,
-attempted to use a layer-backed view for the root view, but had occlusion
-problems such as the find bar. Are there better ways, or ways more compatible
-with CG, to draw IOSurfaces to the screen? Alternative code paths like IOSurface
--> CIImage? Also, we switch back and forth between software-rendered NSViews
-and those into which we render an IOSurface using OpenGL.
-
-A. Not really. There's also a way to back a CALayer to an IOSurfaceRef nowadays
--- but this wouldn't really save a blit. It might save \*Chrome\* a blit, but CA
-would be doing it internally.
-
-Could consider rendering to a single-buffered NSOpenGLContext in the browser
-process!
-
-Q. Is the sharing of Core Animation layer trees across processes (which Safari
-does via SPI, apparently) more efficient than using IOSurfaces?
-
-A. Yes -- it is probably more efficient -- but we can't talk about what Safari
-might be doing internally.
-
-Q. Texture corruption during paging
-
-A. Should re-verify existing Radars (MapsGL) against 10.8.2 seed on current
-hardware.
-
-Q. Is there something Chrome might be doing obviously wrong in its rendering
-pipeline which is provoking window server hangs and kernel panics more often
-than other OpenGL applications?
-
-A. Watch out for lifetime management of stuff. Leaks are bad. Will provoke
-paging that otherwise wouldn't have to do.
-
-Check cross-process GL texture lifetime.
-
-Aside from that, nothing obviously architecturally wrong.
-
-Q. Are window server hangs like http://crbug.com/140175 definitely Apple bugs,
-or is it expected that applications might be able to provoke this behavior?
-
-A. Window server hangs are Apple bugs. Please file them. The more Radars the
-better. \ No newline at end of file