| Index: content/browser/renderer_host/render_widget_host_view_mac.h
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
|
| index f0bfe1b10ac677d4d863b2b1f277cd065f2fe964..235b1419355b24449320581db5b3afe4b698f4e7 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_mac.h
|
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.h
|
| @@ -37,6 +37,8 @@
|
|
|
| namespace content {
|
| class BrowserCompositorviewMac;
|
| +class CompositingIOSurfaceMac;
|
| +class CompositingIOSurfaceContext;
|
| class RenderWidgetHostViewMac;
|
| class RenderWidgetHostViewMacEditCommandHelper;
|
| class WebContents;
|
| @@ -47,8 +49,10 @@
|
| class Layer;
|
| }
|
|
|
| +@class CompositingIOSurfaceLayer;
|
| @class FullscreenWindowManager;
|
| @protocol RenderWidgetHostViewMacDelegate;
|
| +@class SoftwareLayer;
|
| @class ToolTip;
|
|
|
| @protocol RenderWidgetHostViewMacOwner
|
| @@ -150,6 +154,14 @@
|
|
|
| // Event monitor for scroll wheel end event.
|
| id endWheelMonitor_;
|
| +
|
| + // OpenGL Support:
|
| +
|
| + // recursive globalFrameDidChange protection:
|
| + BOOL handlingGlobalFrameDidChange_;
|
| +
|
| + // The scale factor of the display this view is in.
|
| + float deviceScaleFactor_;
|
|
|
| // If true then escape key down events are suppressed until the first escape
|
| // key up event. (The up event is suppressed as well). This is used by the
|
| @@ -207,6 +219,7 @@
|
| public DelegatedFrameHostClient,
|
| public BrowserCompositorViewMacClient,
|
| public IPC::Sender,
|
| + public SoftwareFrameManagerClient,
|
| public CompositingIOSurfaceLayerClient,
|
| public gfx::DisplayObserver {
|
| public:
|
| @@ -328,6 +341,11 @@
|
| // IPC::Sender implementation.
|
| virtual bool Send(IPC::Message* message) OVERRIDE;
|
|
|
| + // SoftwareFrameManagerClient implementation:
|
| + virtual void SoftwareFrameWasFreed(
|
| + uint32 output_surface_id, unsigned frame_id) OVERRIDE;
|
| + virtual void ReleaseReferencesToSoftwareFrame() OVERRIDE;
|
| +
|
| virtual SkColorType PreferredReadbackFormat() OVERRIDE;
|
|
|
| // CompositingIOSurfaceLayerClient implementation.
|
| @@ -352,6 +370,18 @@
|
| void PluginImeCompositionCompleted(const base::string16& text, int plugin_id);
|
|
|
| const std::string& selected_text() const { return selected_text_; }
|
| +
|
| + // Update the IOSurface to be drawn and call setNeedsDisplay on
|
| + // |cocoa_view_|.
|
| + void CompositorSwapBuffers(IOSurfaceID surface_handle,
|
| + const gfx::Rect& damage_rect,
|
| + const gfx::Size& surface_size,
|
| + float scale_factor,
|
| + const std::vector<ui::LatencyInfo>& latency_info);
|
| +
|
| + // Called when a GPU error is detected. Posts a task to destroy all
|
| + // compositing state.
|
| + void GotAcceleratedCompositingError();
|
|
|
| // Returns true and stores first rectangle for character range if the
|
| // requested |range| is already cached, otherwise returns false.
|
| @@ -393,6 +423,27 @@
|
| // The background CoreAnimation layer which is hosted by |cocoa_view_|.
|
| base::scoped_nsobject<CALayer> background_layer_;
|
|
|
| + // A flipped layer, which acts as the parent of the compositing and software
|
| + // layers. This layer is flipped so that the we don't need to recompute the
|
| + // origin for sub-layers when their position changes (this is impossible when
|
| + // using remote layers, as their size change cannot be synchronized with the
|
| + // window). This indirection is needed because flipping hosted layers (like
|
| + // |background_layer_|) leads to unpredictable behavior.
|
| + base::scoped_nsobject<CALayer> flipped_layer_;
|
| +
|
| + // The CoreAnimation layer hosted by the GPU process.
|
| + base::scoped_nsobject<CALayerHost> remote_layer_host_;
|
| +
|
| + // The CoreAnimation layer for software compositing. This should be NULL
|
| + // when software compositing is not in use.
|
| + base::scoped_nsobject<SoftwareLayer> software_layer_;
|
| +
|
| + // Accelerated compositing structures. These may be dynamically created and
|
| + // destroyed together in Create/DestroyCompositedIOSurfaceAndLayer.
|
| + base::scoped_nsobject<CompositingIOSurfaceLayer> compositing_iosurface_layer_;
|
| + scoped_refptr<CompositingIOSurfaceMac> compositing_iosurface_;
|
| + scoped_refptr<CompositingIOSurfaceContext> compositing_iosurface_context_;
|
| +
|
| // Delegated frame management and compositior.
|
| scoped_ptr<DelegatedFrameHost> delegated_frame_host_;
|
| scoped_ptr<ui::Layer> root_layer_;
|
| @@ -406,6 +457,13 @@
|
| scoped_ptr<BrowserCompositorViewPlaceholderMac>
|
| browser_compositor_view_placeholder_;
|
|
|
| + // This holds the current software compositing framebuffer, if any.
|
| + scoped_ptr<SoftwareFrameManager> software_frame_manager_;
|
| +
|
| + // Latency info to send back when the next frame appears on the
|
| + // screen.
|
| + std::vector<ui::LatencyInfo> pending_latency_info_;
|
| +
|
| NSWindow* pepper_fullscreen_window() const {
|
| return pepper_fullscreen_window_;
|
| }
|
| @@ -416,6 +474,10 @@
|
| return fullscreen_parent_host_view_;
|
| }
|
|
|
| + RenderWidgetHostViewFrameSubscriber* frame_subscriber() const {
|
| + return frame_subscriber_.get();
|
| + }
|
| +
|
| int window_number() const;
|
|
|
| // The scale factor for the screen that the view is currently on.
|
| @@ -427,7 +489,23 @@
|
| // Ensure that the display link is associated with the correct display.
|
| void UpdateDisplayLink();
|
|
|
| + // The scale factor of the backing store. Note that this is updated based on
|
| + // ViewScaleFactor with some delay.
|
| + float backing_store_scale_factor_;
|
| +
|
| + void AddPendingLatencyInfo(
|
| + const std::vector<ui::LatencyInfo>& latency_info);
|
| + void SendPendingLatencyInfoToHost();
|
| +
|
| + void SendPendingSwapAck();
|
| +
|
| void PauseForPendingResizeOrRepaintsAndDraw();
|
| +
|
| + // The geometric arrangement of the layers depends on cocoa_view's size, the
|
| + // compositing IOSurface's rounded size, and the software frame size. Update
|
| + // all of them using this function when any of those parameters changes. Also
|
| + // update the scale factor of the layers.
|
| + void LayoutLayers();
|
|
|
| // DelegatedFrameHostClient implementation.
|
| virtual ui::Compositor* GetCompositor() const OVERRIDE;
|
| @@ -453,6 +531,18 @@
|
| private:
|
| friend class RenderWidgetHostViewMacTest;
|
|
|
| + struct PendingSwapAck {
|
| + PendingSwapAck(int32 route_id, int gpu_host_id, int32 renderer_id)
|
| + : route_id(route_id),
|
| + gpu_host_id(gpu_host_id),
|
| + renderer_id(renderer_id) {}
|
| + int32 route_id;
|
| + int gpu_host_id;
|
| + int32 renderer_id;
|
| + };
|
| + scoped_ptr<PendingSwapAck> pending_swap_ack_;
|
| + void AddPendingSwapAck(int32 route_id, int gpu_host_id, int32 renderer_id);
|
| +
|
| // Returns whether this render view is a popup (autocomplete window).
|
| bool IsPopup() const;
|
|
|
| @@ -466,11 +556,36 @@
|
|
|
| void EnsureBrowserCompositorView();
|
| void DestroyBrowserCompositorView();
|
| +
|
| + void EnsureSoftwareLayer();
|
| + void DestroySoftwareLayer();
|
| +
|
| + bool EnsureCompositedIOSurface() WARN_UNUSED_RESULT;
|
| + void EnsureCompositedIOSurfaceLayer();
|
| + enum DestroyCompositedIOSurfaceLayerBehavior {
|
| + kLeaveLayerInHierarchy,
|
| + kRemoveLayerFromHierarchy,
|
| + };
|
| + void DestroyCompositedIOSurfaceLayer(
|
| + DestroyCompositedIOSurfaceLayerBehavior destroy_layer_behavior);
|
| + void DestroyCompositedIOSurfaceAndLayer();
|
| +
|
| + void DestroyCompositingStateOnError();
|
| +
|
| + // Called when a GPU SwapBuffers is received.
|
| + void GotAcceleratedFrame();
|
| +
|
| + // Called when a software DIB is received.
|
| + void GotSoftwareFrame();
|
|
|
| // IPC message handlers.
|
| void OnPluginFocusChanged(bool focused, int plugin_id);
|
| void OnStartPluginIme();
|
| void OnGetRenderedTextCompleted(const std::string& text);
|
| +
|
| + // Convert |rect| from the views coordinate (upper-left origin) into
|
| + // the OpenGL coordinate (lower-left origin) and scale for HiDPI displays.
|
| + gfx::Rect GetScaledOpenGLPixelRect(const gfx::Rect& rect);
|
|
|
| // Send updated vsync parameters to the renderer.
|
| void SendVSyncParametersToRenderer();
|
| @@ -522,6 +637,11 @@
|
| // The current caret bounds.
|
| gfx::Rect caret_rect_;
|
|
|
| + // Subscriber that listens to frame presentation events.
|
| + scoped_ptr<RenderWidgetHostViewFrameSubscriber> frame_subscriber_;
|
| +
|
| + base::WeakPtrFactory<RenderWidgetHostViewMac>
|
| + software_frame_weak_ptr_factory_;
|
| DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewMac);
|
| };
|
|
|
|
|