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

Unified Diff: remoting/host/chromoting_host.h

Issue 2829018: Fix thread usage in chromoting host (Closed)
Patch Set: removed useless test Created 10 years, 6 months 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 | « no previous file | remoting/host/chromoting_host.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/chromoting_host.h
diff --git a/remoting/host/chromoting_host.h b/remoting/host/chromoting_host.h
index 930bf89d1c11cdb5bbd32162d6e617ca43e05682..fd077913931e39e3e51b1ae3b9d8a6f75b988e19 100644
--- a/remoting/host/chromoting_host.h
+++ b/remoting/host/chromoting_host.h
@@ -17,12 +17,11 @@
#include "remoting/jingle_glue/jingle_client.h"
#include "remoting/jingle_glue/jingle_thread.h"
-namespace base {
-class WaitableEvent;
-} // namespace base
+class Task;
namespace remoting {
+class ChromotingHostContext;
class MutableHostConfig;
// A class to implement the functionality of a host process.
@@ -51,24 +50,24 @@ class MutableHostConfig;
// return to the idle state. We then go to step (2) if there a new
// incoming connection.
class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
- public ClientConnection::EventHandler,
- public JingleClient::Callback {
+ public ClientConnection::EventHandler,
+ public JingleClient::Callback {
public:
- ChromotingHost(MutableHostConfig* config, Capturer* capturer,
- Encoder* encoder, EventExecutor* executor,
- base::WaitableEvent* host_done);
+ ChromotingHost(ChromotingHostContext* context, MutableHostConfig* config,
+ Capturer* capturer, Encoder* encoder, EventExecutor* executor);
virtual ~ChromotingHost();
- // Run the host porcess. This method returns only after the message loop
- // of the host process exits.
- void Run();
+ // Start the host porcess. This methods starts the chromoting host
+ // asynchronously.
+ //
+ // |shutdown_task| is called if Start() has failed ot Shutdown() is called
+ // and all related operations are completed.
+ //
+ // This method can only be called once during the lifetime of this object.
+ void Start(Task* shutdown_task);
// This method is called when we need to the host process.
- void DestroySession();
-
- // This method talks to the cloud to register the host process. If
- // successful we will start listening to network requests.
- void RegisterHost();
+ void Shutdown();
// This method is called if a client is connected to this object.
void OnClientConnected(ClientConnection* client);
@@ -95,20 +94,21 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
scoped_refptr<JingleChannel> channel);
private:
- // The message loop that this class runs on.
- MessageLoop* message_loop();
-
- // The main thread that this object runs on.
- base::Thread main_thread_;
+ enum State {
+ kInitial,
+ kStarted,
+ kStopped,
+ };
- // Used to handle the Jingle connection.
- JingleThread network_thread_;
+ // This method connects to the talk network and start listening for incoming
+ // connections.
+ void DoStart(Task* shutdown_task);
- // A thread that hosts capture operations.
- base::Thread capture_thread_;
+ // This method shuts down the host process.
+ void DoShutdown();
- // A thread that hosts encode operations.
- base::Thread encode_thread_;
+ // The context that the chromoting host runs on.
+ ChromotingHostContext* context_;
scoped_refptr<MutableHostConfig> config_;
@@ -137,8 +137,17 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
// Session manager for the host process.
scoped_refptr<SessionManager> session_;
- // Signals the host is ready to be destroyed.
- base::WaitableEvent* host_done_;
+ // This task gets executed when this object fails to connect to the
+ // talk network or Shutdown() is called.
+ scoped_ptr<Task> shutdown_task_;
+
+ // Tracks the internal state of the host.
+ // This variable is written on the main thread of ChromotingHostContext
+ // and read by jingle thread.
+ State state_;
+
+ // Lock is to lock the access to |state_|.
+ Lock lock_;
DISALLOW_COPY_AND_ASSIGN(ChromotingHost);
};
« no previous file with comments | « no previous file | remoting/host/chromoting_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698