Index: remoting/host/desktop_session_agent.h |
diff --git a/remoting/host/desktop_session_agent.h b/remoting/host/desktop_session_agent.h |
index 569dfd56bd74040e6f0e0013e7e72347efabdc8e..483c65f51fb57879690fff8437ad25ae49615a00 100644 |
--- a/remoting/host/desktop_session_agent.h |
+++ b/remoting/host/desktop_session_agent.h |
@@ -5,6 +5,8 @@ |
#ifndef REMOTING_HOST_DESKTOP_SESSION_AGENT_H_ |
#define REMOTING_HOST_DESKTOP_SESSION_AGENT_H_ |
+#include <list> |
+ |
#include "base/basictypes.h" |
#include "base/callback.h" |
#include "base/compiler_specific.h" |
@@ -12,6 +14,11 @@ |
#include "base/memory/scoped_ptr.h" |
#include "ipc/ipc_listener.h" |
#include "ipc/ipc_platform_file.h" |
+#include "remoting/base/shared_buffer.h" |
+#include "remoting/host/shared_buffer_sender.h" |
+#include "remoting/host/video_frame_capturer.h" |
+#include "third_party/skia/include/core/SkRect.h" |
+#include "third_party/skia/include/core/SkRegion.h" |
namespace IPC { |
class ChannelProxy; |
@@ -24,29 +31,50 @@ class AutoThreadTaskRunner; |
// Provides screen/audio capturing and input injection services for |
// the network process. |
-class DesktopSessionAgent : public IPC::Listener { |
+class DesktopSessionAgent |
+ : public base::RefCountedThreadSafe<DesktopSessionAgent>, |
+ public IPC::Listener, |
+ public SharedBufferSender, |
+ public VideoFrameCapturer::Delegate { |
public: |
- static scoped_ptr<DesktopSessionAgent> Create( |
+ static scoped_refptr<DesktopSessionAgent> Create( |
scoped_refptr<AutoThreadTaskRunner> caller_task_runner, |
- scoped_refptr<AutoThreadTaskRunner> io_task_runner); |
- |
- virtual ~DesktopSessionAgent(); |
+ scoped_refptr<AutoThreadTaskRunner> io_task_runner, |
+ scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner); |
// IPC::Listener implementation. |
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; |
virtual void OnChannelError() OVERRIDE; |
+ // SharedBufferSender implementation. |
+ virtual void RegisterSharedBuffer( |
+ scoped_refptr<SharedBuffer> buffer) OVERRIDE; |
+ virtual void DropSharedBuffer(intptr_t id) OVERRIDE; |
+ |
+ // VideoFrameCapturer::Delegate implementation. |
Wez
2012/11/16 23:37:31
We should follow up to re-name VideoFrameCapturer:
alexeypa (please no reviews)
2012/11/19 21:46:25
Ack.
|
+ virtual void OnCaptureCompleted( |
+ scoped_refptr<CaptureData> capture_data) OVERRIDE; |
+ virtual void OnCursorShapeChanged( |
+ scoped_ptr<protocol::CursorShapeInfo> cursor_shape) OVERRIDE; |
+ |
// Creates the screen/audio recorders, input stubs and the IPC channel to be |
// used to access them. Returns a handle of the client end of the IPC channel |
// pipe to be forwarder to the corresponding desktop environment. |
Wez
2012/11/16 23:37:31
typo: forwarded.
I'd suggest rewording this to ma
alexeypa (please no reviews)
2012/11/19 21:46:25
Done.
|
bool Start(const base::Closure& done_task, |
IPC::PlatformFileForTransit* desktop_pipe_out); |
+ // Stops the agent asynchronously. |
Wez
2012/11/16 23:37:31
How does the caller know when this object is compl
alexeypa (please no reviews)
2012/11/19 21:46:25
I renamed |done_task| so it is not getting associa
|
+ void Stop(); |
+ |
protected: |
DesktopSessionAgent( |
scoped_refptr<AutoThreadTaskRunner> caller_task_runner, |
- scoped_refptr<AutoThreadTaskRunner> io_task_runner); |
+ scoped_refptr<AutoThreadTaskRunner> io_task_runner, |
+ scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner); |
+ |
+ friend class base::RefCountedThreadSafe<DesktopSessionAgent>; |
+ virtual ~DesktopSessionAgent(); |
// Creates a pre-connected IPC channel to be used to access the screen/audio |
Wez
2012/11/16 23:37:31
nit: What does "pre-connected" mean? Do you just
alexeypa (please no reviews)
2012/11/19 21:46:25
Done.
|
// recorders and input stubs. |
@@ -54,6 +82,24 @@ class DesktopSessionAgent : public IPC::Listener { |
IPC::PlatformFileForTransit* client_out, |
scoped_ptr<IPC::ChannelProxy>* server_out) = 0; |
+ void InvalidateRegion(scoped_ptr<SkRegion> invalid_region); |
Wez
2012/11/16 23:37:31
Why not fold this in to OnInvalidateRegion?
alexeypa (please no reviews)
2012/11/19 21:46:25
To avoid creating a copy of a bunch of rects. OnIn
|
+ |
+ // Implements VideoFrameCapturer::CaptureInvalidRegion. |
Wez
2012/11/16 23:37:31
nit: You mean "Implements the CaptureInvalidRegion
alexeypa (please no reviews)
2012/11/19 21:46:25
Done.
|
+ void OnCaptureFrame(); |
+ |
+ // Implements VideoFrameCapturer::InvalidateRegion. |
+ void OnInvalidateRegion(const std::vector<SkIRect>& invalid_region); |
+ |
+ // Handles the ChromotingNetworkDesktopMsg_SharedBufferRegistered notification |
+ // from the network process. |
+ void OnSharedBufferRegistered(intptr_t id); |
+ |
+ // Sends a message to the network process. |
+ void SendToNetwork(IPC::Message* message); |
+ |
+ void StartVideoCapturer(); |
+ void StopVideoCapturer(); |
Wez
2012/11/16 23:37:31
nit: Add comments to explain the function of these
alexeypa (please no reviews)
2012/11/19 21:46:25
Done. What there methods do is documented by their
Wez
2012/11/20 07:05:39
You only need these methods so you have something
alexeypa (please no reviews)
2012/11/20 20:15:17
Done.
|
+ |
scoped_refptr<AutoThreadTaskRunner> caller_task_runner() const { |
Wez
2012/11/16 23:37:31
Add a comment explaining that these getters provid
alexeypa (please no reviews)
2012/11/19 21:46:25
I don't see any value in such a comment. There are
Wez
2012/11/20 07:05:39
Right; a comment should describe why we need them,
alexeypa (please no reviews)
2012/11/20 20:15:17
I added the comment but I still think it is not su
|
return caller_task_runner_; |
} |
@@ -62,6 +108,10 @@ class DesktopSessionAgent : public IPC::Listener { |
return io_task_runner_; |
} |
+ scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner() const { |
+ return video_capture_task_runner_; |
+ } |
+ |
private: |
// Task runner on which public methods of this class should be called. |
scoped_refptr<AutoThreadTaskRunner> caller_task_runner_; |
@@ -69,6 +119,9 @@ class DesktopSessionAgent : public IPC::Listener { |
// Message loop used by the IPC channel. |
scoped_refptr<AutoThreadTaskRunner> io_task_runner_; |
+ // Task runner on which video public methods of this class should be called. |
Wez
2012/11/16 23:37:31
Is this correct? Isn't this the thread on which th
alexeypa (please no reviews)
2012/11/19 21:46:25
Done.
|
+ scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner_; |
+ |
// Run on |caller_task_runner_| to notify the caller that |this| has been |
// stopped. |
base::Closure done_task_; |
@@ -76,6 +129,12 @@ class DesktopSessionAgent : public IPC::Listener { |
// IPC channel connecting the desktop process with the network process. |
scoped_ptr<IPC::ChannelProxy> network_channel_; |
+ // List of the shared buffers registered via |SharedBufferSender| interface. |
+ typedef std::list<scoped_refptr<SharedBuffer> > SharedBuffers; |
+ SharedBuffers shared_buffers_; |
+ |
+ scoped_ptr<VideoFrameCapturer> video_capturer_; |
+ |
DISALLOW_COPY_AND_ASSIGN(DesktopSessionAgent); |
}; |