Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Unified Diff: remoting/host/desktop_session_agent.h

Issue 11413022: DesktopSessionAgent now hosts the video capturer and provides necessary plumbing to drive it via an… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing clang compilation. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/desktop_process.cc ('k') | remoting/host/desktop_session_agent.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..85ea314c9664135855029213704df27f0a37267a 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,10 @@
#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/base/shared_buffer_factory.h"
+#include "remoting/host/video_frame_capturer.h"
+#include "third_party/skia/include/core/SkRect.h"
namespace IPC {
class ChannelProxy;
@@ -24,36 +30,81 @@ 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 SharedBufferFactory,
+ 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;
- // 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.
- bool Start(const base::Closure& done_task,
+ // SharedBufferFactory implementation.
+ virtual scoped_refptr<SharedBuffer> CreateSharedBuffer(uint32 size) OVERRIDE;
+ virtual void ReleaseSharedBuffer(scoped_refptr<SharedBuffer> buffer) OVERRIDE;
+
+ // VideoFrameCapturer::Delegate implementation.
+ virtual void OnCaptureCompleted(
+ scoped_refptr<CaptureData> capture_data) OVERRIDE;
+ virtual void OnCursorShapeChanged(
+ scoped_ptr<protocol::CursorShapeInfo> cursor_shape) OVERRIDE;
+
+ // Creates desktop integration components and a connected IPC channel to be
+ // used to access them. The client end of the channel is returned in
+ // the variable pointed by |desktop_pipe_out|.
+ //
+ // |disconnected_task| is invoked on |caller_task_runner_| to notify
+ // the caller that the network-to-desktop channel has been disconnected.
+ bool Start(const base::Closure& disconnected_task,
IPC::PlatformFileForTransit* desktop_pipe_out);
+ // Stops the agent asynchronously.
+ 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);
- // Creates a pre-connected IPC channel to be used to access the screen/audio
+ friend class base::RefCountedThreadSafe<DesktopSessionAgent>;
+ virtual ~DesktopSessionAgent();
+
+ // Creates a connected IPC channel to be used to access the screen/audio
// recorders and input stubs.
- virtual bool DoCreateNetworkChannel(
+ virtual bool CreateChannelForNetworkProcess(
IPC::PlatformFileForTransit* client_out,
scoped_ptr<IPC::ChannelProxy>* server_out) = 0;
+ // Handles CaptureFrame requests from the client.
+ void OnCaptureFrame();
+
+ // Handles InvalidateRegion requests from the client.
+ void OnInvalidateRegion(const std::vector<SkIRect>& invalid_rects);
+
+ // Handles SharedBufferCreated notification from the client.
+ void OnSharedBufferCreated(int id);
+
+ // Sends a message to the network process.
+ void SendToNetwork(IPC::Message* message);
+
+ // Posted to |video_capture_task_runner_| task runner to start the video
+ // capturer.
+ void StartVideoCapturer();
+
+ // Posted to |video_capture_task_runner_| task runner to stop the video
+ // capturer.
+ void StopVideoCapturer();
+
+ // Getters providing access to the task runners for platform-specific derived
+ // classes.
scoped_refptr<AutoThreadTaskRunner> caller_task_runner() const {
return caller_task_runner_;
}
@@ -62,6 +113,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,13 +124,25 @@ class DesktopSessionAgent : public IPC::Listener {
// Message loop used by the IPC channel.
scoped_refptr<AutoThreadTaskRunner> io_task_runner_;
- // Run on |caller_task_runner_| to notify the caller that |this| has been
- // stopped.
- base::Closure done_task_;
+ // Task runner dedicated to running themethods of the video capturer.
+ scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner_;
+
+ // Runs on |caller_task_runner_| to notify the caller that the network-to-
+ // desktop channel has been disconnected.
+ base::Closure disconnected_task_;
// IPC channel connecting the desktop process with the network process.
scoped_ptr<IPC::ChannelProxy> network_channel_;
+ // Next shared buffer ID to be used.
+ int next_shared_buffer_id_;
+
+ // List of the shared buffers registered via |SharedBufferFactory| interface.
+ typedef std::list<scoped_refptr<SharedBuffer> > SharedBuffers;
+ SharedBuffers shared_buffers_;
+
+ scoped_ptr<VideoFrameCapturer> video_capturer_;
+
DISALLOW_COPY_AND_ASSIGN(DesktopSessionAgent);
};
« no previous file with comments | « remoting/host/desktop_process.cc ('k') | remoting/host/desktop_session_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698