OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ | 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |
6 #define CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ | 6 #define CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <list> | 9 #include <list> |
10 #include <vector> | 10 #include <vector> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 // RenderWidgetHostViewCocoa for blitting the IOSurface. | 45 // RenderWidgetHostViewCocoa for blitting the IOSurface. |
46 class CompositingIOSurfaceMac | 46 class CompositingIOSurfaceMac |
47 : public base::RefCounted<CompositingIOSurfaceMac> { | 47 : public base::RefCounted<CompositingIOSurfaceMac> { |
48 public: | 48 public: |
49 // Returns NULL if IOSurface or GL API calls fail. | 49 // Returns NULL if IOSurface or GL API calls fail. |
50 static scoped_refptr<CompositingIOSurfaceMac> Create(); | 50 static scoped_refptr<CompositingIOSurfaceMac> Create(); |
51 | 51 |
52 // Set IOSurface that will be drawn on the next NSView drawRect. | 52 // Set IOSurface that will be drawn on the next NSView drawRect. |
53 bool SetIOSurfaceWithContextCurrent( | 53 bool SetIOSurfaceWithContextCurrent( |
54 scoped_refptr<CompositingIOSurfaceContext> current_context, | 54 scoped_refptr<CompositingIOSurfaceContext> current_context, |
55 uint64 io_surface_handle, | 55 IOSurfaceID io_surface_handle, |
56 const gfx::Size& size, | 56 const gfx::Size& size, |
57 float scale_factor) WARN_UNUSED_RESULT; | 57 float scale_factor) WARN_UNUSED_RESULT; |
58 | 58 |
59 // Get the CGL renderer ID currently associated with this context. | 59 // Get the CGL renderer ID currently associated with this context. |
60 int GetRendererID(); | 60 int GetRendererID(); |
61 | 61 |
62 // Blit the IOSurface to the rectangle specified by |window_rect| in DIPs, | 62 // Blit the IOSurface to the rectangle specified by |window_rect| in DIPs, |
63 // with the origin in the lower left corner. If the window rect's size is | 63 // with the origin in the lower left corner. If the window rect's size is |
64 // larger than the IOSurface, the remaining right and bottom edges will be | 64 // larger than the IOSurface, the remaining right and bottom edges will be |
65 // white. |window_scale_factor| is 1 in normal views, 2 in HiDPI views. | 65 // white. |window_scale_factor| is 1 in normal views, 2 in HiDPI views. |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 // GL context (if multiple visible windows are using the same GL context | 210 // GL context (if multiple visible windows are using the same GL context |
211 // then call to setView call can stall and prevent reaching 60fps). | 211 // then call to setView call can stall and prevent reaching 60fps). |
212 void SwitchToContextOnNewWindow(NSView* view, | 212 void SwitchToContextOnNewWindow(NSView* view, |
213 int window_number); | 213 int window_number); |
214 | 214 |
215 // Returns true if IOSurface is ready to render. False otherwise. | 215 // Returns true if IOSurface is ready to render. False otherwise. |
216 bool MapIOSurfaceToTextureWithContextCurrent( | 216 bool MapIOSurfaceToTextureWithContextCurrent( |
217 const scoped_refptr<CompositingIOSurfaceContext>& current_context, | 217 const scoped_refptr<CompositingIOSurfaceContext>& current_context, |
218 const gfx::Size pixel_size, | 218 const gfx::Size pixel_size, |
219 float scale_factor, | 219 float scale_factor, |
220 uint64 io_surface_handle) WARN_UNUSED_RESULT; | 220 IOSurfaceID io_surface_handle) WARN_UNUSED_RESULT; |
221 | 221 |
222 void UnrefIOSurfaceWithContextCurrent(); | 222 void UnrefIOSurfaceWithContextCurrent(); |
223 | 223 |
224 void DrawQuad(const SurfaceQuad& quad); | 224 void DrawQuad(const SurfaceQuad& quad); |
225 | 225 |
226 // Copy current frame to |target| video frame. This method must be called | 226 // Copy current frame to |target| video frame. This method must be called |
227 // within a CGL context. Returns a callback that should be called outside | 227 // within a CGL context. Returns a callback that should be called outside |
228 // of the CGL context. | 228 // of the CGL context. |
229 // If |called_within_draw| is true this method is called within a drawing | 229 // If |called_within_draw| is true this method is called within a drawing |
230 // operations. This allow certain optimizations. | 230 // operations. This allow certain optimizations. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 GLenum GetAndSaveGLError(); | 270 GLenum GetAndSaveGLError(); |
271 | 271 |
272 gfx::Rect IntersectWithIOSurface(const gfx::Rect& rect) const; | 272 gfx::Rect IntersectWithIOSurface(const gfx::Rect& rect) const; |
273 | 273 |
274 // Offscreen context used for all operations other than drawing to the | 274 // Offscreen context used for all operations other than drawing to the |
275 // screen. This is in the same share group as the contexts used for | 275 // screen. This is in the same share group as the contexts used for |
276 // drawing, and is the same for all IOSurfaces in all windows. | 276 // drawing, and is the same for all IOSurfaces in all windows. |
277 scoped_refptr<CompositingIOSurfaceContext> offscreen_context_; | 277 scoped_refptr<CompositingIOSurfaceContext> offscreen_context_; |
278 | 278 |
279 // IOSurface data. | 279 // IOSurface data. |
280 uint64 io_surface_handle_; | 280 IOSurfaceID io_surface_handle_; |
281 base::ScopedCFTypeRef<IOSurfaceRef> io_surface_; | 281 base::ScopedCFTypeRef<IOSurfaceRef> io_surface_; |
282 | 282 |
283 // The width and height of the io surface. | 283 // The width and height of the io surface. |
284 gfx::Size pixel_io_surface_size_; // In pixels. | 284 gfx::Size pixel_io_surface_size_; // In pixels. |
285 gfx::Size dip_io_surface_size_; // In view / density independent pixels. | 285 gfx::Size dip_io_surface_size_; // In view / density independent pixels. |
286 float scale_factor_; | 286 float scale_factor_; |
287 | 287 |
288 // The "live" OpenGL texture referring to this IOSurfaceRef. Note | 288 // The "live" OpenGL texture referring to this IOSurfaceRef. Note |
289 // that per the CGLTexImageIOSurface2D API we do not need to | 289 // that per the CGLTexImageIOSurface2D API we do not need to |
290 // explicitly update this texture's contents once created. All we | 290 // explicitly update this texture's contents once created. All we |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 | 322 |
323 static void EvictionScheduleDoEvict(); | 323 static void EvictionScheduleDoEvict(); |
324 static void EvictionDoEvict(); | 324 static void EvictionDoEvict(); |
325 static base::LazyInstance<EvictionQueue> eviction_queue_; | 325 static base::LazyInstance<EvictionQueue> eviction_queue_; |
326 static bool eviction_scheduled_; | 326 static bool eviction_scheduled_; |
327 }; | 327 }; |
328 | 328 |
329 } // namespace content | 329 } // namespace content |
330 | 330 |
331 #endif // CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ | 331 #endif // CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |
OLD | NEW |