Index: content/browser/compositor/delegated_frame_host.h |
diff --git a/content/browser/compositor/delegated_frame_host.h b/content/browser/compositor/delegated_frame_host.h |
deleted file mode 100644 |
index e2f7ee5fa86f5a817614c92a5d373b654a6f706d..0000000000000000000000000000000000000000 |
--- a/content/browser/compositor/delegated_frame_host.h |
+++ /dev/null |
@@ -1,325 +0,0 @@ |
-// Copyright 2014 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_COMPOSITOR_DELEGATED_FRAME_HOST_H_ |
-#define CONTENT_BROWSER_COMPOSITOR_DELEGATED_FRAME_HOST_H_ |
- |
-#include <stdint.h> |
- |
-#include <vector> |
- |
-#include "base/gtest_prod_util.h" |
-#include "cc/output/copy_output_result.h" |
-#include "cc/surfaces/surface_factory_client.h" |
-#include "content/browser/compositor/image_transport_factory.h" |
-#include "content/browser/compositor/owned_mailbox.h" |
-#include "content/browser/renderer_host/delegated_frame_evictor.h" |
-#include "content/browser/renderer_host/dip_util.h" |
-#include "content/browser/renderer_host/render_widget_host_impl.h" |
-#include "content/browser/renderer_host/render_widget_host_view_base.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "ui/compositor/compositor.h" |
-#include "ui/compositor/compositor_observer.h" |
-#include "ui/compositor/compositor_vsync_manager.h" |
-#include "ui/compositor/layer.h" |
-#include "ui/compositor/layer_owner_delegate.h" |
-#include "ui/events/event.h" |
-#include "ui/gfx/geometry/rect_conversions.h" |
- |
-namespace base { |
-class TickClock; |
-} |
- |
-namespace cc { |
-class SurfaceFactory; |
-enum class SurfaceDrawStatus; |
-} |
- |
-namespace media { |
-class VideoFrame; |
-} |
- |
-namespace content { |
- |
-class DelegatedFrameHost; |
-class ReadbackYUVInterface; |
-class RenderWidgetHostViewFrameSubscriber; |
-class RenderWidgetHostImpl; |
-class ResizeLock; |
- |
-// The DelegatedFrameHostClient is the interface from the DelegatedFrameHost, |
-// which manages delegated frames, and the ui::Compositor being used to |
-// display them. |
-class CONTENT_EXPORT DelegatedFrameHostClient { |
- public: |
- virtual ui::Layer* DelegatedFrameHostGetLayer() const = 0; |
- virtual bool DelegatedFrameHostIsVisible() const = 0; |
- virtual gfx::Size DelegatedFrameHostDesiredSizeInDIP() const = 0; |
- |
- virtual bool DelegatedFrameCanCreateResizeLock() const = 0; |
- virtual scoped_ptr<ResizeLock> DelegatedFrameHostCreateResizeLock( |
- bool defer_compositor_lock) = 0; |
- virtual void DelegatedFrameHostResizeLockWasReleased() = 0; |
- |
- virtual void DelegatedFrameHostSendCompositorSwapAck( |
- int output_surface_id, |
- const cc::CompositorFrameAck& ack) = 0; |
- virtual void DelegatedFrameHostSendReclaimCompositorResources( |
- int output_surface_id, |
- const cc::CompositorFrameAck& ack) = 0; |
- virtual void DelegatedFrameHostOnLostCompositorResources() = 0; |
- |
- virtual void DelegatedFrameHostUpdateVSyncParameters( |
- const base::TimeTicks& timebase, |
- const base::TimeDelta& interval) = 0; |
-}; |
- |
-// The DelegatedFrameHost is used to host all of the RenderWidgetHostView state |
-// and functionality that is associated with delegated frames being sent from |
-// the RenderWidget. The DelegatedFrameHost will push these changes through to |
-// the ui::Compositor associated with its DelegatedFrameHostClient. |
-class CONTENT_EXPORT DelegatedFrameHost |
- : public ui::CompositorObserver, |
- public ui::CompositorVSyncManager::Observer, |
- public ui::LayerOwnerDelegate, |
- public ImageTransportFactoryObserver, |
- public DelegatedFrameEvictorClient, |
- public cc::SurfaceFactoryClient, |
- public base::SupportsWeakPtr<DelegatedFrameHost> { |
- public: |
- explicit DelegatedFrameHost(DelegatedFrameHostClient* client); |
- ~DelegatedFrameHost() override; |
- |
- // ui::CompositorObserver implementation. |
- void OnCompositingDidCommit(ui::Compositor* compositor) override; |
- void OnCompositingStarted(ui::Compositor* compositor, |
- base::TimeTicks start_time) override; |
- void OnCompositingEnded(ui::Compositor* compositor) override; |
- void OnCompositingAborted(ui::Compositor* compositor) override; |
- void OnCompositingLockStateChanged(ui::Compositor* compositor) override; |
- void OnCompositingShuttingDown(ui::Compositor* compositor) override; |
- |
- // ui::CompositorVSyncManager::Observer implementation. |
- void OnUpdateVSyncParameters(base::TimeTicks timebase, |
- base::TimeDelta interval) override; |
- |
- // ui::LayerOwnerObserver implementation. |
- void OnLayerRecreated(ui::Layer* old_layer, ui::Layer* new_layer) override; |
- |
- // ImageTransportFactoryObserver implementation. |
- void OnLostResources() override; |
- |
- // DelegatedFrameEvictorClient implementation. |
- void EvictDelegatedFrame() override; |
- |
- // cc::SurfaceFactoryClient implementation. |
- void ReturnResources(const cc::ReturnedResourceArray& resources) override; |
- void WillDrawSurface(cc::SurfaceId id, const gfx::Rect& damage_rect) override; |
- void SetBeginFrameSource(cc::BeginFrameSource* begin_frame_source) override; |
- |
- bool CanCopyToBitmap() const; |
- |
- // Public interface exposed to RenderWidgetHostView. |
- |
- void SwapDelegatedFrame(uint32_t output_surface_id, |
- scoped_ptr<cc::CompositorFrame> frame); |
- void ClearDelegatedFrame(); |
- void WasHidden(); |
- void WasShown(const ui::LatencyInfo& latency_info); |
- void WasResized(); |
- bool HasSavedFrame(); |
- gfx::Size GetRequestedRendererSize() const; |
- void SetCompositor(ui::Compositor* compositor); |
- void ResetCompositor(); |
- void SetVSyncParameters(const base::TimeTicks& timebase, |
- const base::TimeDelta& interval); |
- // Note: |src_subset| is specified in DIP dimensions while |output_size| |
- // expects pixels. |
- void CopyFromCompositingSurface(const gfx::Rect& src_subrect, |
- const gfx::Size& output_size, |
- const ReadbackRequestCallback& callback, |
- const SkColorType preferred_color_type); |
- void CopyFromCompositingSurfaceToVideoFrame( |
- const gfx::Rect& src_subrect, |
- const scoped_refptr<media::VideoFrame>& target, |
- const base::Callback<void(const gfx::Rect&, bool)>& callback); |
- bool CanCopyToVideoFrame() const; |
- void BeginFrameSubscription( |
- scoped_ptr<RenderWidgetHostViewFrameSubscriber> subscriber); |
- void EndFrameSubscription(); |
- bool HasFrameSubscriber() const { return !!frame_subscriber_; } |
- uint32_t GetSurfaceIdNamespace(); |
- // Returns a null SurfaceId if this DelegatedFrameHost has not yet created |
- // a compositor Surface. |
- cc::SurfaceId SurfaceIdAtPoint(cc::SurfaceHittestDelegate* delegate, |
- const gfx::Point& point, |
- gfx::Point* transformed_point); |
- |
- // Given the SurfaceID of a Surface that is contained within this class' |
- // Surface, find the relative transform between the Surfaces and apply it |
- // to a point. If a Surface has not yet been created this returns the |
- // same point with no transform applied. |
- void TransformPointToLocalCoordSpace(const gfx::Point& point, |
- cc::SurfaceId original_surface, |
- gfx::Point* transformed_point); |
- |
- // Exposed for tests. |
- cc::SurfaceId SurfaceIdForTesting() const { return surface_id_; } |
- void OnCompositingDidCommitForTesting(ui::Compositor* compositor) { |
- OnCompositingDidCommit(compositor); |
- } |
- bool ReleasedFrontLockActiveForTesting() const { |
- return !!released_front_lock_.get(); |
- } |
- void SetRequestCopyOfOutputCallbackForTesting( |
- const base::Callback<void(scoped_ptr<cc::CopyOutputRequest>)>& callback) { |
- request_copy_of_output_callback_for_testing_ = callback; |
- } |
- |
- private: |
- friend class DelegatedFrameHostClient; |
- friend class RenderWidgetHostViewAuraCopyRequestTest; |
- FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest, |
- SkippedDelegatedFrames); |
- FRIEND_TEST_ALL_PREFIXES(RenderWidgetHostViewAuraTest, |
- DiscardDelegatedFramesWithLocking); |
- |
- RenderWidgetHostViewFrameSubscriber* frame_subscriber() const { |
- return frame_subscriber_.get(); |
- } |
- bool ShouldCreateResizeLock(); |
- void LockResources(); |
- void UnlockResources(); |
- void RequestCopyOfOutput(scoped_ptr<cc::CopyOutputRequest> request); |
- |
- bool ShouldSkipFrame(gfx::Size size_in_dip) const; |
- |
- // Lazily grab a resize lock if the aura window size doesn't match the current |
- // frame size, to give time to the renderer. |
- void MaybeCreateResizeLock(); |
- |
- // Checks if the resize lock can be released because we received an new frame. |
- void CheckResizeLock(); |
- |
- // Update the layers for the resize gutters to the right and bottom of the |
- // surface layer. |
- void UpdateGutters(); |
- |
- // Called after async thumbnailer task completes. Scales and crops the result |
- // of the copy. |
- static void CopyFromCompositingSurfaceHasResultForVideo( |
- base::WeakPtr<DelegatedFrameHost> rwhva, |
- scoped_refptr<OwnedMailbox> subscriber_texture, |
- scoped_refptr<media::VideoFrame> video_frame, |
- const base::Callback<void(const gfx::Rect&, bool)>& callback, |
- scoped_ptr<cc::CopyOutputResult> result); |
- static void CopyFromCompositingSurfaceFinishedForVideo( |
- base::WeakPtr<DelegatedFrameHost> rwhva, |
- const base::Callback<void(bool)>& callback, |
- scoped_refptr<OwnedMailbox> subscriber_texture, |
- scoped_ptr<cc::SingleReleaseCallback> release_callback, |
- bool result); |
- static void ReturnSubscriberTexture( |
- base::WeakPtr<DelegatedFrameHost> rwhva, |
- scoped_refptr<OwnedMailbox> subscriber_texture, |
- const gpu::SyncToken& sync_token); |
- |
- void SendDelegatedFrameAck(uint32_t output_surface_id); |
- void SurfaceDrawn(uint32_t output_surface_id, cc::SurfaceDrawStatus drawn); |
- void SendReturnedDelegatedResources(uint32_t output_surface_id); |
- |
- // Called to consult the current |frame_subscriber_|, to determine and maybe |
- // initiate a copy-into-video-frame request. |
- void AttemptFrameSubscriberCapture(const gfx::Rect& damage_rect); |
- |
- DelegatedFrameHostClient* const client_; |
- ui::Compositor* compositor_; |
- |
- // The vsync manager we are observing for changes, if any. |
- scoped_refptr<ui::CompositorVSyncManager> vsync_manager_; |
- |
- // The current VSync timebase and interval. These are zero until the first |
- // call to SetVSyncParameters(). |
- base::TimeTicks vsync_timebase_; |
- base::TimeDelta vsync_interval_; |
- |
- // Overridable tick clock used for testing functions using current time. |
- scoped_ptr<base::TickClock> tick_clock_; |
- |
- // With delegated renderer, this is the last output surface, used to |
- // disambiguate resources with the same id coming from different output |
- // surfaces. |
- uint32_t last_output_surface_id_; |
- |
- // The number of delegated frame acks that are pending, to delay resource |
- // returns until the acks are sent. |
- int pending_delegated_ack_count_; |
- |
- // True after a delegated frame has been skipped, until a frame is not |
- // skipped. |
- bool skipped_frames_; |
- std::vector<ui::LatencyInfo> skipped_latency_info_list_; |
- |
- scoped_ptr<ui::Layer> right_gutter_; |
- scoped_ptr<ui::Layer> bottom_gutter_; |
- |
- // This is the last root background color from a swapped frame. |
- SkColor background_color_; |
- |
- // State for rendering into a Surface. |
- scoped_ptr<cc::SurfaceIdAllocator> id_allocator_; |
- scoped_ptr<cc::SurfaceFactory> surface_factory_; |
- cc::SurfaceId surface_id_; |
- gfx::Size current_surface_size_; |
- float current_scale_factor_; |
- cc::ReturnedResourceArray surface_returned_resources_; |
- |
- // This lock is the one waiting for a frame of the right size to come back |
- // from the renderer/GPU process. It is set from the moment the aura window |
- // got resized, to the moment we committed the renderer frame of the same |
- // size. It keeps track of the size we expect from the renderer, and locks the |
- // compositor, as well as the UI for a short time to give a chance to the |
- // renderer of producing a frame of the right size. |
- scoped_ptr<ResizeLock> resize_lock_; |
- |
- // Keeps track of the current frame size. |
- gfx::Size current_frame_size_in_dip_; |
- |
- // This lock is for waiting for a front surface to become available to draw. |
- scoped_refptr<ui::CompositorLock> released_front_lock_; |
- |
- enum CanLockCompositorState { |
- YES_CAN_LOCK, |
- // We locked, so at some point we'll need to kick a frame. |
- YES_DID_LOCK, |
- // No. A lock timed out, we need to kick a new frame before locking again. |
- NO_PENDING_RENDERER_FRAME, |
- // No. We've got a frame, but it hasn't been committed. |
- NO_PENDING_COMMIT, |
- }; |
- CanLockCompositorState can_lock_compositor_; |
- |
- base::TimeTicks last_draw_ended_; |
- |
- // Subscriber that listens to frame presentation events. |
- scoped_ptr<RenderWidgetHostViewFrameSubscriber> frame_subscriber_; |
- std::vector<scoped_refptr<OwnedMailbox> > idle_frame_subscriber_textures_; |
- |
- // Callback used to pass the output request to the layer or to a function |
- // specified by a test. |
- base::Callback<void(scoped_ptr<cc::CopyOutputRequest>)> |
- request_copy_of_output_callback_for_testing_; |
- |
- // YUV readback pipeline. |
- scoped_ptr<content::ReadbackYUVInterface> |
- yuv_readback_pipeline_; |
- |
- scoped_ptr<DelegatedFrameEvictor> delegated_frame_evictor_; |
- |
- cc::BeginFrameSource* begin_frame_source_; |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_BROWSER_COMPOSITOR_DELEGATED_FRAME_HOST_H_ |