Index: content/browser/renderer_host/compositing_iosurface_mac.h |
diff --git a/content/browser/renderer_host/compositing_iosurface_mac.h b/content/browser/renderer_host/compositing_iosurface_mac.h |
deleted file mode 100644 |
index 14a799360673df174a07d89787269afc5761f9e7..0000000000000000000000000000000000000000 |
--- a/content/browser/renderer_host/compositing_iosurface_mac.h |
+++ /dev/null |
@@ -1,238 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |
-#define CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |
- |
-#include <deque> |
-#include <list> |
-#include <vector> |
- |
-#import <Cocoa/Cocoa.h> |
-#include <IOSurface/IOSurfaceAPI.h> |
-#include <QuartzCore/QuartzCore.h> |
- |
-#include "base/callback.h" |
-#include "base/lazy_instance.h" |
-#include "base/mac/scoped_cftyperef.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
-#include "media/base/video_frame.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/rect_conversions.h" |
-#include "ui/gfx/size.h" |
- |
-class SkBitmap; |
- |
-namespace gfx { |
-class Rect; |
-} |
- |
-namespace content { |
- |
-class CompositingIOSurfaceContext; |
-class CompositingIOSurfaceShaderPrograms; |
-class CompositingIOSurfaceTransformer; |
-class RenderWidgetHostViewFrameSubscriber; |
-class RenderWidgetHostViewMac; |
- |
-// This class manages an OpenGL context and IOSurface for the accelerated |
-// compositing code path. The GL context is attached to |
-// RenderWidgetHostViewCocoa for blitting the IOSurface. |
-class CompositingIOSurfaceMac |
- : public base::RefCounted<CompositingIOSurfaceMac> { |
- public: |
- // Returns NULL if IOSurface or GL API calls fail. |
- static scoped_refptr<CompositingIOSurfaceMac> Create(); |
- |
- // Set IOSurface that will be drawn on the next NSView drawRect. |
- bool SetIOSurfaceWithContextCurrent( |
- scoped_refptr<CompositingIOSurfaceContext> current_context, |
- IOSurfaceID io_surface_handle, |
- const gfx::Size& size, |
- float scale_factor) WARN_UNUSED_RESULT; |
- |
- // Get the CGL renderer ID currently associated with this context. |
- int GetRendererID(); |
- |
- // Blit the IOSurface to the rectangle specified by |window_rect| in DIPs, |
- // with the origin in the lower left corner. If the window rect's size is |
- // larger than the IOSurface, the remaining right and bottom edges will be |
- // white. |window_scale_factor| is 1 in normal views, 2 in HiDPI views. |
- bool DrawIOSurface( |
- scoped_refptr<CompositingIOSurfaceContext> drawing_context, |
- const gfx::Rect& window_rect, |
- float window_scale_factor) WARN_UNUSED_RESULT; |
- |
- // Copy the data of the "live" OpenGL texture referring to this IOSurfaceRef |
- // into |out|. The copied region is specified with |src_pixel_subrect| and |
- // the data is transformed so that it fits in |dst_pixel_size|. |
- // |src_pixel_subrect| and |dst_pixel_size| are not in DIP but in pixel. |
- // Caller must ensure that |out| is allocated to dimensions that match |
- // dst_pixel_size, with no additional padding. |
- // |callback| is invoked when the operation is completed or failed. |
- // Do no call this method again before |callback| is invoked. |
- void CopyTo(const gfx::Rect& src_pixel_subrect, |
- const gfx::Size& dst_pixel_size, |
- const base::Callback<void(bool, const SkBitmap&)>& callback); |
- |
- // Transfer the contents of the surface to an already-allocated YV12 |
- // VideoFrame, and invoke a callback to indicate success or failure. |
- void CopyToVideoFrame( |
- const gfx::Rect& src_subrect, |
- const scoped_refptr<media::VideoFrame>& target, |
- const base::Callback<void(bool)>& callback); |
- |
- // Unref the IOSurface and delete the associated GL texture. If the GPU |
- // process is no longer referencing it, this will delete the IOSurface. |
- void UnrefIOSurface(); |
- |
- bool HasIOSurface() { return !!io_surface_.get(); } |
- |
- const gfx::Size& pixel_io_surface_size() const { |
- return pixel_io_surface_size_; |
- } |
- // In cocoa view units / DIPs. |
- const gfx::Size& dip_io_surface_size() const { return dip_io_surface_size_; } |
- float scale_factor() const { return scale_factor_; } |
- |
- // Returns true if asynchronous readback is supported on this system. |
- bool IsAsynchronousReadbackSupported(); |
- |
- // Scan the list of started asynchronous copies and test if each one has |
- // completed. If |block_until_finished| is true, then block until all |
- // pending copies are finished. |
- void CheckIfAllCopiesAreFinished(bool block_until_finished); |
- |
- // Returns true if the offscreen context used by this surface has been |
- // poisoned. |
- bool HasBeenPoisoned() const; |
- |
- private: |
- friend class base::RefCounted<CompositingIOSurfaceMac>; |
- |
- // Vertex structure for use in glDraw calls. |
- struct SurfaceVertex { |
- SurfaceVertex() : x_(0.0f), y_(0.0f), tx_(0.0f), ty_(0.0f) { } |
- void set(float x, float y, float tx, float ty) { |
- x_ = x; |
- y_ = y; |
- tx_ = tx; |
- ty_ = ty; |
- } |
- void set_position(float x, float y) { |
- x_ = x; |
- y_ = y; |
- } |
- void set_texcoord(float tx, float ty) { |
- tx_ = tx; |
- ty_ = ty; |
- } |
- float x_; |
- float y_; |
- float tx_; |
- float ty_; |
- }; |
- |
- // Counter-clockwise verts starting from upper-left corner (0, 0). |
- struct SurfaceQuad { |
- void set_size(gfx::Size vertex_size, gfx::Size texcoord_size) { |
- // Texture coordinates are flipped vertically so they can be drawn on |
- // a projection with a flipped y-axis (origin is top left). |
- float vw = static_cast<float>(vertex_size.width()); |
- float vh = static_cast<float>(vertex_size.height()); |
- float tw = static_cast<float>(texcoord_size.width()); |
- float th = static_cast<float>(texcoord_size.height()); |
- verts_[0].set(0.0f, 0.0f, 0.0f, th); |
- verts_[1].set(0.0f, vh, 0.0f, 0.0f); |
- verts_[2].set(vw, vh, tw, 0.0f); |
- verts_[3].set(vw, 0.0f, tw, th); |
- } |
- void set_rect(float x1, float y1, float x2, float y2) { |
- verts_[0].set_position(x1, y1); |
- verts_[1].set_position(x1, y2); |
- verts_[2].set_position(x2, y2); |
- verts_[3].set_position(x2, y1); |
- } |
- void set_texcoord_rect(float tx1, float ty1, float tx2, float ty2) { |
- // Texture coordinates are flipped vertically so they can be drawn on |
- // a projection with a flipped y-axis (origin is top left). |
- verts_[0].set_texcoord(tx1, ty2); |
- verts_[1].set_texcoord(tx1, ty1); |
- verts_[2].set_texcoord(tx2, ty1); |
- verts_[3].set_texcoord(tx2, ty2); |
- } |
- SurfaceVertex verts_[4]; |
- }; |
- |
- CompositingIOSurfaceMac( |
- const scoped_refptr<CompositingIOSurfaceContext>& context); |
- ~CompositingIOSurfaceMac(); |
- |
- // Returns true if IOSurface is ready to render. False otherwise. |
- bool MapIOSurfaceToTextureWithContextCurrent( |
- const scoped_refptr<CompositingIOSurfaceContext>& current_context, |
- const gfx::Size pixel_size, |
- float scale_factor, |
- IOSurfaceID io_surface_handle) WARN_UNUSED_RESULT; |
- |
- void UnrefIOSurfaceWithContextCurrent(); |
- |
- void DrawQuad(const SurfaceQuad& quad); |
- |
- // Check for GL errors and store the result in error_. Only return new |
- // errors |
- GLenum GetAndSaveGLError(); |
- |
- // Offscreen context used for all operations other than drawing to the |
- // screen. This is in the same share group as the contexts used for |
- // drawing, and is the same for all IOSurfaces in all windows. |
- scoped_refptr<CompositingIOSurfaceContext> offscreen_context_; |
- |
- // IOSurface data. |
- IOSurfaceID io_surface_handle_; |
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface_; |
- |
- // The width and height of the io surface. |
- gfx::Size pixel_io_surface_size_; // In pixels. |
- gfx::Size dip_io_surface_size_; // In view / density independent pixels. |
- float scale_factor_; |
- |
- // The "live" OpenGL texture referring to this IOSurfaceRef. Note |
- // that per the CGLTexImageIOSurface2D API we do not need to |
- // explicitly update this texture's contents once created. All we |
- // need to do is ensure it is re-bound before attempting to draw |
- // with it. |
- GLuint texture_; |
- |
- // Error saved by GetAndSaveGLError |
- GLint gl_error_; |
- |
- // Aggressive IOSurface eviction logic. When using CoreAnimation, IOSurfaces |
- // are used only transiently to transfer from the GPU process to the browser |
- // process. Once the IOSurface has been drawn to its CALayer, the CALayer |
- // will not need updating again until its view is hidden and re-shown. |
- // Aggressively evict surfaces when more than 8 (the number allowed by the |
- // memory manager for fast tab switching) are allocated. |
- enum { |
- kMaximumUnevictedSurfaces = 8, |
- }; |
- typedef std::list<CompositingIOSurfaceMac*> EvictionQueue; |
- void EvictionMarkUpdated(); |
- void EvictionMarkEvicted(); |
- EvictionQueue::iterator eviction_queue_iterator_; |
- bool eviction_has_been_drawn_since_updated_; |
- |
- static void EvictionScheduleDoEvict(); |
- static void EvictionDoEvict(); |
- static base::LazyInstance<EvictionQueue> eviction_queue_; |
- static bool eviction_scheduled_; |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_MAC_H_ |